Hola usuario de nuestro sitio web, encontramos la respuesta a tu pregunta, desplázate y la verás más abajo.
Solución:
1. ¿Por qué sucede esto?
Hay dos tipos de mensajes en FCM (Firebase Cloud Messaging):
- Mostrar mensajes: Estos mensajes activan el
onMessageReceived()
devolución de llamada solo cuando su aplicación está en primer plano - Mensajes de datos: Estos mensajes activan el
onMessageReceived()
llamar de vuelta incluso si tu aplicación está en primer plano/fondo/muerto
NOTA: El equipo de Firebase no ha desarrollado una interfaz de usuario para enviar
data-messages
a sus dispositivos, todavía. ¡Deberías usar tu servidor para enviar este tipo!
2. ¿Cómo?
Para lograr esto, debe realizar un POST
solicitud a la siguiente URL:
POST
https://fcm.googleapis.com/fcm/send
Encabezados
- Llave:
Content-Type
, Valor:application/json
- Llave:
Authorization
, Valor:key=
Cuerpo usando temas
"to": "/topics/my_topic",
"data":
"my_custom_key": "my_custom_value",
"my_custom_key2": true
O si quieres enviarlo a dispositivos específicos
"data":
"my_custom_key": "my_custom_value",
"my_custom_key2": true
,
"registration_ids": ["device-token","device2-token","device3-token"]
NOTA: Asegúrate de estar sin agregar JSON key
notification
NOTA: Para conseguir tu servidor keypuedes encontrarlo en la consola de firebase:Your project -> settings -> Project settings -> Cloud messaging -> Server Key
3. ¿Cómo manejar el mensaje de notificación push?
Así es como maneja el mensaje recibido:
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
Map data = remoteMessage.getData();
String myCustomKey = data.get("my_custom_key");
// Manage data
Para hacer que la biblioteca de Firebase llame a su enMensajeRecibido() en los siguientes casos
- Aplicación en primer plano
- aplicación en segundo plano
- La aplicación ha sido eliminada
no debes poner JSON key ‘notificación’ en su solicitud a la API de Firebase, pero en su lugar use ‘datos’, consulte a continuación.
El siguiente mensaje no llamará a su enMensajeRecibido() cuando su aplicación está en segundo plano o eliminada, y no puede personalizar su notificación.
"to": "/topics/journal",
"notification":
"title" : "title",
"text": "data!",
"icon": "ic_notification"
pero en lugar de usar esto funcionará
"to": "/topics/dev_journal",
"data":
"text":"text",
"title":"",
"line1":"Journal",
"line2":"刊物"
Básicamente, el mensaje se envía en el argumento RemoteMessage junto con su objeto de datos como Mapa
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
Map data = remoteMessage.getData();
//you can get your text message here.
String text= data.get("text");
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
// optional, this is to make beautiful icon
.setLargeIcon(BitmapFactory.decodeResource(
getResources(), R.mipmap.ic_launcher))
.setSmallIcon(smallIcon) //mandatory
.......
/*You can read more on notification here:
https://developer.android.com/training/notify-user/build-notification.html
*/
Siento que todas las respuestas están incompletas, pero todas tienen algo que necesita para procesar una notificación que tiene datos cuando su aplicación está en segundo plano.
Siga estos pasos y podrá procesar sus notificaciones cuando su aplicación esté en segundo plano.
1. Agregue un filtro de intenciones como este:
a una actividad que desea procesar los datos de notificación.
-
Enviar notificaciones con el siguiente formato:
"notification" : "click_action" : ".MainActivity", "body" : "new Symulti update !", "title" : "new Symulti update !", "icon" : "ic_notif_symulti" , "data": ... , "to" : "c9Vaa3ReGdk:APA91bH-AuXgg3lDN2WMcBrNhJZoFtYF9"
los key aquí está agregar
"click_action" : ".MainActivity"
donde .MainActivity es la actividad con el filtro de intención que agregó en el paso 1.
-
Obtenga información de “datos” de la notificación en onCreate de “.MainActivity”:
protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //get notification data info Bundle bundle = getIntent().getExtras(); if (bundle != null) //bundle must contain all info sent in "data" field of the notification
Y eso debería ser todo lo que necesitas hacer. Espero que esto ayude a alguien 🙂
Sección de Reseñas y Valoraciones
Recuerda algo, que puedes permitirte valorar este enunciado si topaste tu contrariedad .