arleyandrada / PushClient

FREE and Open Source - Titanium PushClient Module
Other
44 stars 17 forks source link

Tamanho de imagem #61

Closed somefakeuser closed 9 years ago

somefakeuser commented 9 years ago

Olá Arley,

A imagem da notificação está com zoom. Isto é um bug ou estou fazendo algo errado?

Seguem os screenshots.

Essa primeira imagem está com o tamanho da icone normal.

screenshot_2014-11-07-12-41-56 2

Aqui na segunda mostra que no momento da notificação, a imagem fica com um zoom.

screenshot_2014-11-07-12-42-28 2

Obrigado.

arleyandrada commented 9 years ago

Não posso fazer testes agora, mas pode ser um BUG sim. Você enviou a notificação indicando um "largeIcon"?

No link abaixo tem uma discussão sobre algo semelhante ao seu problema: http://stackoverflow.com/questions/13847297/notificationcompat-4-1-setsmallicon-and-setlargeicon

Meu módulo utiliza o icone do app "appicon" como sendo o ícone pequeno para notificações.

Se descobrir algo novo me retorne. Obrigado!

arleyandrada commented 9 years ago

Em anexo segue uma nova versão do meu módulo. Agora você pode enviar uma notificação push Android e especificar um "smallIcon" para garantir o resultado esperado.

Também consta nesta versão a compatibilidade com o Titanium SDK 3.4 para iOS, inclusão de recursos para notificações interativas do iOS8, além de pequenas correções.

Esta nova versão estará disponível em breve na loja de módulos da Appcelerator.

Espero que atenda suas necessidades.

Obrigado!

[ attachment removed ]

somefakeuser commented 9 years ago

Olá Arley,

Muito obrigado!

Será muito útil.

Só ficará faltando personalizar o tempo da piscada da luz e a cor do Led.

Estava quase desistindo do recurso de notificação do módulo. Estava usando só para registrar e administrar as mensagens.

Cheguei até a olhar os xmls do modulo para tentar ver quais eram os nomes dos serviços (intents)

Vou voltar a usar suas notificações. Bem mais simples.

Mais uma vez, muito obrigado.

Abs

somefakeuser commented 9 years ago

Olá Arley,

Estou desenvolvendo um app multiplataforma, portanto, agora estou focando IOS. Depois de muitos testes, descobri que seu módulo só está compilando no Android. Quando tento fazer um teste com o módulo no iPhone (device e simulator) dá um erro.

Para te ajudar, abri o xcode e tentei compilar. O erro que retornou foi este:

screen shot 2014-11-14 at 18 14 41

Abs,

arleyandrada commented 9 years ago

Esta mensagem de erro de compilação é devida a um BUG do Titanium Studio. A forma de contornar este problema está documentada em meu código de exemplo.

//Workaround to Titanium Mobile issue #17030
//https://jira.appcelerator.org/browse/TIMOB-17030
if (!OS_ANDROID) {
    var issue17030 = Ti.Network.registerForPushNotifications;
    var issue17030iOS8 = Ti.App.iOS.registerUserNotificationSettings;
}

Basta incluir este trecho de código em qualquer parte do seu projeto.

somefakeuser commented 9 years ago

Arley,

Funcionou. Eu só tinha a primeira linha.

Muito obrigado.

Abs.

somefakeuser commented 9 years ago

Olá Arley,

Tudo bem?

Seguinte, quando fui publicar para a loja do android deu um problema de incompatibilidade de pakage. Reclama que o pacote do google play services do seu módulo 1.6 está diferente do ti.map 2.2.2. Ele sugere copiar o google play services de um diretório para o outro. Fiz isso mas dá erro na compilação

Sabe como posso contornar isso?

Abs.

arleyandrada commented 9 years ago

Desculpe pela demora no retorno. Pretendo liberar uma versão corrigida ainda hoje.

Entro em contato.

somefakeuser commented 9 years ago

Muito Obrigado Arley!

arleyandrada commented 9 years ago

O problema foi resolvido finalmente! Pode utilizar a versão do módulo PushClient em anexo. Lembre de fazer um "clean" em seu projeto antes de compilar novamente (após atualizar o módulo).

Qualquer dúvida ou problema me retorne.

Obrigado!

Arley

[ attachment removed ]

somefakeuser commented 9 years ago

Olá Arley,

Funcionou perfeitamente!

Muito obrigado.

Existe alguma previsão de colocar o tempo e cor da luz que pisca no Android? A piscada está rápida demais.

Exemplo:

notification.ledARGB = Color.BLUE;
notification.ledOnMS = 1000;
notification.ledOffMS = 300;

E quando tento fazer acho que o seu sobrescreve. Parece besteira, mas é importante.

Mais uma vez, muito obrigado pelo suporte.

