172 votes

Appuis silencieux non livrés à l'application sur iOS 11

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.

enter image description here

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.

enter image description here

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

31voto

Jan Points 3200

Donc les notes de version de l'iOS 11.1 bêta 1 dire

iOS 11.1 bêta 1 vient de sortir et ils mentionnent: "Notifications Problèmes Résolus • Le silence des notifications push sont traitées de plus en plus fréquemment. (33278611)

J'ai fait quelques tests et il semble être en effet fixe:

À L'État De Veille

Lorsque je lance l'application dans un mode de suspension et d'envoyer un silence de pousser, l'application est ramené à l'arrière-plan et l' didReceiveRemoteNotification:fetchCompletionHandler délégué est appelé.

Au Premier Plan De L'État

De la même manière, lorsque l'application est en arrière plan et un silencieux push est envoyé, le délégué semble être appelé comme prévu. C'était au hasard de ne pas travailler dans les précédents iOS 11 versions donc je vais confirmer ce après plus de tests.

18voto

Bill Dunay Points 161

Je voulais juste rajouter mes 2 cents ici que j'ai été touché par ce problème aussi, et j'ai remarqué que Apple a fermé plusieurs radars sur cette question en disant qu'ils ne pouvaient pas se reproduire. Une chose intéressante que j'ai trouvé est que les poussées seront livrés si l'application est backgrounded alors qu'il est attaché à le débogueur.

Si je tue le débogueur, débrancher mon téléphone, lancez l'application, et d'envoyer le silence de pousser la charge utile je vois l'application n'obtenant PAS réveillé. Je ne voir dans le journal de la Console que le système annule la livraison de la charge utile à mon application.

J'ai envoyé un radar avec un petit exemple d'application qui reproduit le problème. J'ai aussi mentionné explicitement dans le radar, la personne qui travaille sur mon billet ne doit pas être en cours d'exécution de l'application attaché au débogueur de reproduire le problème. Voici le lien: https://bugreport.apple.com/web/?problemID=34461063

J'espère que cela va causer quelques progrès à faire sur cette question.

14voto

kam800 Points 126

Ressemble à un nouveau comportement de l'iOS 11. iOS beta 11 10 fournit descriptive journaux à propos de cette question:

default 23:18:51.806011 +0200   dasd    com.apple.pushLaunch.com.acme.Acme:F7E7D0:[
    {name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Can Proceed, Score: 0.50}}
    {name: BatteryLevelPolicy, policyWeight: 1.000, response: {Decision: Can Proceed, Score: 0.87, Rationale: [{batteryLevel == 62}]}}
    {name: DeviceActivityPolicy, policyWeight: 5.000, response: {Decision: Can Proceed, Score: 0.20}}
 ] sumScores:52.279483, denominator:81.410000, FinalDecision: Can Proceed FinalScore: 0.642175}
default 23:18:51.806386 +0200   dasd    'com.apple.pushLaunch.com.acme.Acme:F7E7D0' has compatibility score of 1.000000 with 'com.apple.CFNetwork-cc-111-79:E7272D'. Relaxing scores.
default 23:18:51.806855 +0200   dasd    'com.apple.pushLaunch.com.acme.Acme:F7E7D0' CurrentScore: 0.642175, ThresholdScore: 0.738454 DecisionToRun:0

Ressemble à tous les silencieux push est livré à iOS, mais dasd démon utilise le couple de politiques de décider si le silence commande doit être livrée à l'application (par exemple, le niveau de la batterie). J'ai réussi à recevoir un silencieux pousser la nuit d'hier, mais mon iPhone est connecté au chargeur, à ce moment – probablement BatteryLevelPolicy score était assez élevé, afin de recevoir un silencieux pousser.

Apple ne donne aucune information officielle à propos de cette iOS côté comportement, il y a seulement des informations sur le serveur-côté de la limitation:

Le silence des notifications ne sont pas conçues comme un moyen de garder votre application éveillé dans l'arrière-plan, ils ne sont signifiait pour les mises à jour prioritaires. APNs traite silencieux notifications faible priorité et peut-accélérateur de leur livraison tout à fait si le nombre total devient excessive. Le réel les limites sont dynamiques et peuvent changer en fonction des conditions, mais essayez de ne pas envoyer plus de quelques notifications par heure.

Je garde mes doigts croisés, ils ont changé le comportement, car cela permettrait de résoudre mon app :) d'autre part, ce changement est une bonne chose – parmi beaucoup de choses à faire iPhone la batterie dure plus longtemps que les téléphones Android.

9voto

Andrew Gould Points 71

Les notes de publication de la bêta d'iOS 11.1 incluent: Notifications Problèmes résolus Les notifications push silencieuses sont traitées plus fréquemment. (33278611)

7voto

Thomas Einwaller Points 1898

Apple Developer Relations viens d'ajouter un commentaire à mon radar:

Nous pensons que ce problème est résolu dans le dernier iOS 11.2 bêta.

S'il vous plaît tester avec le dernier iOS bêta. Si vous avez encore des questions, veuillez mise à jour de votre rapport de bogue avec des journaux ou des informations qui pourrait nous aider à enquêter.

https://developer.apple.com/download/

actuellement, l'installation de iOS 11.2 bêta - test sera silencieux pousser comportement

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X