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 ...
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.
vous pouvez créer une variable statique à la place et l'affecter à l'applicationConBadGenumber:
static int i=1;
[UIApplication sharedApplication].applicationIconBadgeNumber = i++;
-(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.
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