Mettre à jour le badge avec notification push lorsque l'application est en arrière-plan

J'ai activé la notification push et réussi à mettre à jour le nombre de badges d'icons lorsque l'application est placée au premier plan.

Je suis un peu confus à ce sujet si … l'iPhone reçoit la notification et le message pop-up apparaît pour activer mon application, et le badge ne se met à jour après le démarrage de l'application.

Cela ne semble pas juste en termes d'expérience user. Ma compréhension est que le nombre de badges doit notifier l'user de ce qui a besoin d'une action, par le biais du nombre incrémenté, mais cela ne se produit pas avant une étape ultérieure lorsque l'application est en ligne.

Alors, existe-t-il un moyen de requestr à l'application de mettre à jour son nombre de badges lorsqu'elle reçoit des notifications push et en étant en arrière-plan?

Notez que mon application n'utilise pas l'location et que j'ai UIRemoteNotificationTypeBadge dans la request d'logging de notification.

Cheers AF

    Les notifications push étant gérées par iOS et non par votre application, vous ne pouvez pas modifier le badge d'application à la réception d'une notification push.

    Mais vous pouvez envoyer le numéro de badge dans la charge utile de la notification push, mais vous devrez faire le côté server de calcul.

    Vous devriez lire le Guide de programmation des notifications locales et push et en particulier la charge utile de notification .

    La charge utile pourrait ressembler à ceci:

     { "aps" : { "alert" : "You got your emails.", "badge" : 9 } } 

    Maintenant, l'icône du badge de l'application apparaîtra.

    Nous pouvons modifier le numéro de badge lorsque nous sums dans l'état d'arrière-plan en envoyant le paramètre "badge" dans le package de notification push. Comme @rckoenes a souligné que le paramètre JSON pour le badge doit être INTEGER .

    Exemple de code PHP pour faire la même chose

     // Create the payload body $body['aps'] = array( 'alert' => $message, 'badge' => 1, 'sound' => 'default' ); 

    badge => 1 où 1 est un entier et non une string (c'est-à-dire sans apostrophies)

      **This is the APNS payload get back from server.** { "aps" : { "alert" : "You got your emails.", "badge" : 9, "sound" : "bingbong.aiff" }, "acme1" : "bar", "acme2" : 42 } 

    La valeur du badge key est automatiquement considérée comme le nombre de badge. Du côté de l'application ios, il n'est pas nécessaire de calculer ou de gérer le nombre de badges. Dans l'exemple ci-dessus 9 est le nombre de badge. Ainsi, l'icône de votre application affichera 9.

    REMARQUE Pendant que votre application est proche, vous ne pouvez pas gérer vous-même les badges. C'est pourquoi nous utilisons la key de badge de APNS Payload Pour une meilleure clarification de la notification, consultez la documentation

    Si vous voulez réduire le nombre de badges vous-même, réduisez le nombre et mettez-le à jour.

     -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { application.applicationIconBadgeNumber = 0; NSLog(@"userInfo %@",userInfo); for (id key in userInfo) { NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]); } [application setApplicationIconBadgeNumber:[[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] intValue]]; NSLog(@"Badge %d",[[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] intValue]); } 

    Comme @rckoenes a dit que vous devrez faire le côté du server de calcul, mais comment pouvez-vous savoir quand incrémenter la valeur du numéro de badge que vous devez envoyer dans la charge utile?

    Lorsque vous lancez l'application, envoyez un message à votre server indiquant que l'application a été lancée. Donc, du côté server, vous recommencez à partir de badge = 0, et bien qu'il n'y ait pas de messages reçus par le server, augmentez le nombre de badge avec chaque charge utile de notification push.

    Après avoir reçu la notification à distance lorsque vous ouvrez App,

    get le numéro de badge actuel dans la didBecomeActive " didBecomeActive " de votre AppDelegate .

    Fichier utilisant le code ci-dessous:

     int badgeCount = [UIApplication sharedApplication].applicationIconBadgeNumber; badgeCount = badgeCount + 1; 

    Si vous utilisez NotificationServiceExtension, vous pouvez mettre à jour le badge.

     var bestAttemptContent : UNMutableNotificationContent? // bestAttemptContent.badge = 0//any no you wanna display 

    Chaque fois que votre application reçoit une notification, votre extension de service sera appelée. Enregistrez cette valeur dans la valeur par défaut de l'user et affichez-la. Pour partager les valeurs par défaut entre l'application et l'extension, vous devez activer le groupe d'applications dans l'application. Lire la suite ici

    Depuis iOS 10, vous pouvez développer une extension Notification Service pour votre application. Il sera démarré par le système lorsque vous recevez une notification et que vous pouvez calculer un numéro valide pour le badge et le définir.

    Jetez un oeil à la documentation: https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension