firebase-messaging 25.1.x, que substitui o token de registro FCM legado por um Firebase Installation ID.
Ele é controlado por uma configuração de manifesto chamada firebase_messaging_installation_id_enabled. Esta é uma configuração do Firebase, não do OneSignal. O OneSignal a lê para decidir como se registrar para push, mas não a define, não pode alterá-la e não pode aplicá-la somente ao OneSignal.
Você deve habilitá-lo? \
O registro com FID é opcional, mas recomendado. O Google descontinuou os tokens de registro FCM em favor dos Firebase Installation IDs, então todos os aplicativos precisarão migrar em algum momento. A mudança mantém seus usuários existentes inscritos e recebendo mensagens, e o OneSignal continua enviando pela sua Conta de Serviço do FCM. Cada dispositivo substituirá o token de registro FCM legado pelo novo valor de token push (FID) na próxima inicialização.Antes de ativar \
Revise estes pontos antes de habilitar o registro com FID:- Dispositivos mais antigos. O registro com FID exige o Google Play Services
261200000ou posterior. Dispositivos que já estão inscritos mantêm o token push atual. Novas instalações em dispositivos Android mais antigos, ou em dispositivos que não recebem atualizações do Google Play Services, não conseguem receber push até que o Google Play Services seja atualizado. Eles exibem o status de notification_type-34. - Outros SDKs de push. A configuração se aplica ao aplicativo inteiro e desabilita
getToken()edeleteToken()para todos os SDKs. Isso afeta principalmente outros SDKs que enviam notificações push. Verifique se cada um deles é compatível com Firebase Installation IDs. - Formato do token push.
OneSignal.User.pushSubscription.tokeneIPushSubscriptionObserverretornam um Firebase Installation ID em vez de um token de registro FCM. O tipo da propriedade não muda, então nada falha em tempo de compilação. Qualquer código que armazene, valide ou envie esse valor como token FCM deixa de funcionar sem erro. - Integrações personalizadas do Firebase. Se o seu aplicativo tem o próprio
FirebaseMessagingService, o Firebase chamaonRegistered()em vez deonNewToken(). Mova o tratamento de tokens paraonRegistered(). Se o seu aplicativo chamadeleteToken()(ao sair da conta, por exemplo), mude paraunregister(). O OneSignal não precisa de nenhum desses callbacks. Veja o guia do Firebase sobre registro via Firebase Installation ID e Conflito com o SDK do Firebase Messaging para usá-lo junto com o OneSignal. - Requisitos de build. Seu aplicativo deve declarar
firebase-messaging25.1.2 ou posterior e usarminSdk23 ou superior. Nofirebase-messaging26.x, seu aplicativo precisa deminSdk24 ou superior e Kotlin 2.0.0 ou posterior. Veja Requisitos. - Reverter exige uma nova versão. A configuração faz parte do build do seu aplicativo. Ativá-la ou desativá-la exige um novo build e uma nova publicação na loja. Não existe um controle do lado do servidor.
Está habilitado no seu aplicativo? \
Verifique o manifesto mesclado, não apenas o seu próprioAndroidManifest.xml. Uma dependência pode adicionar essa configuração sem que ela apareça no seu código-fonte.
1
Gerar o manifesto mesclado
2
Pesquisar no resultado mesclado
android:value mesclado. O registro com FID só está habilitado quando esse valor é o booleano true.Nenhuma entrada meta-data, ou um valor mesclado false, significa que você está no caminho de token legado. Para forçar o valor para false quando uma dependência o define como true, veja Desabilitar o registro com FID.FirebaseApp padrão foi encontrado e se register() está disponível. Um registro bem-sucedido não registra esses três dados, então o log detalhado não os mostrará em um dispositivo saudável. Use o manifesto mesclado para confirmar a configuração.
SDKs conhecidos que habilitam essa configuração. O SDK Android da Braze 43.0.0 e posteriores adicionam
firebase_messaging_installation_id_enabled="true" por meio da mesclagem de manifestos. Se o seu aplicativo inclui Braze 43+, o registro com FID está habilitado, quer você tenha adicionado a configuração ou não.Habilitar o registro com FID \
Para habilitar o registro com FID, dê ao seu aplicativo a própria configuração do Firebase, exijafirebase-messaging 25.1.2 ou posterior e ative a configuração de manifesto. Depois, confirme que os dispositivos se registram com um Firebase Installation ID.
Requisitos \
O registro com FID exige todos os itens a seguir. Se algum estiver faltando, o registro falha com um dos status em Solução de problemas.- SDK Android do OneSignal
5.11.0ou posterior, ou uma versão de SDK wrapper que o inclua. Veja Versões mínimas do SDK do OneSignal com.google.firebase:firebase-messaging25.1.2ou posterior, declarado pelo seu aplicativo. Versões 25.1.x anteriores têm bugs de registro, incluindo falhas após a restauração de um backup ou quando os dados do aplicativo são clonados- Android API 23+ (o
firebase-messaging25.0.0 elevou o mínimo de 21 para 23). Nofirebase-messaging26.x, API 24+ e Kotlin 2.0.0 ou posterior. Veja Usar o firebase-messaging 26.x - Google Play Services versão
261200000ou posterior no dispositivo - Um
FirebaseApppadrão para o seu próprio projeto Firebase. Veja Etapa 1: Adicionar o google-services.json ao seu aplicativo - Projetos Firebase correspondentes. O projeto do seu
google-services.jsondeve ser o mesmo projeto da Conta de Serviço do FCM carregada no OneSignal. Veja Fazer corresponder seus projetos Firebase
Versões mínimas do SDK do OneSignal \
O suporte ao registro com FID chegou no SDK Android do OneSignal5.11.0. Cada SDK wrapper abaixo indica a primeira versão que o inclui. Versões mais antigas usam apenas o caminho de token legado, então, com a configuração ativada, o registro de push falha nessas versões.
Etapa 1: Adicionar o google-services.json ao seu aplicativo \
O registro com FID precisa dos detalhes do seu projeto Firebase no lado do cliente. Baixe ogoogle-services.json do mesmo projeto Firebase da Conta de Serviço do FCM carregada no OneSignal. Se os projetos não corresponderem, o registro falha com -6. Adicione o arquivo ao seu aplicativo e aplique o plugin Gradle do Google Services. O local do arquivo depende do seu aplicativo. Veja Adicionar seu arquivo de configuração do Firebase para as etapas. Talvez você já tenha feito isso.
Etapa 2: Declarar o firebase-messaging 25.1.2 ou posterior \
O OneSignal é compilado com ofirebase-messaging 24.x, que usa FirebaseMessaging.getToken() para tokens de registro FCM legados.
O registro com FID usa FirebaseMessaging.register(), que exige o firebase-messaging 25.1.2 ou posterior.
Para atualizar o firebase-messaging, adicione isto ao arquivo Gradle do módulo do seu aplicativo:
Usar o firebase-messaging 26.x \
O intervalo[25.1.2, 25.99.99] mantém seu aplicativo na 25.x, que não tem requisitos extras. Se o seu aplicativo ou outra dependência trouxer o firebase-messaging 26.x, o Gradle resolve para a 26.x, e seu aplicativo também precisa de:
minSdk24 ou superior- Kotlin 2.0.0 ou posterior
Etapa 3: Adicionar a configuração de manifesto do Firebase \
Adicione isto dentro da tag<application> do seu AndroidManifest.xml:
AndroidManifest.xml
enableFirebaseInstallationId: true na configuração do onesignal-expo-plugin (versão 2.8.0 ou posterior) e depois execute expo prebuild.
Etapa 4: Verificar o registro com FID \
Compile e execute em um dispositivo e verifique o Push Token no log ou em Dashboard > Audience > Subscriptions.Sua Subscription do OneSignal deve estar Subscribed e o token push deve ser um Firebase Installation ID curto como
cXp9fY-TRFCLSy9kVTqorZ, e não um token FCM legado mais longo com dois-pontos como dN8Ya5MTR2OO-0BXdqimCI:APA91bFw.... Se o status for negativo, veja Solução de problemas.Desabilitar o registro com FID \
O método necessário depende de onde vem a configuração.- Você a adicionou
- Uma dependência a adicionou
Remova o elemento
<meta-data> do seu AndroidManifest.xml e recompile.Solução de problemas \
Encontre a Subscription em Dashboard > Audience > Subscriptions e verifique o status. Cada status abaixo tem uma causa e uma correção. Depois que você corrige a configuração e publica um novo build, a mesma Subscription se recupera em uma sessão posterior. Não é preciso reinstalar, e nenhuma nova Subscription é criada.-32: Nenhum aplicativo Firebase padrão \
O registro com FID exige oFirebaseApp padrão do próprio aplicativo. O projeto Firebase compartilhado do OneSignal não consegue gerar um installation ID.
Causas mais comuns, em ordem:
- O
google-services.jsonestá ausente. Baixe-o do seu console do Firebase em Project settings > Your apps e adicione-o ao seu aplicativo. Aplicativos Android nativos usam o diretórioapp/. Outras plataformas usam caminhos diferentes. Veja Adicionar seu arquivo de configuração do Firebase. - O plugin Gradle do Google Services não está aplicado. O arquivo sozinho não faz nada. O plugin o converte nos recursos que o Firebase lê em tempo de execução. Veja Adicionar seu arquivo de configuração do Firebase.
- O plugin está aplicado no arquivo Gradle errado. O
applydeve estar nobuild.gradledo módulo do aplicativo, não no arquivo de nível de projeto. - A inicialização programática foi executada tarde demais, ou não foi executada. Se você inicializa o aplicativo padrão por conta própria (por exemplo, porque condiciona o Firebase ao consentimento do usuário), ela deve terminar antes de o OneSignal ser inicializado. Veja Configurar o Firebase sem google-services.json.
-33: API register indisponível \
A APIFirebaseMessaging.register() não existe na versão do firebase-messaging que seu aplicativo resolveu, ou foi removida do seu build de release.
-
Declare o
firebase-messaging25.1.2 ou posterior. Oregister()apareceu pela primeira vez na 25.1.0, e o OneSignal é compilado com a 24.x, então seu aplicativo precisa trazer a biblioteca mais recente. Use 25.1.2 ou posterior em vez de 25.1.0 ou 25.1.1. Veja Requisitos. -
Verifique a versão resolvida. Outra dependência pode estar fixando uma versão mais antiga:
- Se isso só acontece em builds de release, o R8 removeu ou renomeou o método. Confirme que as regras ProGuard de consumidor do OneSignal estão aplicadas e que você não as desabilitou.
-34: Falha no registro com FID \
Este status permite nova tentativa. O SDK tenta novamente em uma sessão posterior.- O Google Play Services está desatualizado. O registro com FID exige a versão
261200000ou posterior. Abaixo dessa versão, o Firebase solicita um token legado em vez de registrar o installation ID, e esse token nunca fica disponível para o seu aplicativo. O SDK falha em vez de relatar uma Subscription que não pode receber push. Atualize o Google Play Services no dispositivo pela Play Store. - Uma falha transitória do Firebase. Nenhuma ação é necessária. O registro se recupera em uma inicialização posterior do aplicativo.
-6: Sender ID não corresponde \
Exibido no painel comoInvalid Google Project Number. O projeto Firebase do seu aplicativo e a Conta de Serviço do FCM carregada no OneSignal não são o mesmo projeto.
Uma divergência de projeto só causa este status com o registro com FID ativado. No caminho de token legado, a mesma divergência não falha, e o SDK se registra pelo projeto Firebase compartilhado do OneSignal. É por isso que -6 pode aparecer logo depois de você habilitar o registro com FID, mesmo que o push funcionasse antes.
Compare os dois projetos com Fazer corresponder seus projetos Firebase. Se os valores forem diferentes, carregue a Conta de Serviço do projeto Firebase correto ou inclua o google-services.json do projeto cuja Conta de Serviço você carregou.
Perguntas frequentes
Preciso do google-services.json mesmo se não usar FID? \
O push funciona sem ele hoje, mas você deve adicioná-lo. Adicionar o arquivo não ativa a configuração de manifesto. Veja O que acontece se eu não adicionar o google-services.json?
Vou perder minhas Subscriptions existentes? \
Não. Os dispositivos se registram novamente na próxima inicialização do aplicativo e mantêm a mesma Subscription, com um novo valor de token push. Isso vale nos dois sentidos, ao habilitar e ao desabilitar. A exceção é uma divergência de projeto Firebase, que marca as Subscriptions existentes como inválidas até você publicar uma correção. Veja-6.
Posso habilitar o registro com FID somente para o OneSignal? \
Não. A configuração se aplica ao processo inteiro e desabilitagetToken() para todos os SDKs. O registro com installation ID só pode usar o seu FirebaseApp padrão. O aplicativo compartilhado do OneSignal não consegue gerar esse ID.
Por que o formato do meu token push mudou? \
Seu aplicativo agora se registra com um Firebase Installation ID. Os Installation IDs são curtos e sem dois-pontos, comocXp9fY-TRFCLSy9kVTqorZ. Os tokens FCM legados são mais longos e contêm dois-pontos, como dN8Ya5MTR2OO-0BXdqimCI:APA91bFw....
Páginas relacionadas
Credenciais do Android Firebase
Carregue sua chave privada de Conta de Serviço do FCM e adicione o
google-services.json ao seu aplicativo.Configuração do SDK Android
Instale e inicialize o SDK Android do OneSignal.
Subscriptions
Consulte os status de Subscription, incluindo
-6 e os status de FID -32 a -34.Capturar um log de depuração
Colete logs detalhados do SDK para ver erros de registro.