Warum hatRegisterForRemoteNotificationsWithDeviceToken nicht aufgerufen?

86

Ich mache eine Anwendung, in der ich den Apple Push-Benachrichtigungsdienst implementieren möchte. Ich folge den schrittweisen Anweisungen in diesem Tutorial .

Trotzdem werden die Methoden nicht aufgerufen. Ich weiß nicht, was das Problem verursacht. Kann mir jemand helfen?

    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
        //NSString * token = [[NSString alloc] initWithData:deviceTokenencoding:NSUTF8StringEncoding];
        NSString *str = [NSString stringWithFormat:@"Device Token=%@",deviceToken];
        NSLog(@"Device Token:%@",str);

        //NSLog(@"Device token is called");
        //const void *devTokenBytes = [deviceToken bytes];
        //NSLog(@"Device Token");
    }

    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { 
        NSString *str = [NSString stringWithFormat: @"Error: %@", err];
        NSLog(@"Error:%@",str);    
    }
Muzammil
quelle
Es ist nicht erforderlich, anderen Code hinzuzufügen. Überprüfen Sie einfach den Link stackoverflow.com/a/39849892/3269536
jenish

Antworten:

72

Ich hatte das gleiche Problem: Anruf registerForRemoteNotificationTypes:weder application:didRegisterForRemoteNotificationsWithDeviceToken:noch aufgerufenapplication:didFailToRegisterForRemoteNotificationsWithError:

Ich habe dieses Problem schließlich mithilfe des technischen Hinweises TN2265 von Apple behoben .

Das habe ich getan:

Zunächst habe ich überprüft, ob ich mich tatsächlich korrekt für Push-Benachrichtigungen registriert habe , einschließlich der Überprüfung meines Bereitstellungsprofils für den Schlüssel "aps-environment" und der Codesignierung der .app-Datei selbst. Ich hatte alles richtig eingerichtet.

Ich musste dann Push-Benachrichtigungsstatusmeldungen in der Konsole debuggen (Sie müssen das Bereitstellungsprofil PersistentConnectionLogging.mobileconfig auf Ihrem Gerät installieren und neu starten . Siehe TN2265 unter "Push-Statusmeldungen beobachten"). Ich habe festgestellt, dass der apns-Prozess einen Timer startet und ein Mindestfeuerdatum berechnet, was mich vermuten ließ, dass die Bestätigungsnachricht für die Push-Benachrichtigung, die normalerweise an dieser Stelle angezeigt wird, von APNS unterdrückt wird, wie in TN2265 angegeben:

Zurücksetzen des Push-Benachrichtigungs-Berechtigungsalarms unter iOS

Wenn sich eine Push-fähige App zum ersten Mal für Push-Benachrichtigungen registriert, fragt iOS den Benutzer, ob er Benachrichtigungen für diese App erhalten möchte. Sobald der Benutzer auf diese Warnung reagiert hat, wird sie erst wieder angezeigt, wenn das Gerät wiederhergestellt oder die App mindestens einen Tag lang deinstalliert wurde.

Wenn Sie eine erstmalige Ausführung Ihrer App simulieren möchten, können Sie die App einen Tag lang deinstallieren lassen. Letzteres können Sie erreichen, ohne einen Tag zu warten, indem Sie die Systemuhr einen Tag oder länger vorwärts stellen, das Gerät vollständig ausschalten und dann wieder einschalten.

Also habe ich die App vom Gerät entfernt, dann das Datum des iPhones in den Einstellungen manuell geändert, das Gerät neu gestartet und die App neu installiert.

Beim nächsten Aufruf meines Codes registerForRemoteNotificationTypeswurden erwartungsgemäß Rückrufe empfangen.

Dies löste das Problem für mich. Ich hoffe es hilft.

