Actualmente estoy implementando notificaciones push desde nuestro servidor de back-end a nuestra aplicación (macOS Catalina e iOS - misma base de código), usando Apple Push Notificaciones y la forma de autenticación basada en token (generando JWT desde keyId, teamId, ... y firmandolo con la clave privada generada en la consola del desarrollador de Apple) para enviar notificaciones al servicio APN.
El problema al que me enfrento es que puedo enviar con éxito notificaciones de "alerta" (estado 200, con encabezado apns-push-type: alert
) y recibirlas en mi dispositivo iOS y MacOS (las notificaciones push aparecen con éxito en el modo de producción y sandbox) pero por alguna razón, "en silencio "los empujes (con encabezado apns-push-type: background
) solo se reciben en mi dispositivo iOS (iPhone), pero no en mi Mac ( nunca se llama a didReceiveRemoteNotification(...)
in AppDelegate
).
Lo que he hecho hasta ahora:
- Asegúrese de que el encabezado de solicitud APN esté configurado correctamente para la inserción silenciosa:
apns-push-type: background
- Asegúrese de tener el encabezado de tema APN correcto:
apns-topic: my.bundle.id
(esto es diferente para sandbox / producción) - Se agregó el encabezado de prioridad "semi-requerido":
apns-priority: 5
(solo cuando se envían notificaciones de fondo) - Verificó que el JWT creado es válido y se utiliza en el encabezado de autenticación APN:
authorization: mytoken
(este debe ser el caso, de lo contrario el servicio APN no respondería con el estado 200) - Confirmé que mi aplicación tiene los derechos y capacidades correctos definidos en Xcode (mi razonamiento: este debe ser el caso, de lo contrario las notificaciones push 'alertas' tampoco funcionarían)
- Comprueba dos veces que las notificaciones push para la aplicación Mac están permitidas / habilitadas (configuración del sistema comprobada)
- Asegúrese de que el token del dispositivo al que estoy enviando el envío es en realidad del dispositivo destinado a recibir el envío (por ejemplo, mi MacBook)
- Comprueba que la clave privada que estoy usando para firmar el JWT tiene la capacidad APN
- Probado mientras la aplicación Mac se está ejecutando pero no está enfocada y también cuando está enfocada
Las solicitudes de APN que estoy realizando para enviar el envío son:
- Sandbox: POST https://api.sandbox.push.apple.com/3/device/ {deviceToken}
- Producción: POST https://api.push.apple.com/3/device/ {deviceToken}
La carga útil (JSON) que envío al servicio APN en el cuerpo de la solicitud tiene el siguiente aspecto:
{
"aps": {
"content-available": 1 # defines push as "silent"
},
"data": { #some key-value pairs here }
}
En cualquier caso (producción y sandbox, ambos con el token del dispositivo de iOS y macOS), mi solicitud de APN regresa con un código de estado 200. Mi MacBook ejecuta Catalina 10.15.3. ¿Qué estoy haciendo mal aquí o es algo que simplemente no es compatible con las aplicaciones de Catalyst?
fuente