Si quieres enviar mensajes de FCM a las apps antes de que se desbloquee el dispositivo, puedes habilitar el modo de inicio directo. Por ejemplo, si quieres que los usuarios de tu app reciban notificaciones de alarma incluso si los dispositivos están bloqueados.
Cuando compiles este caso de uso, deberás cumplir con las prácticas recomendadas y restricciones generales para el modo de inicio directo. Es importante tener en cuenta la visibilidad de los mensajes habilitados para inicio directo. Cualquier usuario con acceso al dispositivo puede ver estos mensajes sin ingresar sus credenciales.
Requisitos previos
- El dispositivo debe tener configurado el modo de inicio directo.
- El dispositivo debe tener instalada una versión reciente de los Servicios de Google Play (19.0.54 o posterior).
- La app debe usar el SDK de FCM (
com.google.firebase:firebase-messaging
) para recibir mensajes de FCM.
Habilita la administración de mensajes en modo de inicio directo en tu app
En el archivo Gradle de nivel de la app, agrega una dependencia en la biblioteca de compatibilidad de inicio directo de FCM:
implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
Agrega el atributo
android:directBootAware="true"
en el manifiesto de la app para que el inicio directoFirebaseMessagingService
sea compatible:<service android:name=".java.MyFirebaseMessagingService" android:exported="false" android:directBootAware="true"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
Es importante asegurarse de que FirebaseMessagingService
se pueda ejecutar en modo de inicio directo. Puedes verificarlo con los siguientes requisitos:
- El servicio no debe acceder al almacenamiento protegido por credenciales mientras se ejecuta en modo de inicio directo.
- El servicio no debe intentar usar componentes, como
Activities
,BroadcastReceivers
o cualquier otroServices
, que no estén marcados como compatibles con inicio directo mientras se ejecutan en este modo. - Las bibliotecas que use el servicio tampoco deben acceder al almacenamiento protegido por credenciales ni llamar a componentes que no sean compatibles con el inicio directo mientras se ejecutan en ese modo. Es decir, las bibliotecas que use la app y que se llamen desde el servicio deben ser compatibles con el inicio directo, o bien la app deberá verificar si el servicio se está ejecutando en modo de inicio directo y no llamarlas mientras esté en ese modo. Por ejemplo, los SDK de Firebase funcionan con inicio directo (se pueden incluir en una app sin producir fallas en ese modo); sin embargo, muchas API de Firebase no admiten las llamadas en modo de inicio directo.
- Si la app usa un código
Application
personalizado,Application
también debe ser compatible con el inicio directo (es decir, no tener acceso al almacenamiento protegido por credenciales).
Envía mensajes con el inicio directo habilitado
Puedes enviar mensajes a dispositivos con el modo de inicio directo a través de la API de HTTP v1.
La solicitud de mensaje debe incluir la clave "direct_boot_ok": true
en las opciones AndroidConfig
del cuerpo de la solicitud. Por ejemplo:
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,
},
}