Me estoy golpeando la cabeza. Estoy implementando notificaciones push. Todo funciona bien (se recibe el envío, se actualiza la insignia) pero en iOS 13.3 la aplicación del método (_: didReceiveRemoteNotification: fetchCompletionHandler :) no se llama cuando la aplicación está en segundo plano. Si la aplicación está en primer plano o usa un dispositivo iOS 12, se llama al método. Me registro para la notificación push de la siguiente manera:
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
}
}];
La carga útil se establece en lo siguiente
{"aps": {
"badge": 10,
"alert": "test",
"content-available": 1
}}
Intenté agregar "Notificaciones remotas" y "Procesamiento en segundo plano" como capacidades de la aplicación en todas las variaciones (solo "Notificaciones remotas" / "Procesamiento en segundo plano", sin ninguna de esas capacidades, permitiendo ambas) sin ningún cambio. Configuré el delegado para UNUserNotificationCenter pero nuevamente sin éxito. Configuré los encabezados en consecuencia:
curl -v \
-H 'apns-priority: 4' \
-H 'apns-topic: xx.xxxxx.xxxx' \
-H 'apns-push-type: alert' \
-H 'Content-Type: application/json; charset=utf-8' \
-d '{"aps": {"badge": 10,"alert": "test", "content-available":1}}' \
--http2 \
--cert pushcert.pem \
https://api.sandbox.push.apple.com/3/device/1234567890
En los documentos, se indica que se llama a este método incluso cuando la aplicación está en segundo plano:
Use este método para procesar notificaciones remotas entrantes para su aplicación. A diferencia de la aplicación: didReceiveRemoteNotification: método, que se llama solo cuando su aplicación se ejecuta en primer plano, el sistema llama a este método cuando su aplicación se ejecuta en primer plano o en segundo plano.
¿Qué me estoy perdiendo aquí para iOS 13?
fuente
application(_:didReceiveRemoteNotification:withCompletionHandler:)
método?Respuestas:
Has puesto
en su carga útil de back-end APS?
También debe asegurarse de haber habilitado el modo de fondo en el archivo info.plist de su aplicación iOS
fuente
Gasto un ticket de soporte para obtener una respuesta a este problema.
Resulta que la documentación no es 100% "válida" para iOS 13 sobre este tema. El dispositivo decide si despertarse o no. Aunque la documentación establece un poco diferente.
La forma preferida de implementación de Apple como una extensión de notificación. Después de eso, debe adaptar la carga útil para incluir "contenido mutable".
Luego le pregunté al soporte si debía archivar un radar y me respondieron "sí".
fuente
Implemente
didRegisterForRemoteNotificationsWithDeviceToken
y tambiéndidFailToRegisterForRemoteNotificationsWithError
en el delegado de su aplicación, para verificar si el dispositivo se conecta bien con el servidor APN de Apple. Si este no es el caso, reinicie el dispositivo y / o intente establecer una conexión a través de otra red Wi-Fi y reinicie la aplicación.fuente
Este método delegado: -
se invoca cuando hacemos clic en la notificación para iOS 13 y la aplicación está en segundo plano.
fuente
Debe implementar una extensión de contenido de notificación
Como estaba usando OneSignal y su código de configuración, esto funcionó bien para mí https://documentation.onesignal.com/docs/ios-sdk-setup
no estoy seguro si los bits de OneSignal hacen la diferencia, pero anexándolos de todos modos
fuente