Je me tape la tête. J'implémente la notification push. Tout fonctionne bien (push est reçu, le badge est mis à jour) mais sous iOS 13.3 l'application de méthode (_: didReceiveRemoteNotification: fetchCompletionHandler :) n'est pas appelée lorsque l'application est en arrière-plan. Si l'application est au premier plan ou utilise un appareil iOS 12, la méthode est appelée. Je m'inscris pour la notification push de la manière suivante:
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
}
}];
La charge utile est définie comme suit
{"aps": {
"badge": 10,
"alert": "test",
"content-available": 1
}}
J'ai essayé d'ajouter "Notifications à distance" et "Traitement en arrière-plan" comme capacités d'application dans toutes les variantes (uniquement "Notifications à distance" / "Traitement en arrière-plan", sans aucune de ces capacités, permettant les deux) sans aucune modification. J'ai placé le délégué pour l'UNUserNotificationCenter mais encore une fois sans succès. J'ai défini les en-têtes en conséquence:
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
D'après les documents, il indique que cette méthode est appelée même lorsque l'application est en arrière-plan:
Utilisez cette méthode pour traiter les notifications distantes entrantes pour votre application. Contrairement à la méthode application: didReceiveRemoteNotification:, qui est appelée uniquement lorsque votre application s'exécute au premier plan, le système appelle cette méthode lorsque votre application s'exécute au premier plan ou en arrière-plan.
Qu'est-ce que je manque ici pour iOS 13?
application(_:didReceiveRemoteNotification:withCompletionHandler:)
méthode?Réponses:
Avez-vous défini
en vous la charge utile APS backend?
Vous devez également vous assurer que vous avez activé le mode d'arrière-plan dans le fichier info.plist de votre application iOS
la source
Je dépense un ticket d'assistance pour obtenir une réponse à ce problème.
Il s'avère que la documentation n'est pas 100% "valide" pour iOS 13 sur ce sujet. L'appareil décide de se réveiller ou non. Bien que la documentation indique un peu différent.
Mode de mise en œuvre préféré d'Apple en tant qu'extension de notification. Après cela, vous devez adapter la charge utile pour inclure le "contenu mutable".
J'ai ensuite demandé au support si je devais déposer un radar et ils ont répondu "oui".
la source
Implémentez
didRegisterForRemoteNotificationsWithDeviceToken
et égalementdidFailToRegisterForRemoteNotificationsWithError
dans le délégué de votre application, pour vérifier si l'appareil établit une bonne connexion avec le serveur APN d'Apple. Si ce n'est pas le cas, redémarrez l'appareil et / ou essayez d'établir une connexion via un autre réseau Wi-Fi et redémarrez l'application.la source
Cette méthode déléguée: -
est invoqué lorsque nous cliquons sur la notification pour iOS 13 et que l'application est en arrière-plan.
la source
Vous devez implémenter une extension de contenu de notification
Comme j'utilisais OneSignal et son code de configuration, cela a bien fonctionné pour moi https://documentation.onesignal.com/docs/ios-sdk-setup
Je ne sais pas si les bits OneSignal font une différence, mais en les ajoutant quand même
la source