web-dev-qa-db-fra.com

Numéro de badge d'icône de l'application N'AFFAIRE: XCode

Je suis confronté à un problème avec la mise à jour de la valeur de la valeur de l'application de notification push.

Je fais comme:

-(void)application:(UIApplication *)application 
       didReceiveRemoteNotification:(NSDictionary *)userInfo {

       UIApplicationState state = [application applicationState];
       if (state == UIApplicationStateActive) {
          // do stuff when app is active

       }else{
          // do stuff when app is in background
          [UIApplication sharedApplication].applicationIconBadgeNumber = 
          [UIApplication sharedApplication].applicationIconBadgeNumber+1;  
               /* to increment icon badge number */
       }
 }

Mais, l'icône montre le numéro de badge comme "1" toujours, et il ne s'agit pas d'incrémenter lorsque plus de notifications sont présentes sur une autre.

Tout conseil est appréciable ...

18
Krishna Raj Salim

Le numéro de badge est défini par le système d'exploitation lorsque vous recevez une charge utile de notification JSON qui ressemble aux éléments suivants:

{
    "aps" : {
        "alert" : "New notification!",
        "badge" : 2
    }
}

Comme vous le voyez, c'est le serveur qui est responsable de la définition du numéro correct dans la touche badge. Votre serveur doit suivre ou calculer le nombre de notifications en attente pour chaque utilisateur et générer le numéro badge avant d'envoyer la notification à Apple.

La responsabilité de la clientèle est d'effacer le badge de notification ou de le décrémenter, lorsque l'utilisateur voit une notification. Le code à faire est

application.applicationIconBadgeNumber = application.applicationIconBadgeNumber - 1; // Decrement counter

ou

application.applicationIconBadgeNumber = 0; // Reset counter assuming the user is able to see all notifications at once.
32
Daniel Martín

vous pouvez créer une variable statique à la place et l'affecter à l'applicationConBadGenumber:

static int i=1;
[UIApplication sharedApplication].applicationIconBadgeNumber = i++;
6
coppertop

-(void)application:didReceiveRemoteNotification: ne sera appelé que lorsque votre application est en cours d'exécution au premier plan.

Si vous souhaitez que le badge soit à augmenter lorsque votre application ne fonctionne pas, vous devez définir le numéro de badge dans la touche Poussez la notification . Vous devez également garder une trace du côté du serveur de numéro de badge, car la propriété badge de la charge utile de notification push sera utilisée comme numéro de badge. Ce sera non incrémentez le numéro de badge pour vous.

Étant donné que le système gère les notifications push entrantes, votre application n'est pas informée des notifications push reçues pour votre application. Ce n'est que lorsque votre application est en cours d'exécution au premier plan le -(void)application:didReceiveRemoteNotification: être appelée. Il n'y a aucun moyen de vous faire appel à REPSOND pour pousser la notification lorsqu'il n'est pas au premier plan.

3
rckoenes

Oui, il semble qu'il retourne toujours badgenumber 1 en Spite, il a une valeur augmentée à 2.

lorsque vous utilisez ce code:

// update badge count
        let currentBadgeCount = UIApplication.shared.applicationIconBadgeNumber
        let badge = (aps["badge"] as? Int) ?? 1
        UIApplication.shared.applicationIconBadgeNumber = currentBadgeCount + badge

je pense donc que la seule solution sera de le stocker dans UserDefaults, puis de mettre à jour la valeur d'UserDaFault, puis de définir le nombre de badges de mise à jour?

Cela devrait fonctionner:

static var notificationsCount: Int {
        set {
            let userDefaults = UserDefaults(suiteName: SharedAppData.appGroup)
            userDefaults?.set(newValue, forKey: "notificationsCount")

            UIApplication.shared.applicationIconBadgeNumber = newValue
        }
        get {
            let userDefaults = UserDefaults(suiteName: SharedAppData.appGroup)
            return userDefaults?.integer(forKey: "notificationsCount") ?? 0
        }
    }

Puis

SharedAppData.notificationsCount = 0 // pour réinitialiser le nombre de badges

Et cela pour augmenter

 // update badge count
        SharedAppData.notificationsCount += 1
0
Michał Ziobro