Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Não consigo pegar o refreshed token depois que o app está instalado

Só consigo pegar o refreshed token quando instalo a aplicação. Se rodar pela segunda vez, depois de instalada, ele para de pegar o refreshed token. Com isso, nem consigo enviar o push notification através do console do firebase. Quando envio, o app crasha e não mostra nenhuma msg de erro no log.

Segue código no github: https://github.com/maykemrezende/Agenda

Segue log:

D/OkHttp: {"alunos":[{"id":"094c98c3-86cc-4554-b0d1-7f0c404d8723","nome":"carlos","endereco":"rua do carlos","telefone":"3213122","site":"www.sitedojoao.com.br","nota":10.0,"desativado":0,"idCliente":0},{"id":"1609aed4-c8f5-4441-9112-5271c74f9f12","nome":"Jorge do servidor","endereco":"rua do cidadão","telefone":"312312","site":"www.sitedoaluno.com.br","nota":10.0,"desativado":0,"idCliente":0},{"id":"37403fd2-b61b-439c-a625-37a1670c4188","nome":"Joao das cove","endereco":"rua do joao","telefone":"11111","site":"www.sitedojoao.com.br","nota":5.0,"desativado":0,"idCliente":0},{"id":"9f4e8046-42b0-4f4d-a648-ccddfaf849cd","nome":"joaquim","endereco":"rua dele","telefone":"1111111","site":"site dele","nota":10.0,"desativado":0,"idCliente":0},{"id":"d3cfec54-fc50-4ed3-8dea-a25b081ab360","nome":"Paulo da Silva","endereco":"rua do paulo","telefone":"2131232","site":"www.sitedopaulo.com.br","nota":6.0,"desativado":0,"idCliente":0}],"momentoDaUltimaModificacao":"2018-01-27T12:04:37.605"}
D/OkHttp: <-- END HTTP (983-byte body)
I/id do aluno: 37403fd2-b61b-439c-a625-37a1670c4188
I/id do aluno: 1609aed4-c8f5-4441-9112-5271c74f9f12
I/id do aluno: d3cfec54-fc50-4ed3-8dea-a25b081ab360
I/id do aluno: 094c98c3-86cc-4554-b0d1-7f0c404d8723
I/id do aluno: 9f4e8046-42b0-4f4d-a648-ccddfaf849cd
I/zygote: Do full code cache collection, code=115KB, data=76KB
I/zygote: After code cache collection, code=106KB, data=53KB
V/FA: Inactivity, disconnecting from the service
I/FirebaseCrash: Sending crashes
I/FirebaseAuth: [FirebaseAuth:] Loading module via FirebaseOptions.
I/FirebaseAuth: [FirebaseAuth:] Preparing to create service connection to gms implementation
D/FA: Logging event (FE): notification_receive(_nr), Bundle[{firebase_event_origin(_o)=fcm, firebase_screen_class(_sc)=ListaAlunosActivity, firebase_screen_id(_si)=1616234918231572058, message_device_time(_ndt)=0, message_name(_nmn)=msg test, message_time(_nmt)=1517062568, message_id(_nmid)=1513946152651624431}]
V/FA: Connecting to remote service
D/FA: Connected to remote service
V/FA: Processing queued up service tasks: 1
W/zygote: Verification of boolean com.google.firebase.messaging.zza.zzs(android.os.Bundle) took 640.877ms
D/FA: Logging event (FE): notification_foreground(_nf), Bundle[{firebase_event_origin(_o)=fcm, firebase_screen_class(_sc)=ListaAlunosActivity, firebase_screen_id(_si)=1616234918231572058, message_device_time(_ndt)=0, message_name(_nmn)=msg test, message_time(_nmt)=1517062568, message_id(_nmid)=1513946152651624431}]
V/FA: Inactivity, disconnecting from the service
V/FA: Recording user engagement, ms: 715363
V/FA: Connecting to remote service
V/FA: Activity paused, time: 1462672
D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=715363, firebase_screen_class(_sc)=ListaAlunosActivity, firebase_screen_id(_si)=1616234918231572058}]
D/EGL_emulation: eglMakeCurrent: 0x9c8057e0: ver 2 0 (tinfo 0x9c803830)
V/FA: Connection attempt already in progress
D/FA: Connected to remote service
V/FA: Processing queued up service tasks: 2
V/FA: Inactivity, disconnecting from the service
W/FirebaseMessaging: Missing Default Notification Channel metadata in AndroidManifest. Default value will be used.
D/FA: Logging event (FE): notification_receive(_nr), Bundle[{firebase_event_origin(_o)=fcm, message_device_time(_ndt)=0, message_name(_nmn)=msg test, message_time(_nmt)=1517062614, message_id(_nmid)=4734581825936513644}]
V/FA: Connecting to remote service
D/FA: Connected to remote service
V/FA: Processing queued up service tasks: 1
V/FA: Inactivity, disconnecting from the service
8 respostas

