Se você quiser enviar mensagens do FCM para apps antes do dispositivo ser desbloqueado, ative o modo de inicialização direta. Por exemplo, se você quer que os usuários do seu app recebam notificações de alarme mesmo em um dispositivo bloqueado.
Ao criar esse caso de uso, observe as práticas recomendadas e restrições gerais para o modo de inicialização direta. É importante considerar a visibilidade das mensagens ativadas para inicialização direta. Qualquer usuário com acesso ao dispositivo pode ver essas mensagens sem digitar as credenciais do usuário.
Pré-requisitos
- O dispositivo precisa estar configurado para o modo de inicialização direta.
- O dispositivo precisa ter uma versão recente do Google Play Services instalada (19.0.54 ou superior).
- O app precisa usar o SDK do FCM (
com.google.firebase:firebase-messaging
) para receber mensagens do FCM.
Ativar o processamento de mensagens no modo de inicialização direta no seu app
No arquivo Gradle no nível do app, adicione uma dependência à biblioteca de suporte da inicialização direta do FCM:
implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
Adicione o atributo
android:directBootAware="true"
ao manifesto do app para fazerFirebaseMessagingService
funcionar na inicialização direta:<service android:name=".java.MyFirebaseMessagingService" android:exported="false" android:directBootAware="true"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
É importante garantir que FirebaseMessagingService
possa ser executado no modo de inicialização direta. Confira usando os seguintes requisitos:
- O serviço não deve acessar o armazenamento protegido por credenciais durante a execução no modo de inicialização direta.
- O serviço não deve tentar usar componentes, como
Activities
,BroadcastReceivers
ou outrosServices
que não estão marcados para funcionar na inicialização direta durante a execução nesse modo. - Todas as bibliotecas que o serviço usar também não poderão acessar o armazenamento protegido por credenciais nem chamar componentes non-directBootAware durante a execução no modo de inicialização direta. Isso significa que todas as bibliotecas que o app usa e que são chamadas usando o serviço precisam estar marcadas para funcionar na inicialização direta ou o app deve verificar se ele está em execução no modo de inicialização direta para não chamar as bibliotecas se esse for o caso. Por exemplo, os SDKs do Firebase funcionam com a inicialização direta (eles podem ser incluídos em um app sem causar falhas nesse modo), mas muitas APIs do Firebase não são compatíveis com a inicialização direta.
- Se o app está usando um
Application
personalizado, oApplication
também precisa estar marcado para funcionar na inicialização direta (sem acesso ao armazenamento protegido por credenciais no modo de inicialização direta).
Enviar mensagens ativadas para inicialização direta
É possível enviar mensagens para dispositivos no modo de inicialização direta usando a API HTTP v1.
A solicitação de mensagem precisa incluir a chave "direct_boot_ok": true
nas opções AndroidConfig
do corpo da solicitação. Exemplo:
https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
Content-Type:application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"token" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data": {
"score": "5x1",
"time": "15:10"
},
"android": {
"direct_boot_ok": true,
},
}