100 Gramm
quelle
1
Der entscheidende Punkt für mich war, dass ich ein älteres Entwicklungszertifikat auf einem anderen Computer verwendete. Das Übertragen des neuesten Zertifikats vom Hauptentwicklungs-Laptop hat dieses Problem behoben.
Markus Rautopuro
3
Nach dem Aktivieren sind Push-Benachrichtigungen erforderlich, um die Bereitstellungsprofile erneut zu generieren.
Tony
3
Hallo! Obwohl dies ein alter Beitrag ist, habe ich herausgefunden, dass er manchmal behoben wird, wenn Sie alle Benachrichtigungseinstellungen der App ein- und ausschalten. Denn das letzte Mal, als ich mich erinnere, wurde didRegisterForRemoteNotificationsWithDeviceToken aufgerufen, dann war es plötzlich nicht mehr. Ich hoffe es hilft.
otakuProgrammer
1
Ich habe dies nur durch Hinzufügen eines weiteren Rücksetzschritts zum Laufen gebracht: 1. App löschen 2. Gerät zurücksetzen 3. Uhr weiterleiten 1+ Tage 4. Gerät WIEDER zurücksetzen 5. Jetzt installieren und es sollte die Push-Benachrichtigung
auslösen
Es ist auch wichtig sicherzustellen, dass Sie weder in Xcode noch auf dem Gerät selbst mehrere "gültige" Kopien desselben Entwicklungsbereitstellungsprofils haben. Möglicherweise haben Sie ein neues APN-Zertifikat erstellt und Ihr Bereitstellungsprofil nach Ablauf des vorherigen Zertifikats neu erstellt. Das alte Entwicklungsprofil ist weiterhin als Entwicklungsprofil gültig, reicht jedoch nicht aus, um APNs zu aktivieren. Sie sehen einen typischen Fehler bezüglich "Keine gültige APS-Berechtigung bla bla".
Jaredsinclair
66

In iOS 8 sind einige Methoden veraltet. Führen Sie die folgenden Schritte aus, um die Kompatibilität mit iOS 8 zu gewährleisten

1. Benachrichtigung registrieren

if([[UIDevice currentDevice] systemVersion].floatValue >= 8.0)
{
    UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];    
}
else
{
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound|UIRemoteNotificationTypeBadge)];
}

2. Fügen Sie neue 2 Methoden hinzu

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    //register to receive notifications
    [application registerForRemoteNotifications];
}

//For interactive notification only
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
{
    //handle the actions
    if ([identifier isEqualToString:@"declineAction"]){
    }
    else if ([identifier isEqualToString:@"answerAction"]){
    }
}

Hinweis: Oben sind in iOS 8 zusätzlich zu didRegisterForRemoteNotificationsWithDeviceTokenund zwei neue Methoden erforderlich. didReceiveRemoteNotificationAndernfalls wird die Delegatmethode nicht aufgerufen.

Siehe: Remote-Benachrichtigung iOS 8

Gemeinschaft
quelle
1
Sollten diese beiden neuen Methoden in Appdelegate.m verwendet werden?
Ethan Parker
- (nichtige) Anwendung: (UIApplication *) Anwendung didRegisterUserNotificationSettings: (UIUserNotificationSettings *) notificationSettings {// registrieren, um Benachrichtigungen zu erhalten [application registerForRemoteNotifications]; } Das Hinzufügen von Folgendem ist gefährlich, mein Telefon ist abgestürzt und ich kann es zu diesem Zeitpunkt noch nicht einmal auf die Werkseinstellungen zurücksetzen.
John
Dies ist wahrscheinlich die Antwort, nach der Sie suchen, wenn Sie hier landen. Seltsamerweise wurde der Delegierte heute früher angerufen, ohne dass ich eine dieser Methoden hinzufügte. Jetzt scheint es, als ob ich sie beide brauche.
Will
Meine App stürzt mit dieser Linie ab[application registerForRemoteNotifications];
Schmiede
26

In iOS 8 müssen Sie nicht nur den Push-Benachrichtigungszugriff anders anfordern, sondern auch anders registrieren.

Anfrage Zugang:

if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
    // iOS 8
    UIUserNotificationSettings* settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
} else {
    // iOS 7 or iOS 6
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
}

Registriertes Gerät handhaben:

// New in iOS 8
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    [application registerForRemoteNotifications];
}

// iOS 7 or iOS 6
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
    // Send token to server
}
Kyle Clegg
quelle
Extrem hilfreich. Ich konnte nicht herausfinden, warum meine Benachrichtigungen unterbrochen wurden.
GoldenJoe
4
Wie kann ich das Token in iOS 8 erhalten?
Yossi
@ Yossi es ist in der "Token" -Variable inapplication:didRegisterForRemoteNotificationsWithDeviceToken:
Kyle Clegg
meine App stürzt mit dieser Zeile ab [application registerForRemoteNotifications];
Schmiede
13

Beachten Sie, dass Remote-Benachrichtigungen im Simulator nicht unterstützt werden. Wenn Sie Ihre App im Simulator ausführen, didRegisterForRemoteNotificationsWithDeviceTokenwird sie daher nicht aufgerufen.

