web-dev-qa-db-fra.com

Définition du badge d'application lors de la réception des notifications fcm Push

J'utilise FCM pour la messagerie cloud. Je souhaite ajouter un badge d'application lorsque je reçois une notification Push du serveur en arrière-plan et au premier plan. Qu'est-ce qui me manque? Le problème principal est l'ajout/la mise à jour/la suppression du badge d'application selon la notification Push, je peux recevoir et gérer les messages Push .Je suis 3 jours sur ce problème. Aidez-moi, s'il vous plaît!? * Les numéros de badge changent en fonction du contenu intérieur, comme si de nouveaux e-mails sont reçus dans l'application gmail, le numéro de badge change en nombre de messages non lus dans les états de l'application en arrière-plan et au premier plan.

en utilisant XCode 9.2, Swift 3.2, iOS 11.6

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    FirebaseApp.configure()
    var fcmtoken: String = ""

    if #available(iOS 10.0, *) {
        // For iOS 10 display notification (sent via APNS)
        UNUserNotificationCenter.current().delegate = self

        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(
            options: authOptions,
            completionHandler: {_, _ in })
    } else {
        let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        application.registerUserNotificationSettings(settings)
    }

    application.registerForRemoteNotifications()

    if let token = Messaging.messaging().fcmToken {
        fcmtoken = token
        print("FCM token: \(fcmtoken)")
    } else {
        print("FCM token: \(fcmtoken) == no FCM token")
    }

    return true
}

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
    print("Firebase registration token: \(fcmToken)")

    Messaging.messaging().subscribe(toTopic: "all")
    print("subscribed to all topic in didReceiveRegistrationToken")

    // TODO: If necessary send token to application server.
    // Note: This callback is fired at each app startup and whenever a new token is generated.
}


func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) {
    Messaging.messaging().subscribe(toTopic: "all")
    print("subscribed to all topic in notificationSettings")
}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {

    print("userInfo -- \(userInfo)")

}

@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

    let userInfo = response.notification.request.content.userInfo
    print("user info in didReceive response -- \(userInfo)")

}


@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

    print("called to foreground app")
}

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

    Messaging.messaging().subscribe(toTopic: "all")
    print("subscribed to all topic in didRegisterForRemoteNotificationsWithDeviceToken")
}
7
BatyrCan

Les charges utiles sont votre contenu:

Une grande partie de ce que nous venons de faire remplace le déclencheur dans une notification locale. Le contenu d'une notification se trouve dans la charge utile. Pour revenir à la plate-forme de test, vous trouverez ceci:

{"aps":{"alert":"Enter your message","badge":1,"sound":"default"}}

Idéalement, votre fichier JSON devrait ressembler à ceci. Vous n'avez que 4K pour votre charge utile, donc le gaspiller dans les espaces est mal vu. Lors de l'envoi de charges utiles, évitez les espaces. Cependant, ils sont difficiles à lire de cette façon. Cela ressemble mieux à ceci:

{
 "aps":{
        "alert":"Enter your message",
        "badge":1,
        "sound":"default"
 }
}

L'aps est un dictionnaire JSON avec des entrées qui décrivent votre contenu. L'entrée d'alerte peut être une chaîne telle qu'elle est ici, ou un dictionnaire décrivant le contenu de l'alerte qui s'affiche sur votre appareil. Le badge donne le numéro à afficher sur l'icône du badge. Le son joue le son par défaut. Vous pouvez modifier cette charge utile pour changer le contenu affiché dans l'alerte. Comme l'alerte peut être à la fois un dictionnaire ou une chaîne, vous pouvez en ajouter d'autres. Modifiez la charge utile en ceci:

{
 "aps":{
        "alert":{
                "title":"Push Pizza Co.",
                "body":"Your pizza is ready!"
         },
            "badge":42,
            "sound":"default"
 }
}

Cela ajoutera un titre et un message indiquant que votre pizza est prête. Il changera également le badge en 42

{"aps":{"alert":{"title":"Push Pizza Co.","body":"Your pizza is ready!"},"badge":42,"sound":"default"}}

enter image description here

La notification apparaît avec le titre et le corps. Le badge apparaît avec le numéro 42.

Cependant, vous pouvez également le modifier pendant que votre application est active. Vous aurez besoin de l'autorisation de l'utilisateur en enregistrant le UserNotificationType. Une fois que vous avez obtenu l'autorisation, vous pouvez la changer en n'importe quel numéro.

  application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert |
    UIUserNotificationType.Badge, categories: nil
    ))

application.applicationIconBadgeNumber = 5

Vous pouvez également faire comme:

  let badgeCount: Int = 10
    let application = UIApplication.shared
    let center = UNUserNotificationCenter.current()
    center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
        // Enable or disable features based on authorization.
    }
    application.registerForRemoteNotifications()
    application.applicationIconBadgeNumber = badgeCount

Résultat:

enter image description here

Remarques: Veuillez vérifier l'autorisation de l'application pour un badge comme: enter image description here

Référence: https://makeapppie.com/2017/01/03/basic-Push-notifications-in-ios-10-and-Swift/

8
Mr.Javed Multani