Recibe mensajes de FCM en modo de inicio directo

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

  1. 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'
    
  2. Agrega el atributo android:directBootAware="true" en el manifiesto de la app para que el inicio directo FirebaseMessagingService 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 otro Services, 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,
    },
}