web-dev-qa-db-fra.com

Mettre à jour le compteur de badges en Swift

Avec le code suivant, j'obtiens (2) dans l'icône de badge immédiatement après la compilation de l'application:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    let installation = PFInstallation.currentInstallation()
    installation.setDeviceTokenFromData(deviceToken)
    installation.badge = 2
    installation.saveInBackground()
}

J'ai essayé la variante suivante: Initialisé un nouveau var badgeCount = 0 et ensuite:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    badgeCount++
    let installation = PFInstallation.currentInstallation()
    installation.setDeviceTokenFromData(deviceToken)
    installation.badge = badgeCount
    installation.saveInBackground()
}

Mais lorsque je reçois de nouvelles notifications, il ne se met pas à jour à +1. Quelqu'un sait-il comment y remédier?

15
Orkhan Alizade

Il ne mettra pas à jour le numéro de badge avec cette méthode à moins que l'application ne soit réellement ouverte. Si vous souhaitez mettre à jour le numéro de badge lors de la réception d'une notification, vous devez définir la propriété Badge de la notification json Push sur le numéro souhaité.

Si vous, si vous envoyez un message normal (sans utiliser json), il y a une bascule pour incrémenter le numéro de badge, il suffit de cocher cette case. Si vous utilisez Json, utilisez ceci:

{
    "aps": {
        "alert": "Test Push Notification",
        "sound": "yourSound.aiff",
        "Badge": "desiredNumber"
    }
}

Veuillez noter que si vous ne souhaitez pas envoyer cela à partir du serveur, vous pouvez également l'envoyer d'un appareil à un autre en utilisant le client Push de Parse, accédez à vos paramètres dans l'application sur Parse.com et activez "Client Push", vous pouvez puis envoyez le Json ci-dessus à l'appareil d'un autre utilisateur.

15
Swinny89

Chaque fois que le code est compilé, il affiche l'icône de badge qui est précédemment stockée dans votre application. Si vous ne définissez pas l'icône de badge = 0 dans votre application, le numéro d'icône de badge s'affiche dans votre application chaque fois que vous le compilez ou entrez en arrière-plan.

Maintenant, pour votre problème, utilisez l'icône de badge comme

var badgeCount = 0 

 UIApplication.sharedApplication().applicationIconBadgeNumber = ++badgeCount

De plus, chaque fois que vous avez terminé votre tâche, faites l'icône de badge à 0 sinon il affichera une icône de badge dans votre application

UIApplication.sharedApplication().applicationIconBadgeNumber = 0
16
Rizwan Shaikh

J'ai travaillé sur un scénario similaire et la solution finale que j'ai trouvée pour incrémenter et réinitialiser les numéros de badge.

Incrémenter le numéro de badge

  1. Je garde toujours le nombre de badges en mémoire (NSUserDefaults)
  2. Chaque fois que je dois définir la notification, j'obtiens l'incrément de numéro de badge actuel et je définis ce numéro sur .applicationIconBadgeNumber Et je mets à jour le nombre en mémoire.

Réinitialiser le numéro de badge

  1. Dans mon cas, je dois réinitialiser tout le nombre de badges une fois l'application ouverte. J'ai donc mis UIApplication.sharedApplication().applicationIconBadgeNumber = 0 dans didFinishLaunchingWithOptions de AppDelegate. J'ai également réinitialisé le nombre dans la mémoire.
5
Rahul Krishna

Aucune de ces réponses n'est plus valable.

Vous devez regarder votre code Push, pas votre AppDelegate

Depuis les documents Parse:

badge: (iOS/OS X only)
the value indicated in the top right corner of the app icon. 
This can be set to a value or to Increment in order to increment the current value by 1.
0
Eric Johnson