Eric
quelle
@hochl: Ich habe meine Antwort aktualisiert, damit sie die Frage genauer beantwortet.
Eric
1
Beachten Sie, dass didFailToRegisterForRemoteNotificationsWithError auch nicht aufgerufen wird. Tatsächlich wird keine Benachrichtigung aufgerufen, wenn Sie Push-Benachrichtigungen für Ihre App in den Einstellungen deaktivieren (ob auf dem Gerät oder im Simulator). Apple scheint dies nicht als Fehler zu betrachten. Stackoverflow.com/questions/9199935/…
Zack Morris
12

Stellen Sie sicher, dass Sie Ihren Code aufrufen (Aktualisierung gemäß den unterstützten Benachrichtigungsarten).

[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];

und das Bereitstellungsprofil ist APNS-fähig. Möglicherweise müssen Sie das Bereitstellungsprofil erneut herunterladen, nachdem Sie APNS aktiviert haben. Wenn Sie Probleme haben und Fehler erhalten, sollten Sie möglicherweise eine Entitlements.plist erstellen und den Schlüssel "aps-environment" mit dem Wert "development" oder "Production" hinzufügen, abhängig von der Art des Builds (normalerweise ist dieses Schlüssel-Wert-Paar im Bereitstellungsprofil enthalten, aber manchmal Xcode mit ihnen durcheinander bringen).

Lorenzo Bevilacqua
quelle
Hinweis: "und das Bereitstellungsprofil ist APNS-fähig." Klicken Sie oben in Ihrer Projektstruktur auf> Funktionen> Push-Benachrichtigungen sollten auf EIN gesetzt sein.
Trevorgrayson
6

Wenn die Bereitstellungsprofile zuvor zum Aktivieren und Konfigurieren des Apple Push Notification-Dienstes verwendet wurden, müssen Sie die Bereitstellungsprofile erneut herunterladen.

Löschen Sie Bereitstellungsprofile aus Xcode Organizer und vom iPhone / iPad. Gehe zu Settings -> General -> Profiles -> [Your provisioning] -> Remove.

Installieren Sie die neuen heruntergeladenen Bereitstellungsprofile. Bereinigen Sie dann das Projekt und führen Sie es über XCode aus. Jetzt didRegisterForRemoteNotificationsWithDeviceTokensollte gerufen werden.

Borislav Gizdov
quelle
Es funktioniert für mich. Wählen Sie einfach die Zertifizierung und Bereitstellung, bei der APNs für die App registriert wurden.
Lee
Ich habe alle Bereitstellungsprofile vom iPhone (ios9) gelöscht und dann, nachdem das Gerätetoken empfangen wurde. Verbringen Sie vier Stunden, um dies zu beheben (obwohl ich viel lerne). Vielen Dank
Shobhakar Tiwari
3

Ich habe einen Fehler gemacht und ein Implementierungsdetail übersehen, das mich hierher geführt hat. Ich habe versucht , Lust zu bekommen und den Benutzer für Push Notifications später in der Anwendung Onboarding - Prozess zu stellen, so dass ich meine hatte registerForRemoteNotificationTypes, didRegisterForRemoteNotificationsWithDeviceTokenund didFailToRegisterForRemoteNotificationsWithErroralle in einem benutzerdefinierten UIView.

UPDATE: Die didRegisterForRemoteNotificationsWithDeviceTokenund didFailToRegisterForRemoteNotificationsWithErrormüssen in der UIApplicationDelegate( YourAppDelegate.m) sein, um ausgelöst zu werden.

scheint jetzt offensichtlich, heh.

GraehamF
quelle
Ja, die Methoden müssen vorhanden sein AppDelegate. Ich kann nicht glauben, dass ich meine letzten Stunden mit dieser einfachen Antwort verschwendet habe
sogar Cheng
3

Stellen Sie sicher, dass Ihre Internetverbindung aktiviert ist. Ich habe Stunden gebraucht, um Arbeitsbenachrichtigungen wegen der Internetverbindung zu erhalten.

Rendel
quelle
3

Wenn Sie einer vorhandenen App-ID Push hinzugefügt haben, stellen Sie sicher, dass Sie Ihre Bereitstellungsprofile neu generieren. Wenn Sie dies nicht tun, weiß das Profil nicht, ob Sie die App-ID aktivieren können.

Michael Peterson
quelle
3

Versuchen Sie, dass es für mich funktioniert,

Erster Schritt

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Fügen Sie in der obigen Methode den folgenden Code hinzu

 UIApplication *application = [UIApplication sharedApplication];
 if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge
                                                                                     |UIUserNotificationTypeSound
                                                                                     |UIUserNotificationTypeAlert) categories:nil];
[application registerUserNotificationSettings:settings];
 } 
 else {
      UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
[application registerForRemoteNotificationTypes:myTypes];
     }

