En Android, hay dos opciones para asignar una prioridad de entrega a los mensajes descendentes: prioridad normal y alta. La entrega de los mensajes con prioridad normal o alta funciona de la siguiente manera:
Prioridad normal. Esta es la prioridad predeterminada para los mensajes de datos y notificaciones. Los mensajes con prioridad normal se entregan de inmediato cuando el dispositivo no está suspendido. Cuando el dispositivo está en modo Descanso, es posible que la entrega se retrase para conservar la batería hasta que el dispositivo salga de este modo. Para los mensajes menos urgentes, como las notificaciones de correos electrónicos nuevos, la sincronización de IU o la sincronización de datos de app en segundo plano, selecciona la prioridad de entrega normal.
Prioridad alta. FCM intenta entregar los mensajes de alta prioridad de inmediato, lo que permite a FCM activar un dispositivo inactivo cuando es necesario y ejecutar un procesamiento limitado (incluido el acceso de red altamente limitado). En general, los mensajes con prioridad alta generan la interacción de los usuarios con la app o sus notificaciones.
Cómo decidir entre mensajes de prioridad alta y normal
Si bien los mensajes de prioridad normal son adecuados para las actualizaciones generales, elige la prioridad alta cuando necesites garantizar la entrega inmediata de asuntos o acciones urgentes. Dado que el tiempo de entrega de los mensajes de prioridad normal puede verse afectado por el modo Doze, configurar la mayoría de las notificaciones visibles para el usuario como de prioridad alta garantiza que se entreguen de inmediato. Por ejemplo, las notificaciones, como los mensajes de chat, los problemas con una cuenta o las actualizaciones de entrega de comida, deben establecerse como de prioridad alta.
Procesamiento de mensajes de prioridad alta y normal
En el caso de las notificaciones de prioridad alta y normal que se reciben en un dispositivo Android, se otorgan varios segundos para procesar la carga útil del mensaje en el controlador onMessageReceived
. Para las notificaciones que requieran el procesamiento asíncrono de la carga útil del mensaje, te recomendamos que uses una construcción como WorkManager, ya que podría exceder el tiempo asignado al controlador onMessageReceived
.
En el caso de los mensajes de prioridad alta, puedes programar un trabajo acelerado con Android WorkManager para asegurarte de que estas notificaciones se prioricen y se ejecuten hasta completarse.
Para los mensajes de prioridad normal, puedes programar una OneTimeWorkRequest regular con Android WorkManager. Esto garantizará que se procese el trabajo adicional requerido sin usar el procesamiento prioritario.
Cómo establecer la prioridad de los mensajes
Puedes enviar notificaciones a tus usuarios con Admin SDK, la API de REST de FCM y Firebase console. Para cambiar la configuración de prioridad desde Admin SDK y la API de REST de FCM, debes actualizar la carga útil JSON del mensaje. Puedes usar la siguiente muestra de código para ver cómo establecer la prioridad en alta. En el caso de las notificaciones que se envían desde la consola, no se admite la configuración de campos de notificación específicos de Android.
{
"message": {
"notification": {
"body": "Purchase exceeding $500 detected",
"title": "Credit card purchase"
},
"data": {
"purchaser": "Your child",
"items": "Gravity Defier Sneakers"
},
"android": {
"priority": "high"
},
"apns": {
"headers": {
"apns-priority": "5"
}
}
}
}
Cómo probar tus notificaciones de prioridad alta en el modo Descanso
Para asegurarte de que tus notificaciones de prioridad alta se reciban y procesen correctamente cuando las reciba un usuario, sigue estas instrucciones para probarlas:
- Configura el dispositivo en el modo Descanso siguiendo las instrucciones que se indican en Cómo probar tu app con Descanso.
- Accede a tu token de registro de FCM desde tu app en el dispositivo de prueba. Para obtener más información sobre cómo acceder al token, consulta Envía un mensaje de prueba a una app en segundo plano.
- Una vez que tengas el token FCM, envía la notificación de prioridad alta al dispositivo de prueba con el código de envío de notificaciones FCM o un comando cURL%3B%0A%7D)-,cURL,-curl%20%2DX) que tenga parámetros de configuración que coincidan con tu notificación de prioridad alta.
Reducción de la prioridad de FCM de alta prioridad en Android
Los mensajes de prioridad alta en Android están diseñados para el contenido que es sensible al tiempo y visible para el usuario, y deben generar notificaciones para el usuario. Si FCM detecta un patrón en el que los mensajes no generan notificaciones para el usuario, es posible que la prioridad de tus mensajes no sea la normal o que se deleguen para que los Servicios de Google Play los manejen.
FCM usa 7 días de comportamiento de mensajes para determinar si se debe reducir la prioridad de los mensajes o usar un proxy para ellos. Establece esta determinación de forma independiente para cada instancia de tu aplicación. Si, en respuesta a los mensajes de prioridad alta, las notificaciones se muestran de una manera visible para el usuario, entonces no se verán afectados los futuros mensajes de alta prioridad.
Delegación de notificaciones con Servicios de Google Play
Los Servicios de Google Play envían a través de proxy los mensajes de notificación de alta prioridad que cumplen con ciertos criterios en lugar de reducirles la prioridad. Esto significa que los Servicios de Google Play muestran las notificaciones en nombre de la app, sin necesidad de iniciarla. Esto se hace para proporcionar una mejor experiencia general del usuario en dispositivos Android.
Ten en cuenta que los mensajes de notificación con proxy introducen cambios en la manera en que se informan las estadísticas relacionadas con los mensajes recibidos:
- Para que se informen las estadísticas de las notificaciones con proxy, tu app debe usar la versión 24.0.0 del SDk de FCM o una versión posterior.
- Es posible que notes demoras o disminuciones en la cantidad de mensajes recibidos en comparación con la cantidad anterior a la introducción de las notificaciones con proxy. Esto se debe a que las estadísticas de las notificaciones con proxy solo se informan una vez que se inicia la app y es posible que no se informen en absoluto si la notificación no hace que se abra la app.
Usar proxies con los mensajes de notificación de esta manera es el comportamiento predeterminado de las apps que usan la versión 19054000 o posterior de Android Q+ y los Servicios de Google Play. Los mensajes enviados a través de la API de HTTP v1 se pasan a través de un proxy, pero los mensajes enviados a través de Firebase console o las APIs heredadas no se pasarán a través de un proxy. Ten en cuenta que esta función se encuentra en fase beta y está sujeta a cambios.
Aunque recomendamos dejar habilitada la delegación por sus beneficios para la batería y la memoria del dispositivo, puedes inhabilitar este comportamiento en cualquiera de estas maneras:
- A nivel de la app: En el manifiesto de la app, agrega la directiva
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>
. - En una instancia de app: Para la instancia de app, configura
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>
en el flujo de la IU de tu app, según el caso de uso específico. - Por mensaje: Establece la clave
proxy
enDENY
en el objetoAndroidNotification
de la solicitud de envío.
Mide la prioridad de los mensajes en Android
Mensajes individuales. Al momento de la entrega, puedes determinar si se redujo la prioridad de un mensaje individual o no; para ello, compara su prioridad publicada desde getPriority() con su prioridad original desde getOriginalPriority().
Todos los mensajes. La API de FCM Aggregate Delivery Data puede informar qué porcentaje de todos tus mensajes a Android tiene una reducción de la prioridad. Es posible que se omitan algunos mensajes de los informes con datos agregados, pero, en general, deberían brindar una vista global de las tasas de priorización de mensajes. Revisa nuestro artículo sobre los datos de entrega agregados para obtener más información y un código de muestra para consultar la API. También se puede consultar desde el Explorador de API.
Notificaciones con proxy. Las notificaciones con proxy no se registrarán en las métricas de entrega actuales de FCM o GA, por lo que es posible que experimentes una disminución de hasta el 15% en las métricas de entrega de notificaciones. Para generar informes sobre los mensajes con proxy, usa la API de FCM Aggregate Delivery Data.
ProxyNotificationInsightPercents
informa el porcentaje de notificaciones con proxy que se entregaron correctamente, así como los detalles de los mensajes que no se pueden entregar correctamente a través de proxies.
Cómo solucionar problemas de demoras en las notificaciones
Asegúrate de que la instancia de la app tenga habilitadas las notificaciones. Si el usuario inhabilitó el permiso de notificaciones de tu app, no se publicará ninguna de las notificaciones y, por lo tanto, se anulará la prioridad de los mensajes. Debes verificar que las notificaciones estén habilitadas antes de enviar mensajes de prioridad alta a una instancia de la aplicación.
Evita hacer llamadas de red adicionales cuando proceses la notificación. Como una pequeña porción de la población móvil de Android se encuentra en redes de alta latencia, evita abrir una conexión a tus servidores antes de mostrar una notificación. La devolución de llamadas al servidor antes del final del tiempo de procesamiento permitido puede ser algo arriesgado para los usuarios en redes de alta latencia.
En lugar de eso, incluye el contenido de la notificación en el mensaje de FCM y muéstralo de inmediato. Si necesitas sincronizar contenido adicional de la app en Android, puedes programar una tarea con WorkManager para controlar el proceso en segundo plano.