web-dev-qa-db-de.com

Aktualisieren Sie das Badge mit der Push-Benachrichtigung, während sich die App im Hintergrund befindet

Ich habe die Push-Benachrichtigung aktiviert und es ist mir gelungen, die Anzahl der Icon-Badges zu aktualisieren, wenn die App in den Vordergrund gebracht wird. 

Ich bin darüber etwas verwirrt ... Das iPhone empfängt die Benachrichtigung und die Popup-Meldung scheint meine App zu aktivieren. Das Badge wird erst aktualisiert, nachdem ich die App gestartet habe. 

Dies hört sich in Bezug auf die Benutzererfahrung nicht als richtig an. Ich verstehe das so, dass die Ausweiszählung den Benutzer durch erhöhte Zählung darüber informieren muss, welche Maßnahmen ergriffen werden müssen. Dies geschieht jedoch erst zu einem späteren Zeitpunkt, wenn die App live geschaltet wird. 

Gibt es eine Möglichkeit, der App mitzuteilen, dass sie ihre Badge-Zählung aktualisiert, wenn sie Push-Benachrichtigungen empfängt und sich im Hintergrund befindet? 

Beachten Sie, dass meine App keinen Standort verwendet und dass ich UIRemoteNotificationTypeBadge in der Registrierungsanforderung für Benachrichtigungen habe.

ProstAF

58
Abolfoooud

Da Push-Benachrichtigungen von iOS und nicht von Ihrer App verarbeitet werden, können Sie das Anwendungs-Badge nach Erhalt einer Push-Benachrichtigung nicht ändern.

Sie können jedoch die Ausweisnummer in der Nutzlast der Push-Benachrichtigung senden, aber Sie müssen die Berechnungsserverseite ausführen.

Sie sollten Local und Push Notification Programmierhandbuch und insbesondere The Notification Payload lesen.

Die Nutzlast könnte so aussehen:

{
    "aps" : {
        "alert" : "You got your emails.",
        "badge" : 9
    }
}

Das App-Anwendungs-Abzeichen-Symbol zeigt nun 9 an.

60
rckoenes

Wir können die Badge-Nummer ändern, wenn wir uns im Hintergrund befinden, indem Sie den Parameter "badge" im Push-Benachrichtigungspaket senden. Wie @rckoenes darauf hinweist, muss der JSON-Parameter für das Badge eineGANZZAHLsein. 

Beispielcode PHP, um dasselbe zu tun 

// Create the payload body
$body['aps'] = array(
        'alert' => $message,
        'badge' => 1,
        'sound' => 'default'
        );

badge => 1 wobei 1 eine ganze Zahl ist, keine Zeichenfolge (dh ohne Apostrophien)

10
prajul
    **This is the APNS payload get back from server.**

    {
        "aps" : {
            "alert" : "You got your emails.",
            "badge" : 9,
            "sound" : "bingbong.aiff"
        },
        "acme1" : "bar",
        "acme2" : 42
    }

Der Wert für das Schlüssel-Badge wird automatisch als Badge-Anzahl betrachtet. Auf der iOS-App müssen Sie die Anzahl nicht berechnen oder handhaben .. Im obigen Beispiel 9 ist die Badge-Anzahl. So wird Ihr App-Symbol 9 anzeigen.

HINWEIS Während sich Ihre App in der Nähe befindet, können Sie mit Badges nicht alleine umgehen. Aus diesem Grund verwenden wir den Badge-Schlüssel von APNS Payload Weitere Informationen zur Benachrichtigung finden Sie in der Dokumentation

wenn Sie die Badge-Anzahl auf eigene Faust reduzieren möchten, verringern Sie die Anzahl und aktualisieren Sie sie selbst

5
Prabhat Pandey

Wenn Sie NotificationServiceExtension verwenden, können Sie das Badge darin aktualisieren.

var bestAttemptContent : UNMutableNotificationContent? // 
bestAttemptContent.badge = 0//any no you wanna display