Oi Mayke, tudo bem?

Aparece o token no log? Quando tenta mandar a notificação via console, você deixa a App em Background? Para ela aparecer em Foreground é necessário apresentá-la de maneira manual, eu tenho um post falando disso:

http://blog.alura.com.br/tratando-notificacoes-recebidas-do-firebase-no-android/

Sobre o comportamento da geração do refreshedToken

De fato o comportamento do refreshedToken() é ser acionado quando a App é executada pela primeira vez, então, quando ele gera o Token e o mantém... Por isso que ele só é acionado outra vez apenas quando desinstalamos a App ou limpamos os dado da mesma.

Uma alternativa para chamar o refreshedToken() sem fazer esses passos via SO é invalidando o token, você pode fazer isso chamando o seguinte código:

FirebaseInstanceId.getInstance().deleteInstanceId()

Porém, ao realizar esse procedimento, você perde o seu token e será necessário gerar um novo. Para gerar um token novamente, você pode chamar o método FirebaseInstanceId.getInstance().getToken();. Entretanto, se chamar esse método logo depois de ter removido o token, pode ser que ele devolva um null...

Em outras palavras, exige um cuidado maior nessa abordagem.

[]

Olá, Alex.

Então, eu fiz pra receber a notificação em background. O problema é que fica crashando sempre que envio a mensagem pelo console, mesmo com o app em background. Ele recebe o token quando reinstalo o app.

A aplicação crasha e não aparece mensagem de erro no log.

Opa Mayke, então vou baixar o seu projeto e testar aqui. Assim que eu identificar o problema eu te passo um feedback, blz?

[]s

Opa Mayke, então vou baixar o seu projeto e testar aqui. Assim que eu identificar o problema eu te passo um feedback, blz?

[]s

solução!

Oi Mayke, blz?

Esse problema é inédito pra mim, porém, eu consegui resolver fazendo uma pesquisa e tem um post explicando o motivo disso acontecer. Segue o link:

https://android.jlelse.eu/how-to-upgrade-your-app-to-android-oreo-and-avoid-a-factory-reset-f85e34767a09

Basicamente, agora, no Android O temos as notificações adaptativas que vem por padrão quando criamos o projeto, porém, parece que elas não funcionam bem durante o processo de inflate da notificação que é criada automaticamente pelo Firebase, por isso apresenta aquele crash...

Para resolver, basta apenas colocar o seguinte metadado com o ícone que você quer que o Firebase utilize por padrão quando ele manda a push notification:

<application 
     <!-- demais atributos -->>
     <!-- demais tags -->
<meta-data android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/nome_do_icone_que_desejar" />
</application>

No caso eu fiz o teste com a ic_launcher e funcionou. Modifique e veja se funciona como o esperado. Um outro detalhe que vi quando testei o seu código é que não tinha o google-services.json no módulo da App, acredito que tenha removido por questões de segurança, mas, caso contrário, é necessário adicioná-lo para que o Firebase Cloud Messaging funcione como esperado.

Se tiver mais dúvidas é só mandar.

[]s

Agora funcionou, Alex. Brigadão! Pesquisei de tudo que era jeito, mas não encontrava solução.

Que bom que deu certo, Mayke! Precisando de ajuda é só entrar em contato com a gente ;)

[]s