Abs.

arleyandrada commented 9 years ago

Experimente esta nova versão em anexo. Fiz a inclusão das configurações para a cor e brilho da luz de notificação conforme solicitado.

Me retorne se estiver funcionando como o esperado.

Atenciosamente,

Arley

[ attachment removed ]

somefakeuser commented 9 years ago

Perfeito Arley! Quais são os campos? Mesmos nomes que te passei? Abs.

arleyandrada commented 9 years ago

Sim, mesmos nomes. Essa informação dos nomes foi incluída no código de exemplo do Android.

arleyandrada commented 9 years ago

Funcionou para você?

somefakeuser commented 9 years ago

Olá Arley,

Estava testando para ver se era algum problema meu, mas não consegui.

Meu payload (PHP):

                'alert' => $message,
                "title" => $title,
                "smallIcon" => "alert_icon",
                "lights" => true,
                "vibrate" => true,
                "notificationId" => 1,
                "ledARGB" => hexdec("FFff0000"),
                "ledOnMS" => 2000,
                "ledOffMS" => 2000

Ví na documentação que o ledARGB tem umas constantes. Não sei se é este o problema. A piscada da luz também continua a mesma. Meu payload está errado?

Abs.

arleyandrada commented 9 years ago

Para o atributo "ledARGB" você não precisa de nada especial... pode usar desde "red" (nome das cores), até string com "#ffff0000".

Para os atributos "ledOnMS" e "ledOffMS" é realmente apenas um valor inteiro representando o tempo em milissegundos como você fez.

Vou fazer mais alguns testes aqui também. Qualquer novidade me retorne.

Obrigado!

somefakeuser commented 9 years ago

Fala Arley,

Comentei da cor porque ví um exemplo usando "Color.Blue". Troquei o parametro para "red" e mesmo assim não funcionou.

As variáveis estão chegando no aplicativo.

eventCallback:{"type":"PushClient_Callback","source":{"bubbleParent":true,"apiName":"Ti.Module","invocationAPIs":[],"_events":{"PushClient_Success":{},"PushClient_Error":{},"PushClient_Callback":{}}},"data":{"notificationId":"1","title":"\"teste de titulo\"","smallIcon":"alert_icon","collapse_key":"do_not_collapse","alert":"\"teste de mensagem\"","gcm":{"handlerId":0,"messageType":"gcm"},"ledOnMS":"2000","vibrate":"true","from":"1076905688673","ledARGB":"red","ledOffMS":"2000"},"mode":3,"bubbles":false,"success":true,"code":0,"cancelBubble":false}

Abs.

arleyandrada commented 9 years ago

Encontrei um bug. Segue em anexo uma nova versão que funciona como o esperado.

[ attachment removed ]

somefakeuser commented 9 years ago

Olá Arley,

Não deu certo. Coloquei este payload:

'alert' => $message,
"title" => $title,
"sound" => "default",
"smallIcon" => "alert_icon",
"lights" => true,
"vibrate" => true,
"notificationId" => 1,
"ledARGB" => "#ffff0000",
arleyandrada commented 9 years ago

Confira se o módulo foi atualizado com o último e-mail que enviei e experimente informar a cor de formas diferentes.

Em meus testes eu consegui fazer funcionar (acabei de repetir os testes) utilizando tanto o nome da cor, como a cor em hexa, como os exemplos abaixo:

{"alert":"verde","ledARGB":"green","ledOnMS":2000,"ledOffMS":2000}
{"alert":"vermelho","ledARGB":"red","ledOnMS":2000,"ledOffMS":2000}

ou

{"alert":"vermelho","ledARGB":"#ff0000","ledOnMS":2000,"ledOffMS":2000}
{"alert":"verde","ledARGB":"#00ff00","ledOnMS":2000,"ledOffMS":2000}

ou

{"alert":"vermelho","ledARGB":"#ffff0000","ledOnMS":2000,"ledOffMS":2000}
{"alert":"verde","ledARGB":"#ff00ff00","ledOnMS":2000,"ledOffMS":2000}

Aguardo seu retorno.

somefakeuser commented 9 years ago

Tô testando tanto hex e cor e não está funcionando. Reinstalei o módulo duas vezes. Tem certeza que me mandou o módulo atualizado?

somefakeuser commented 9 years ago

Agora apaguei os modulos do Titanium, baixei denovo e instalei. Mesmo assim não funciona. Teria como mandar uma outra versão? Tipo 1.7.1.

1.7.1 é ruim, mas é só para teste :p

arleyandrada commented 9 years ago

Hehehe...

Segue em anexo, desta vez sem utilizar o download do Google Drive, de uma versão (ainda 1.7) porém que acabo de recompilar para ter certeza de que estava correto.

