Notificación push silenciosa (fondo) no recibida en macOS Catalina (aplicación Catalyst)

9

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:

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?

Philipp Jahoda
fuente

Respuestas:

2

Vaya pregunta tonta. Estoy razonablemente familiarizado con los dolores de cabeza de APN, pero algo surgió de los últimos documentos :

Además, la solicitud POST de la notificación debe contener el campo de encabezado apns-push-type con un valor de fondo, y el campo de prioridad apns con un valor de 5. El servidor APNs requiere el campo apns-push-type al enviar notificaciones push a Apple Watch, y lo recomienda para todas las plataformas. Para obtener más información, consulte Crear y enviar una solicitud POST a APN.

¿La cosa de prioridad 5 hace la diferencia?

Además, mi intento habitual de solucionar estos problemas es probar en un archivo en lugar de una compilación de Xcode. AFAIK, el servidor de envío de productos solo puede enviar a App Store, ad-hoc, empresa o compilaciones de vuelos de prueba, por lo que si solo está compilando desde Xcode, no creo que reciba notificaciones push con apns de producción.

Matthew Weldon
fuente
1
Gracias por tus pensamientos. También he intentado con el encabezado de prioridad de simios (valor 5), desafortunadamente no hay diferencia. Probaré las sugerencias finales que hizo con respecto a las pruebas con una compilación archivada.
Philipp Jahoda
El archivo @PhilippJahoda fyi es solo la mitad de la solución, aún necesita distribuir ad-hoc o uno de los otros métodos que enumeré para recibir notificaciones push de producción. Esto hace que la depuración también sea un dolor mayor. Espero que puedas resolver esto, me complacería saber cuándo lo haces.
Matthew Weldon
Sí, gracias por el aviso. Esta cosa es un gran dolor en el culo. ¿Alguna otra idea aparte de eso? No puedo entender el hecho de que está funcionando en iOS pero no en macOS.
Philipp Jahoda