Zweiter Schritt

Fügen Sie den folgenden Code hinzu. Funktion

 #ifdef __IPHONE_8_0
   - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
   {
  //register to receive notifications
  [application registerForRemoteNotifications];
  }

 - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
  {
    //handle the actions
    if ([identifier isEqualToString:@"declineAction"]){
    }
   else if ([identifier isEqualToString:@"answerAction"]){
   }
}
 #endif

Sie erhalten das Gerät Token in der folgenden Funktion

 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 

Für eine detaillierte Antwort lesen Sie bitte diese

Hoffe das ist Hilfe für jemanden.

Jaywant Khedkar
quelle
2
-​(BOOL)application:(UIApplication​*)application didFinishLaunchingWithOptions:(NSDictionary​*)launchOptions​{​​​​ ​​​​ ​​​​//​Override​point​for​customization​after​application​launch.
​​​​//​Add​the​view​controller’s​view​to​the​window​and​display. ​​​​[window​addSubview:viewController.view]; ​​​​[window​makeKeyAndVisible];
NSLog(@”Registering for push notifications...”);
 [[UIApplication sharedApplication]
registerForRemoteNotificationTypes: (UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound)]; 
​​​​returnYES;
}


- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
}
NSString *str = [NSString stringWithFormat:@”Device Token=%@”,deviceToken];
NSLog(@”%@”, str);


- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
NSString *str = [NSString stringWithFormat: @”Error: %@”, err]; NSLog(@”%@”, str);
}


- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
}
for (id key in userInfo) { NSLog(@”key: %@, value: %@”, key, [userInfo objectForKey:key]);
}
Sachin Kumaram
quelle
2

Minimale Anforderung zum Abrufen des Geräte-Tokens:

Es ist nicht erforderlich, die App-ID, die Bereitstellung oder das Zertifikat usw. zu konfigurieren. Daher ist keine Codesignatur festgelegt, um die Delegatmethode didRegisterForRemoteNotificationsWithDeviceToken aufzurufen .

Ich habe gerade ein neues iOS-Projekt in Xcode 7 für die Einzelansicht mit Standardeinstellungen erstellt und eine zufällige Bundle-ID wie com.mycompany.pushtest angegeben, die nicht im Apple Dev Portal konfiguriert ist.

Mit dem folgenden Code erhalte ich mein Geräte-Token in der didRegisterForRemoteNotificationsWithDeviceToken-Methode auf meinem iPad mit Internetzugang zu WIFI. Mein Gerät ist angeschlossen und ich führe die App direkt von xcode aus aus und zeige die Werte in der xcode-Konsole an.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions   

{  
    if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])  
    {  
        UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound);  
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];  
        [application registerUserNotificationSettings:settings];  
        [application registerForRemoteNotifications];  
    }  
    else  
    {  
        // Register for Push Notifications, if running iOS version < 8  
        [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];  
    }  
    return YES;  
}  


- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"Error: %@", error.description);
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken: %@", deviceToken);
}

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    NSLog(@"NotificationSettings: %@", notificationSettings);
}
Zeeawan
quelle
1

Ich habe einen Punkt dazu. Kürzlich bin auch ich mit diesem Problem konfrontiert. Ich habe alles gemäß der Dokumentation getan, aber die Delegatenmethode hat nicht aufgerufen. Schließlich habe ich einen Beitrag gesehen, der dieses Problem mit dem Netzwerk besagt. Dann habe ich das Netzwerk geändert und es funktioniert einwandfrei. Achten Sie also auch auf das Netzwerk, da nur wenige Netzwerke den APNS blockieren können.

SURESH SANKE
quelle
1

Nachdem Sie die nervigsten 3 Stunden verschwendet haben, gehen Sie wie folgt vor, um das Problem zu beheben:

  1. Löschen Sie die App

  2. Setzen Sie das Gerät zurück

  3. Führe es nochmals aus

Es hat einfach funktioniert

ozd
quelle
0

Dies ist mir passiert, weil ich alle Daten auf dem Telefon zurückgesetzt und gelöscht habe (wollte, dass ein Entwickler-Telefon verwendet wird). Dies verhinderte, dass APN nach dem erneuten Einrichten des Telefons überhaupt eine Verbindung herstellen konnte.

Ich habe alle möglichen Dinge ausprobiert, aber das einzige, was das Problem behoben hat, war, das Telefon so einzurichten, dass es mit einem Mobilfunkanbieter unter einer neuen SIM-Karte zusammenarbeitet.