Você está mantendo o seu dispositivo com a tela desligada (black screen - locked) ao enviar a notificação push? As luzes no Android somente são exibidas neste cenário... e não é uma opção da aplicação.

http://stackoverflow.com/questions/14423488/how-to-enable-android-led-notification-light-even-when-the-screen-is-unlocked

Tente novamente e me retorne.

[ attachment removed ]

somefakeuser commented 9 years ago

Baixei e continua não fazendo. Muito estranho. Sim, estou mantendo o dispositivo assim mesmo. Eu tenho um aplicativo de terceiro que pisca azul e a piscada é demorada. Teria como me mandar um exemplo de um aplicativo que esteja funcionando? Pode ser algum problema de configuração.

Abs.

somefakeuser commented 9 years ago

Eu estou olhando os logs e percebi que as variáveis do payload chegam como String:

eventCallback:{"type":"PushClient_Callback","source":{"bubbleParent":true,"apiName":"Ti.Module","invocationAPIs":[],"_events":{"PushClient_Success":{},"PushClient_Error":{},"PushClient_Callback":{}}},"data":{"lights":"true","notificationId":"1","title":"\"teste de titulo\"","smallIcon":"alert_icon","collapse_key":"do_not_collapse","ledARGB":"red","sound":"default","alert":"\"teste de mensagem\"","gcm":{"handlerId":0,"messageType":"gcm"},"ledOnMS":"2000","vibrate":"true","from":"1076905688673","ledOffMS":"2000"},"mode":3,"bubbles":false,"success":true,"code":0,"cancelBubble":false}

Isso pode dar algum problema?

arleyandrada commented 9 years ago

Não tem problema os valores inteiros estarem sendo recebidos no formato string. Isso é normal... Também não existe nenhum tipo de configuração especial...

Porém acho que encontrei o problema:

Copiei o conteúdo do seu atributo "data" (conteúdo enviado pelo provedor) e descobri que o problema está no atributo "lights" que não deve ser enviado junto com os atributos de "ledXXXX".

Pelo que pude entender, ao enviar o atributo "lights" ele ativa o "modo padrão" ao invés de utilizar o "modo customizado".

Com apenas esta mudança eu consegui receber uma notificação com luz vermelha e como o esperado.

Veja se funciona para você também.

Aguardo retorno.

somefakeuser commented 9 years ago

AEEEEEEEE Funcionou!

Muito obrigado Arley!

somefakeuser commented 9 years ago

Olá Arley,

Quanto tempo :D

Seguinte,

Os eventos do callback não estão funcionando para o IOS (mode_click, mode_foreground, etc..). Só funciona para android?

Abs.

arleyandrada commented 9 years ago

Com certeza funciona muito bem para iOS!

Possivelmente não é que não esteja disparando os eventos de callback, mas sim que você não está recebendo as notificações push.

Você está utilizando a última versão do meu módulo? Está utilizando qual provedor push? Gerou e está utilizando corretamente o certificado da Apple de desenvolvimento e/ou produção?

Revise as questões básicas: identificador do app igual ao registrado na Apple; uso do certificado correto; notificações push ativadas na Apple para seu app; uso de um dispositivo e não de um emulador; etc...

É isso...

Dê notícias.

somefakeuser commented 9 years ago

Fala Arley. Tô usando a versão que vc me mandou. A 17. Acho que é a última. Por incrível que pareça, eu recebo as informações da notificação no app. Som, badge, etc... Os eventos não disparam mesmo assim. Montei um servidor de envio na mão e tô enviando. Configurei o payload e funciona tudo. A mensagem aparece, a notificação aparece, o badge do ícone muda para o número que mandei, etc... A notificação chega, mas não chama o callback dentro do app. Muito estranho. Como posso fazer para debugar ou mandar alguma informação para vc?

Abs

arleyandrada commented 9 years ago

Vou tentar simular este problema. Me conte qual a versão do Titanium SDK, do Titanium Studio e qual dispositivo está utilizando e versão do iOS. Pode também alterar o nível de log do Titanium para TRACE e me enviar todo o log desde a compilação, inicialização e recebimento de uma notificação no dispositivo.

somefakeuser commented 9 years ago

Tô usando 3.4.1 e o 3.5.0. Já procurei bastante e não achei o lugar que altera o log level.

Onde está isso?

Abs.

somefakeuser commented 9 years ago

Arley,

Acabei de perceber uma coisa.

No IOS o latest version é 1.6 No Android o latest version é 1.7

Está certo?

somefakeuser commented 9 years ago

Bom,

Só pra vc saber.

Baixei do site do market place e instalou o 1.7. O problema persiste.

Abs.

somefakeuser commented 9 years ago

Arley,

Descobri o problema.

Exemplo:

