Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Aplicación abierta en la notificación de firebase recibida (FCM)

Quiero abrir la aplicación automáticamente cuando se recibe la notificación, ¿esto es posible con Firebase y las nuevas notificaciones de FCM?

Sé que puedo establecer click_action pero eso es sólo para personalizar la actividad que se iniciará en el clic de notificación, necesito algo que se inicie automáticamente cuando se reciba la notificación.

He probado el inicio rápido de mensajería de ejemplo firebase y hay un método onMessageReceived (), pero sólo funciona si la aplicación está en primer plano. ¿Hay algo que se ejecutará mientras la aplicación está en segundo plano también? GCM podría hacer algo como lo que quiero aquí directamente iniciando actividad intención de receptor de difusión que se llama cuando se recibe la notificación.

4 Solutions collect form web for “Aplicación abierta en la notificación de firebase recibida (FCM)”

Respuesta rápida:

Para abrir automáticamente una aplicación a través de FCM es necesario utilizar un data-message , lo que garantiza que siempre invocar el método FirebaseMessagingService.onMessageReceived() .

A continuación, puede agregar su lógica en el método .onMessageReceived() para iniciar la actividad preferida.

ADVERTENCIA: el lanzamiento de una interfaz de usuario sin ninguna interacción del usuario es una práctica muy mala para la mayoría de las aplicaciones. Por favor, lea la respuesta de MarkG aquí: ¿Cómo iniciar una actividad de un servicio?

[…] Interrumpir lo que el usuario está haciendo actualmente se considera un mal diseño, especialmente de algo que se supone está operando en el fondo.
Por lo tanto, debe considerar el uso de una Notificación […] para iniciar la Actividad deseada cuando el usuario decida que es el momento de investigar. […]

Explicación completa:

FCM funciona de manera similar a GCM y puede recibir dos tipos de mensajes:

  1. Mensajes de visualización:
    Payload {"notification" : { "body" : "hello world"}}
    Estos mensajes se muestran automáticamente cuando la aplicación está en segundo plano y llaman a FirebaseMessagingService.onMessageReceived() si la aplicación ya está en primer plano.
  2. Mensajes de datos:
    Payload {"data" : { "key1" : "value1"}}
    Estos mensajes invocan siempre FirebaseMessagingService.onMessageReceived() ,
    Incluso si la aplicación está cerrada o en segundo plano.

click_action es un parámetro de la carga útil de notificación, por lo que se aplica a los mensajes de visualización.

Indica la acción asociada con el clic de un usuario en la notificación.
Si se establece una actividad con un filtro de intenciones coincidentes, se inicia cuando el usuario hace clic en la notificación .

https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support

Parece que esta sección de la guía es la clave para el rompecabezas de las aplicaciones en segundo plano:

Para recibir mensajes
Utilice un servicio que amplíe FirebaseMessagingService . Su servicio debe anular la onMessageReceived llamada onMessageReceived , que se proporciona para la mayoría de los tipos de mensaje, con las siguientes excepciones:

Notificaciones enviadas cuando tu aplicación está en segundo plano.
En este caso, la notificación se entrega a la bandeja del sistema del dispositivo. Un usuario pulsa en una notificación abre el lanzador de aplicaciones de forma predeterminada.

Mensajes con la carga de notificación y de datos.
En este caso, la notificación se entrega a la bandeja del sistema del dispositivo y la carga útil de datos se entrega en los extras de la intención de la Actividad del lanzador.

Esencialmente, cuando la aplicación es de fondo, no es verdaderamente sensible o en funcionamiento en este momento. En su lugar, el mensaje se entrega a la bandeja del sistema. Sin embargo, justo debajo, se explica la solución.

Si desea abrir la aplicación y realizar una acción específica [mientras está en segundo plano], establezca click_action en la carga útil de notificación y colóquela en un filtro de intenciones en la Actividad que desee iniciar. Por ejemplo, establezca click_action en OPEN_ACTIVITY_1 para activar un filtro de intenciones como el siguiente:

 <intent-filter> <action android:name="OPEN_ACTIVITY_1" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

[Android] Si está utilizando Firebase Notifications (no Firebase Cloud Messaging), todo lo que tiene que hacer es incluir Firebase Messaging en su build.gradle y, a continuación, vincular su aplicación a un proyecto en Firebase Console.

Si tu aplicación está en segundo plano, cualquier mensaje enviado desde la consola te dará una notificación del sistema, la cual, si la tocas, activará tu aplicación.

Echa un vistazo aquí: https://youtu.be/KpTSpVh9SfY?t=10m22s

Resumiendo los pasos aquí, espero que sea útil

PASO 1

Siguiendo la guía del usuario de FCM . Asegúrese de que todo funcione correctamente pulsando un mensaje desde la consola de Firebase .

PASO 2

Cambie su clase personalizada FirebaseMessagingService de la siguiente manera:

 public class MyFirebaseMessagingService extends FirebaseMessagingService { private static final String TAG = "MyFirebaseMsgService"; @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.d(TAG, "From: " + remoteMessage.getFrom()); startActivity(new Intent(this, SplashActivity.class)); } } 

Ahora, con los mensajes de empuje de la consola Firebase de nuevo, descubrirá que onMessageReceived sólo se onMessageReceived cuando la aplicación está en primer plano. Debido a que la consola de Firebase sólo puede enviar el Notification message . Para enviar el Data message , necesitamos el paso 3.

PASO 3

Instalar el cliente REST de Google Advanced

Entrada por debajo de los parámetros:

 url: https://fcm.googleapis.com/fcm/send method: POST Raw header: Content-Type: application/json Authorization:key=YOUR_SERVER_KEY Raw payload: { "to" : "YOUR_DEVICE_FCM_TOKEN", "data" : { "Nick" : "Mario", "body" : "great match!", "Room" : "PortugalVSDenmark" }, } 

YOUR_SERVER_KEY está disponible en la consola Firebase> panel Configuración> la pestaña Cloud Messaging

YOUR_DEVICE_FCM_TOKEN es FirebaseInstanceId.getInstance().getToken() en onTokenRefresh()

NOTA

Iniciando la interfaz de usuario sin la interacción del usuario es malo UX, puede que tenga que reemplazar la actividad de inicio con el servicio de inicio o algo en el fondo. Acabo de utilizar la actividad para el propósito de pruebas, por lo que será más visual que el servicio. Gracias @ 2ndgab por introducir a la herramienta de cliente de REST de Google Advanced.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.