push-notification - google - firebase push notification ios
Notificación de APNS silenciosa de Firebase (4)
Explico este tema con más detalle en mi blog. http://blog.boxstory.com/2017/01/how-to-send-silent-push-notification-in.html
** el punto clave es: "content_available: true"
esta es la muestra JSON
{
"to" : "<device>",
"priority": "normal",
"content_available": true, <-- this key is converted to ''content-available:1''
"notification" : {
"body" : "noti body",
"title" : "noti title",
"link": "noti link "
}
}
Nota: Si se envía el JSON de muestra anterior, la notificación será visible para el usuario. Use a continuación si no desea que el usuario vea la notificación push.
{
"to": "<device>",
"priority": "normal",
"content_available": true <-- this key is converted to ''content-available:1''
}
¿Hay alguna manera de enviar un APNS silencioso usando la base de fuego de google? Parece que si la aplicación está en segundo plano, siempre mostrará una notificación al usuario.
¿Gracias?
Para los chicos que no usan el
Legacy HTTP
como se muestra en otras respuestas y usan el último
v1 HTTP protocol
, finalmente he descubierto la forma correcta de enviar notificaciones silenciosas.
Ejemplo de NodeJS usando
firebase-admin
:
const message = {
apns: {
payload: {
aps: {
"content-available": 1,
alert: ""
}
}
}
};
admin
.messaging()
.send(message)
.then(response => {
// Response is a message ID string.
console.log("Successfully sent message:", response);
})
.catch(error => {
console.log("Error sending message:", error);
});
Explicación:
-
Parece que
apns
no convierte la carga útil enapns
en elv1 HTTP protocol
por lo que necesita el"content-available": 1
para eso. -
alert: ""
también es necesario. Si alguna vez intenta enviar notificaciones silenciosas utilizando algo comoPusher
, encontrará que solo elcontent-available
no puede activarlo. En cambio, agregar un campo adicional comosound
oalert
puede hacer que funcione. Consulte Notificación push silenciosa en iOS 7 no funciona . Dado que Firebase prohíbe el sonido vacío, podemos usar alertas vacías para esto.
Para una notificación verdaderamente silenciosa (tanto en primer plano como en segundo plano) con el servidor FCM, use estos campos:
"to" : "[token]",
"content_available": true,
"priority": "high",
"data" : {
"key1" : "abc",
"key2" : 123
}
NOTA: Asegúrese de estar usando "content_available" NOT "content-available" con FCM. Se convierte para APNS y de lo contrario no se recibirá correctamente. La diferencia me había hecho tropezar por algún tiempo.
Puede enviar mensajes APNS silenciosos utilizando la API del servidor FCM https://firebase.google.com/docs/cloud-messaging/http-server-ref
En particular necesitas usar:
- El campo de datos :
Este parámetro especifica los pares clave-valor personalizados de la carga útil del mensaje.
Por ejemplo, con datos: {"puntaje": "3x1"}:
En iOS, si el mensaje se envía a través de APNS, representa los campos de datos personalizados. Si se envía a través del servidor de conexión FCM, se representaría como un diccionario de valores clave en la aplicación AppDelegate: didReceiveRemoteNotification :.
La clave no debe ser una palabra reservada ("de" o cualquier palabra que comience con "google" o "gcm"). No use ninguna de las palabras definidas en esta tabla (como collapse_key).
Se recomiendan valores en tipos de cadena. Debe convertir valores en objetos u otros tipos de datos que no sean cadenas (por ejemplo, enteros o booleanos) a cadenas
- El campo de contenido disponible :
En iOS, use este campo para representar contenido disponible en la carga útil de APNS. Cuando se envía una notificación o mensaje y se establece en verdadero, se despierta una aplicación de cliente inactiva. En Android, los mensajes de datos activan la aplicación de forma predeterminada. En Chrome, actualmente no es compatible.
Documentación completa: https://firebase.google.com/docs/cloud-messaging/http-server-ref#downstream-http-messages-json