Estou migrando meu aplicativo do GCM para o FCM.
Quando um novo usuário instala meu aplicativo, o onTokenRefresh()
está sendo chamado automaticamente. O problema é que o usuário ainda não está logado (sem identificação de usuário).
Como posso acionar o onTokenRefresh()
depois que o usuário estiver logado?
android
firebase-cloud-messaging
TareK Khoury
fonte
fonte
Respostas:
O
onTokenRefresh()
método será chamado sempre que um novo token for gerado. Após a instalação do aplicativo, ele será gerado imediatamente (como você descobriu ser o caso). Ele também será chamado quando o token for alterado.De acordo com o
FirebaseCloudMessaging
guia:Isso significa que o registro do token é por aplicativo. Parece que você gostaria de utilizar o token depois que um usuário estiver conectado. O que eu sugiro é que você salve o token no
onTokenRefresh()
método para armazenamento interno ou preferências compartilhadas. Em seguida, recupere o token do armazenamento depois que um usuário fizer login e registre o token com seu servidor, conforme necessário.Se desejar forçar manualmente o
onTokenRefresh()
, você pode criar um IntentService e excluir a instância do token. Então, quando você chamar getToken, oonTokenRefresh()
método será chamado novamente.Código de exemplo:
EDITAR
onTokenRefresh () está obsoleto . Use
onNewToken()
emMyFirebaseMessagingService
fonte
Tente implementar
FirebaseInstanceIdService
para obter o token de atualização.Acesse o token de registro:
Você pode acessar o valor do token estendendo FirebaseInstanceIdService . Certifique-se de ter adicionado o serviço ao seu manifesto , chame
getToken
no contexto deonTokenRefresh
e registre o valor conforme mostrado:Código Completo:
Veja minha resposta aqui .
EDITAR% S:
Você não deveria iniciar um FirebaseInstanceIdService sozinho.
Isso não será chamado com muita frequência, é necessário para a rotação da chave e para lidar com as alterações de ID da instância devido a:
O sistema acelerará o evento de atualização em todos os dispositivos para evitar sobrecarregar os servidores de aplicativos com atualizações de token.
Experimente a maneira abaixo :
fonte
onTokenRefresh()
ser chamada?Estou mantendo um sinalizador na preferência compartilhada que indica se o token gcm foi enviado ao servidor ou não. Na tela inicial, sempre que chamo um método sendDevicetokenToServer. Este método verifica se o ID do usuário não está vazio e o status de envio do gcm, em seguida, envia o token para o servidor.
}
Na classe MyFirebaseInstanceIDService
fonte
Galera tem solução bem simples
https://developers.google.com/instance-id/guides/android-implementation#generate_a_token
Nota: Se seu aplicativo usou tokens que foram excluídos por deleteInstanceID, seu aplicativo precisará gerar tokens de substituição.
Em vez de excluir o Id da instância, exclua apenas o token:
fonte
Isso está no RxJava2 no cenário quando um usuário faz logout de seu aplicativo e outros usuários fazem login (mesmo aplicativo) Para registrar e fazer login API de login)
Conecte-se
fonte
Esta resposta não destrói o id da instância, em vez disso, é capaz de obter o atual. Ele também armazena um atualizado nas preferências compartilhadas.
Strings.xml
Utility.java (qualquer classe onde você deseja definir / obter preferências)
MyFirebaseInstanceIdService.java (estende FirebaseInstanceIdService)
}
O Android 2.0 e superior
onCreate
do serviço não é invocado quando iniciado automaticamente ( fonte ). Em vez disso,onStartCommand
é substituído e usado. Mas no FirebaseInstanceIdService real, ele é declarado como final e não pode ser substituído. No entanto, quando iniciamos o serviço usando startService (), se o serviço já estiver em execução, sua instância original é usada (o que é bom). Nosso onCreate () (definido acima) também foi chamado !.Use isso no início de MainActivity ou em qualquer ponto que você ache que precisa do id da instância.
E finalmente,
Observe que você pode aprimorar isso ainda mais tentando mover o código startservice () para o método getFirebaseInstanceId.
fonte
fonte
A nova maneira de fazer isso seria substituir o
onNewToken
método deFirebaseMessagingService
Também não se esqueça de adicionar o serviço no Manifest.xml
fonte
Como eu atualizo meu deviceToken
Primeiro, quando faço o login, envio o primeiro token do dispositivo na coleção do usuário e o usuário conectado no momento.
Depois disso, substituo
onNewToken(token:String)
meuFirebaseMessagingService()
e atualizo esse valor se um novo token for gerado para esse usuárioCada vez que seu aplicativo é aberto, ele verifica se há um novo token; se o usuário ainda não estiver conectado, ele não atualizará o token; se o usuário já estiver conectado, você pode verificar se há um
newToken
fonte