J'ai remarqué que sur iOS 11 beta 2, le silencieux, les notifications ne sont pas livrés à l' application:didReceiveRemoteNotification:fetchCompletionHandler
quel que soit l'état de l'application (à l'arrière plan / premier plan).
J'ai mis en place l' UIApplicationDelegete
méthode application:didReceiveRemoteNotification:fetchCompletionHandler
et j'ai envoyer le silence pousser
{
"aps": {
"content-available": 1
},
"mydata": {
"foo": "bar"
}
}
mais le délégué de la méthode n'est pas appelée sur iOS 11.
Il fonctionne très bien sur d'autres versions d'iOS et la section de la documentation de la Configuration d'une Notification Silencieuse ne pas mentionner qu'autre chose doit être fait.
Est-ce un bug dans iOS 11 ou ai-je raté quelque chose de nouveau dans iOS 11?
Veuillez noter que je ne suis pas d'en parler ou de l'utilisation de l' UserNotification
- cadre qui ne devrait pas être nécessaire pour l'envoi de silence pousse.
Voici un exemple de projet qui illustre la question (vous devrez définir votre propre id de lot)
Lorsque vous le déjeuner, l'exemple de projet et d'envoyer une charge ci-dessus à l'application, vous pouvez utiliser le macOS console de voir que le push est livré correctement à l'appareil, mais pas à l'application.
Mise à JOUR 10.08
Il semble que le comportement est aléatoire. Parfois, après le redémarrage de l'appareil, la charge utile est livré correctement, mais il s'arrête de fonctionner après un certain temps.
Comme vous pouvez le voir sur la capture d'écran suivante, la poussée marquée comme 1 est livré uniquement à l'appareil et de le pousser 2 (après redémarrage du périphérique) est également délivrée à l'application.
Mise à JOUR 14.08 - iOS 11 Beta 6
Toujours le même comportement. Une autre chose qui est censé travailler, mais qui ne fonctionne pas est la suivante. Lorsque l'application du régime est réglé sur "Attendre pour le fichier exécutable à être lancé", un silencieux push est censé réveiller l'application et la lancer en arrière-plan.
Mise à JOUR 21.08 - iOS 11 Beta 7
Toujours le même comportement et pas de mises à jour d'Apple dans le rapport de bogue.
Mise à JOUR 29.08 - iOS Beta 11 8
Toujours le même problème. Les étapes pour reproduire que j'utilise actuellement sont les suivants:
- Dans Xcode projet de schéma, sélectionnez "Attendre pour le fichier exécutable à être lancés"
- Ajouter un point d'arrêt dans l'
didReceiveRemoteNotification: fetchCompletionHandler
- Démarrez l'application sur le périphérique
- Envoyer le silencieux au-dessus de pousser
Attendu: L'application est présenté à partir de l'état suspendu à l'arrière-plan et l' didReceiveRemoteNotification: fetchCompletionHandler
est appelé
Réelle: rien ne se passe
Mise à JOUR 06.09 - iOS Beta 11 10
Je suis toujours le même buggy comportement. Le billet d'Apple a été mis à jour avec la réponse suivante:
Apple Developer Relations 6 septembre 2017, 10:42 PM Ingénierie a formulé les commentaires suivants au sujet de cette question:
Nous avons été en mesure d'obtenir l'exemple d'application en cours d'exécution et de tester le comportement. Nous ne vois pas de problèmes lorsque nous avons testé ce que décrit.
Pousse ne sont pas garantis pour arriver à l'application quand elle est en cours d'exécution dans l'arrière-plan, et les journaux d'ici indiquent que nous ne croyons pas que l'application est utilisé assez pour le lancer.
Nous ne voyons nous livrer pousse de temps à autre, lorsque les conditions sont bon.
Nous croyons que c'est de se comporter correctement.
Mise à jour 11.09
Ma Pomme rapport de bug a été fermé et marqué comme un double de l' 33278611
qui reste ouvert
Mise à JOUR 13.09 - iOS 11 GM
Grâce à kam800 de commentaires (voir ci-dessous) je n'ai plus de tests et est venu avec ces observations:
Il semble y avoir un nouveau démon dans iOS 11 dasd DuetActivitySchedulerDaemon
, qui rejette le push de données ou de retards, le push de données de livraison:
Livraison reportée
Journaux De La Console
default 13:11:47.177547 +0200 dasd DuetActivitySchedulerDaemon CANCELED: com.apple.pushLaunch.net.tequilaapps.daylight:C03A65 <private>! lifecycle com.apple.duetactivityscheduler
default 13:11:47.178186 +0200 dasd DuetActivitySchedulerDaemon Removing a launch request for application <private> by activity <private> default com.apple.duetactivityscheduler
default 12:49:04.426256 +0200 dasd DuetActivitySchedulerDaemon Advancing start date for <private> by 6.5 minutes to Wed Sep 13 12:55:31 2017 default com.apple.duetactivityscheduler
default 13:21:40.593012 +0200 dasd DuetActivitySchedulerDaemon Activity <private>: Optimal Score 0.6144 at <private> (Valid Until: <private>) scoring com.apple.duetactivityscheduler
default 13:21:40.594528 +0200 dasd DuetActivitySchedulerDaemon Setting timer (isWaking=1, activityRequiresWaking=0) between <private> and <private> for <private> default com.apple.duetactivityscheduler
Reporté des problèmes de livraison
- Lorsque les données de pousser la livraison est retardée et l'application est lancée, le push de données est livré uniquement lorsque la date de livraison est atteint, qui peut être de plusieurs minutes dans le futur. Cela va à l'encontre complètement le but de l'utilisation des données pousse à garder la nouvelle application de contenu prêt pour le prochain lancement. Je cite ici une fois de plus la documentation d'Apple:
"Le silence des notifications d'améliorer l'expérience utilisateur en vous aidant à garder votre application à jour, même quand il n'est pas en cours d'exécution."
- Lorsque deux pousse données sont envoyées à une application suspendue ils sont reportées pour iOS 11 au lieu de se réveiller de l'application directement. Lorsque le délai de livraison est atteint, seul le dernier push de données est livré! La précédente pousse sont perdus et non livrés par le délégué de la méthode résultant en une perte de données.
Livraison annulée
Journaux De La Console
default 13:35:05.347078 +0200 dasd DuetActivitySchedulerDaemon com.apple.pushLaunch.net.tequilaapps.daylight:C03A65:[
{name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Must Not Proceed, Score: 0.00}}
], FinalDecision: Must Not Proceed} scoring com.apple.duetactivityscheduler
L'annulation de la livraison des questions
Eh bien dans ce cas, le push de données est complètement perdu et jamais livré sur iOS 11 alors qu'il a été livré correctement sur iOS 10.
Mise à JOUR 19.09 - iOS 11 GM
J'ai aussi remarqué que lorsque l'application est au premier plan et la notification n'est pas livré à l'application, je vois les journaux suivants dans la console:
default 08:28:49.354824 +0200 apsd apsd <private>: Received message for enabled topic '<private>' onInterface: NonCellular with payload '<private>' with priority 10 for device token: NO courier-oversized com.apple.apsd
fault 08:33:18.128209 +0200 dasd Foundation <NSXPCConnection: 0x151eee460> connection from pid 55: Exception caught during decoding of received message, dropping incoming message.
Exception: Exception while decoding argument 0 (#2 of invocation):
Exception: value for key 'NS.objects' was of unexpected class 'NSNull'. Allowed classes are '{(
NSArray,
NSData,
NSString,
NSNumber,
NSDictionary,
NSUUID,
_DASActivity,
NSSet,
_DASFileProtection,
NSDate,
NWParameters,
NWEndpoint
)}'. general com.apple.foundation.xpc