Dieser Link bietet weitere Hinweise dazu, was möglicherweise passiert ist: https://developer.apple.com/library/ios/technotes/tn2265/_index.html

Es heißt, dass APN versucht, eine bevorzugte Verbindung über Träger / Türme im Gegensatz zu WLAN herzustellen. Vielleicht lag das Problem auch daran, dass der Router Port 5223 im WLAN-Netzwerk blockierte, aber ich bezweifle es, weil es am Vortag vor dem globalen Zurücksetzen einwandfrei funktioniert hat.

Phyllis Sutherland
quelle
0

Für mich ging es darum, die Build-Einstellungen und den Abschnitt für die Codesignatur aufzurufen und die Identität und das Bereitstellungsprofil für die Codesignatur manuell auszuwählen. Anscheinend hat die automatische Einstellung nicht die richtige aufgenommen und daher war die App nicht richtig autorisiert.

Diego Rebosio
quelle
0

Wenn heruntergefahren, Push-Nachricht der App,

appdidRegisterForRemoteNotificationsWithDeviceToken wird niemals aufgerufen

libai
quelle
0

Vergessen Sie auch nicht, den Systemstatus unter Apple https://developer.apple.com/system-status/ zu überprüfen .

Ich hatte alle oben aufgeführten Lösungen ausprobiert, aber am Ende lag der Fehler darin, dass der APNS-Dienst nicht verfügbar war! Am nächsten Tag funktionierte alles wieder wie erwartet.

Außerdem haben Sie einen Tippfehler in Ihrer Rückrufmethode:

- (void)application:(UIApplication *)appdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

Wie Rupesh betonte, lautet der korrekte Methodenname:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

Das ist wahrscheinlich der Grund, warum Sie den Token in Ihrem Fall nie erhalten haben!

Brett
quelle
Eigentlich ist der Methodenname falsch, es sollte sein - (void) application: (UIApplication *) application didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken Zwischen den Parametern ist ein Leerzeichen
Rupesh
Vielen Dank, habe die Antwort aktualisiert, um Ihren Kommentar aufzunehmen. Ich bin mir ziemlich sicher, dass dies die Lösung für das OP-Problem ist, aber wir werden es vielleicht nie herausfinden!
Brett
0

Sie müssen die Methode registerForNotifications von didFinishLaunchingWithOptions aus aufrufen.

 func registerForNotifications(){

        if #available(iOS 10.0, *) {

            let center = UNUserNotificationCenter.current()
            center.delegate = self
            center.requestAuthorization(options:[.alert,.sound,.badge]) { (granted, error) in
                if granted{
                    UIApplication.shared.registerForRemoteNotifications()
                }else{

                    print("Notification permission denied.")

                }
            }

        } else {

            // For iOS 9 and Below
            let type: UIUserNotificationType = [.alert,.sound,.badge];
            let setting = UIUserNotificationSettings(types: type, categories: nil);
            UIApplication.shared.registerUserNotificationSettings(setting);
            UIApplication.shared.registerForRemoteNotifications()
        }
    }

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

        let token = String(format: "%@", deviceToken as CVarArg).trimmingCharacters(in: CharacterSet(charactersIn: "<>")).replacingOccurrences(of: " ", with: "")
        print(token)

    }


extension AppDelegate : UNUserNotificationCenterDelegate{

    @available(iOS 10.0, *)

    func userNotificationCenter(_ center: UNUserNotificationCenter,  willPresent notification: UNNotification, withCompletionHandler   completionHandler: @escaping (_ options:   UNNotificationPresentationOptions) -> Void) {
        print("Handle push from foreground”)

        let info = ((notification.request.content.userInfo as NSDictionary).value(forKey: "aps") as! NSDictionary)
        if let type = info.value(forKey: "type") as? Int{
            if type == 0 {  

         // notification received ,Handle your notification here

            }
        }
    }

    @available(iOS 10.0, *)

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

        print("Handle push from background or closed")

        let info = ((response.notification.request.content.userInfo as NSDictionary).value(forKey: "aps") as! NSDictionary)
        if let type = info.value(forKey: "type") as? Int{
            if type == 0 {   

            // notification received ,Handle your notification here
            }
        }
    }
}
Ved Rauniyar
quelle
0

Ich hatte ein anderes Problem, bei dem meine Push-Benachrichtigungs-Rückrufe von den von mir aufgenommenen Bibliotheken von Drittanbietern, nämlich Firebase, entführt wurden. Diese Bibliotheken verwenden Push-Benachrichtigungs-Rückrufmethoden, um die Rückrufe abzurufen.

Hoffe das hilft jemandem.

Jarora
quelle