Pular para o conteúdo principal
O registro com Firebase Installation ID (FID) é um recurso do Firebase, introduzido no 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.
firebase_messaging_installation_id_enabled se aplica ao aplicativo inteiro. Quando é true, o Firebase desabilita getToken() para todos os SDKs do seu processo: o OneSignal, qualquer outro SDK de terceiros e o seu próprio código Firebase.Como o Android mescla os manifestos das suas dependências, outro SDK pode habilitá-la por você. Você pode estar nesse caminho sem tê-lo escolhido.

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 261200000 ou 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() e deleteToken() 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.token e IPushSubscriptionObserver retornam 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 chama onRegistered() em vez de onNewToken(). Mova o tratamento de tokens para onRegistered(). Se o seu aplicativo chama deleteToken() (ao sair da conta, por exemplo), mude para unregister(). 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-messaging 25.1.2 ou posterior e usar minSdk 23 ou superior. No firebase-messaging 26.x, seu aplicativo precisa de minSdk 24 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óprio AndroidManifest.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

Um resultado do grep não basta. Leia o 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.
Quando o registro falha, o erro inclui o valor do manifesto, se um 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, exija firebase-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.0 ou posterior, ou uma versão de SDK wrapper que o inclua. Veja Versões mínimas do SDK do OneSignal
  • com.google.firebase:firebase-messaging 25.1.2 ou 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-messaging 25.0.0 elevou o mínimo de 21 para 23). No firebase-messaging 26.x, API 24+ e Kotlin 2.0.0 ou posterior. Veja Usar o firebase-messaging 26.x
  • Google Play Services versão 261200000 ou posterior no dispositivo
  • Um FirebaseApp padrã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.json deve 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 OneSignal 5.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 o google-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 o firebase-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:
  • minSdk 24 ou superior
  • Kotlin 2.0.0 ou posterior
Verifique qual versão o seu aplicativo resolve:

Etapa 3: Adicionar a configuração de manifesto do Firebase \

Adicione isto dentro da tag <application> do seu AndroidManifest.xml:
AndroidManifest.xml
No Expo, defina 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.
Remova o elemento <meta-data> do seu AndroidManifest.xml e recompile.
Desabilitar o registro com FID afeta todos os SDKs do seu aplicativo, não apenas o OneSignal. Se outro SDK depende do registro com FID, consulte a documentação dele antes de desativar a configuração.
Os dispositivos se registram novamente na próxima inicialização do aplicativo. As Subscriptions existentes são preservadas e recebem um novo valor de token.

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 o FirebaseApp padrão do próprio aplicativo. O projeto Firebase compartilhado do OneSignal não consegue gerar um installation ID. Causas mais comuns, em ordem:
  1. O google-services.json está 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ório app/. Outras plataformas usam caminhos diferentes. Veja Adicionar seu arquivo de configuração do Firebase.
  2. 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.
  3. O plugin está aplicado no arquivo Gradle errado. O apply deve estar no build.gradle do módulo do aplicativo, não no arquivo de nível de projeto.
  4. 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.
Se você não pretendia usar o registro com FID, desabilite-o.

-33: API register indisponível \

A API FirebaseMessaging.register() não existe na versão do firebase-messaging que seu aplicativo resolveu, ou foi removida do seu build de release.
  1. Declare o firebase-messaging 25.1.2 ou posterior. O register() 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.
  2. Verifique a versão resolvida. Outra dependência pode estar fixando uma versão mais antiga:
  3. 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.
  1. O Google Play Services está desatualizado. O registro com FID exige a versão 261200000 ou 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.
  2. 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 como Invalid 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.
Ao contrário dos outros status, -6 marca as Subscriptions existentes como inválidas. Corrija a configuração e publique um build atualizado; os dispositivos se registram novamente e voltam a Subscribed na próxima inicialização.

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 desabilita getToken() 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, como cXp9fY-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.