Jedes Mal, wenn Ihre Anwendung eine Benachrichtigung erhält, wird Ihre Service-Erweiterung aufgerufen. Speichern Sie diesen Wert in den Benutzervorgaben und zeigen Sie ihn an. Um Benutzervorgaben zwischen Anwendung und Erweiterung gemeinsam zu nutzen, müssen Sie die Anwendungsgruppe in Anwendung aktivieren Lesen Sie hier mehr dazu

3
Surjeet Rajput

In iOS 10 ruft eine Remote-Benachrichtigung in Ihrer AppDelegate automatisch die Methode didReceiveRemoteNotification auf.

Sie haben zwei Möglichkeiten, die Ausweisanzahl im Hintergrund zu aktualisieren.
Ich habe das auch für meine aktuelle App gemacht. Sie benötigen keine Benachrichtigungsdienst-Exitension.

1. Weg

Senden Sie den APS-Badge-Schlüssel mit Ihrer Nutzlast an den APN.
Dadurch wird die Anzahl der Ausweise entsprechend Ihrem Integer-Wert in Ihrer Auslastung aktualisiert. Ex.:

// 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. Weg

Sie können Ihren application.applicationState wechseln und Ihre Badges Count aktualisieren, wenn sich der applicationState in .background befindet. ABER Sie müssen jedoch darauf achten, dass Sie beim Senden an den APN e.x nicht den Badge Key-Parameter in Ihrer Benachrichtigungs-Payload festlegen. 

// Payload to APN as silent Push notification
{
    "aps": {
        "content-available": 1
    }
}

Behandeln Sie das Badge-Update entsprechend dem Anwendungsstatus

Hier ist mein Arbeitscode für die Aktualisierung der Ausweisanzahl ohne Ausweisschlüssel in der Payload für 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")

    }
}

Setzen Sie die Anzahl der Ausweise zurück

Vergessen Sie nicht, Ihre Badge-Zählung zurückzusetzen, wenn Ihre App wieder aktiv wird.

func applicationDidBecomeActive(_ application: UIApplication) {
    // reset badge count
    application.applicationIconBadgeNumber = 0
}
2
Gkiokan

Seit iOS 10 können Sie eine Benachrichtigungsdienst-Erweiterung für Ihre App entwickeln. Es wird vom System gestartet, wenn Sie eine Benachrichtigung erhalten, und Sie können eine gültige Nummer für den Ausweis berechnen und festlegen.

Sehen Sie sich die Dokumentation an: https://developer.Apple.com/documentation/usernotifications/unnotificationserviceextension

in APNs muss die Payload "content-available": 1 für die Anzahl der Aktualisierungs-Badges im Hintergrundmodus definieren

func application(_ application: UIApplication, didReceiveRemoteNotification 
   userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {


// increase badge count, but no need if you include content-available

application.applicationIconBadgeNumber = application.applicationIconBadgeNumber + 1

}

func applicationDidBecomeActive(_ application: UIApplication) {

// reset badge count

application.applicationIconBadgeNumber = 0

}

zum Beispiel 

"aps":{
    "alert":"Test",
    "sound":"default",
    "content-available":1

}
0
Prashant kumar
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    application.applicationIconBadgeNumber = 0;
    NSLog(@"userInfo %@",userInfo);

    for (id key in userInfo) {
        NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);
    }

    [application setApplicationIconBadgeNumber:[[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] intValue]];
    NSLog(@"Badge %d",[[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] intValue]);
}
0
suvi

Wie @rckoenes sagte, müssen Sie die Berechnung auf der Serverseite durchführen, aber woher wissen Sie, wann Sie den Wert der Ausweisnummer erhöhen, die Sie in der Nutzlast senden sollten?.

Wenn Sie die Anwendung starten, senden Sie eine Nachricht an Ihren Server, die besagt, dass die Anwendung gestartet wurde. Auf der Serverseite beginnen Sie also wieder mit badge = 0, und wenn keine Nachrichten vom Server empfangen werden, erhöhen Sie die Badge-Nummer mit jeder Push-Benachrichtigungsnutzlast. 

0
mustafa