var gl_pc = require('br.com.arlsoft.pushclient');

A variável "gl_pc" que carrega seu módulo precisa ser global. Eu estava mandando um require e instanciando local. Provavelmente ele acessa essa váriavel nos callbacks.

gl_pc.EVENT_SUCCESS
gl_pc.EVENT_ERROR
gl_pc.EVENT_CALLBACK

Abs!

somefakeuser commented 9 years ago

Vou acabar enchendo sua caixa de e-mail. o MODE_BACKGROUND funciona no IOS?

Abs.

arleyandrada commented 9 years ago

Estive ausente ontem e não pude manter contato. Que bom que descobriu o problema!!

Sim, o MODE_BACKGROUND funciona para iOS, porém você deve utilizar a opção de "remote-notification" para UIBackgroundModes.

Inclua em seu arquivo tiapp.xml

    <ios>
        <plist>
            <dict>
                .....
                <key>UIBackgroundModes</key>
                <array>
                    <string>remote-notification</string>
                </array>
                .....

Envie uma notificação com o atributo "content-available" (Int).

Um abraço,

Arley

somefakeuser commented 9 years ago

Esse content avaiable é o tamanho total do payload ou da mensagem?

arleyandrada commented 9 years ago

Não tem um sentido definido. É algo que pode ter sentido para seu app. Para funcionar como "background" a Apple define que basta que exista e com valor diferente de zero.

somefakeuser commented 9 years ago

Olá Arley,

Eu denovo. A notificação não aparece enquanto o app está aberto. não sei se vc entendeu o que estou dizendo. o whatsapp, por exemplo exibe notificação enquanto está aberto.

Entendeu o que quis dizer?

Grande abs.

arleyandrada commented 9 years ago

Exatamente. Não é exibida a mensagem push na central de notificações quando o app está em foreground, no entanto o evento "callback" é acionado normalmente para que você possa tratá-lo como desejar... inclusive, se for sua necessidade, pode criar uma "local notification".

Este comportamento é um padrão (não opcional) para notificações push no iOS e repetido por mim como padrão para o Android.

Um abraço,

Arley

somefakeuser commented 9 years ago

Fala Arley,

Teria como eu chamar alguma função da sua biblioteca para realizar essa notificação local?

Abs.

arleyandrada commented 9 years ago

Não existe esta opção.

somefakeuser commented 9 years ago

Ola Arley,

Dei uma pesquisada e ví que pra usar o largeicon que existe no seu push, teria que fazer um hack ou um módulo para Titanium. Eu comprei o seu para evitar isso e poupar tempo. Você conhece algum módulo de localnotification que possa indicar?

Obrigado.

arleyandrada commented 9 years ago

Entendo seu problema e realmente você estaria limitado no Android com o que tem disponível no mercado e na própria SDK do Titanium.

Segue em anexo uma nova versão do módulo, atualizada apenas para Android, onde você conseguirá gerar notificações locais com exatamente as mesmas opções disponíveis para as notificações remotas.

Para iOS você continua tendo que utilizar o que tem disponível na SDK do Titanium ou qualquer outro módulo.

Utilize da seguinte forma:

var eventCallback = function(event) {
    ...
    if (event.mode == PushClient.MODE_FOREGROUND) {
        if (OS_ANDROID) {
            PushClient.showLocalNotification(event.data);
        }
    }
    ...
};

Qualquer dúvida me retorne.

Um abraço,

Arley

[ attachment removed ]

somefakeuser commented 9 years ago

Obrigado,

Vou testar. Só ví sua mensagem agora.

De qualquer forma, vou ter que fazer um tratamento, porque precisa funcionar para IOS tb. Estou estudando a fundo o Titanium e já comecei a desenvolver o módulo. Depois de quebrar bastante a cabeça com o JAVA do Android, resolvi todos os problemas e estou partindo para o desenvolvimento do IOS, mesmo assim, ainda prefiro usar seu módulo, pois não seria legal um app com 2 serviços etc....

Não pra fazer uma função igual para IOS?

Agora que já meteu a mão, só uma chamada pública para o IOS :D

Muito Obrigado pela ajuda!

Grande Abs.

arleyandrada commented 9 years ago

Se fosse simples assim, pode ter certeza de que eu teria feito.

Para o iOS o meu módulo, em nenhum momento gera a notificação que é exibida. Quem toma conta disso é o próprio iOS. Por este motivo, se eu fosse implementar esse recurso, eu teria que gerar várias "linhas de código" e ainda tratar a compatibilidade de diferentes versões do iOS. Enfim, não vale a pena para mim.

Para o iOS você pode facilmente utilizar os recursos da Titanium SDK, que não tem nenhuma limitação.

Um abraço,

Arley

somefakeuser commented 9 years ago

Blz Arley. obrigado!