En fait, dans iOS 10, une notification à distance appelle automatiquement. didReceiveRemoteNotification
dans votre AppDelegate.
Vous avez deux façons de mettre à jour le nombre de badges en arrière-plan.
Je l'ai fait aussi pour mon application actuelle. Vous n'avez pas besoin non plus d'une Notification Service Extension.
1ère voie :
Envoyez la clé de badge APS avec votre charge utile à APN.
Cela mettra à jour le nombre de badges en fonction de la valeur de votre Integer dans votre payload de badge. e.x. :
// Payload for remote Notification to APN
{
"aps": {
"content-available": 1,
"alert": "Hallo, this is a Test.",
"badge": 2, // This is your Int which will appear as badge number,
"sound": default
}
}
2ème voie :
Vous pouvez changer votre application.applicationState et mettre à jour vos badges Compter quand l'applicationState est en .background
. MAIS vous devez faire attention à ne pas définir le paramètre de la clé de badge dans votre charge utile de notification lors de l'envoi à APN e.x.
// Payload to APN as silent push notification
{
"aps": {
"content-available": 1
}
}
Traitez la mise à jour du badge en fonction de l'état de l'application :
Voici mon code de travail pour la mise à jour du nombre de badges sans clé de badge dans la charge utile pour APN.
func application(_ application: UIApplication, didReceiveRemoteNotification
userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("APN recieved")
// print(userInfo)
let state = application.applicationState
switch state {
case .inactive:
print("Inactive")
case .background:
print("Background")
// update badge count here
application.applicationIconBadgeNumber = application.applicationIconBadgeNumber + 1
case .active:
print("Active")
}
}
Remise à zéro du nombre de badges :
N'oubliez pas de réinitialiser le nombre de badges lorsque votre application revient à l'état actif.
func applicationDidBecomeActive(_ application: UIApplication) {
// reset badge count
application.applicationIconBadgeNumber = 0
}