web-dev-qa-db-de.com

didRegisterForRemoteNotificationsWithDeviceToken wurde in ios8 nicht aufgerufen, aber didRegister ...

Ich folgte diesem Thread , aber die Methode didRegisterForRemoteNotificationsWithDeviceToken wird immer noch nicht aufgerufen:

die Dokumentation sagt:

Nachdem Sie die registerForRemoteNotifications-Methode von .__ aufgerufen haben. UIApplication-Objekt, ruft die App diese Methode auf, wenn das Gerät Registrierung erfolgreich abgeschlossen

didRegisterUser erscheint gut, aber nicht did register notif.

Hier ist mein Code in AppDelegate (die App-Version ist 8.1):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //register notif
    UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
                                                    UIUserNotificationTypeBadge |
                                                    UIUserNotificationTypeSound);
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];
    [application registerUserNotificationSettings:settings];


    return YES;
}

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

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"error here : %@", error);//not called
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    /*
    // Store the deviceToken in the current installation and save it to Parse.
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    [currentInstallation setDeviceTokenFromData:deviceToken];
    currentInstallation.channels = @[ @"global" ];
    [currentInstallation saveInBackground];
     */
    NSLog(@"did register notif");//not called
}

Ich habe auch Hintergrundmodus -> Remote-Benachrichtigung in der info.plist.

19
Paul

Ihr Code scheint richtig zu sein. Als kleine Verbesserung können Sie Ihre didRegisterUserNotificationSettings-Methode folgendermaßen schreiben:

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    if (notificationSettings.types != UIUserNotificationTypeNone) {
        NSLog(@"didRegisterUser");
        [application registerForRemoteNotifications];
    }
}

Möglicherweise liegt ein Konfigurationsproblem vor, das eine fehlgeschlagene APN-Registrierung verursacht.

  1. Stellen Sie sicher, dass Ihr Bereitstellungsprofil den Eintrag für die APS-Umgebung enthält

  2. Stellen Sie sicher, dass Sie eine eindeutige App-Kennung (eine Zeichenfolge ohne "*") in Ihrem Bereitstellungsprofil festgelegt haben. Sie sollten diese genaue Kennung auch als "Bündelkennung" in Ihrer Info.plist verwenden

  3. Möglicherweise haben Sie das Push-Feature nach der Erstinstallation abgelehnt. In diesem Fall wird der In-App-Push-Alarm nie mehr angezeigt und Sie müssen Push erneut in der Einstellungs-App aktivieren.

  4. Versuchen Sie ein anderes Gerät.

16
Sven Driemecker

Nach einer langen Ausgrabung fand ich heraus, dass die Methode didRegisterForRemoteNotificationsWithDeviceToken am 19. Juli 2016aufgrund einiger Fehler oder Aktualisierungen bei Apples Ende nicht aufgerufen werden würde, selbst wenn alle Bedingungen wie Internetverbindung, Gerät und die verwendeten Methoden perfekt sind .

Siehe diesen Link zur Bestätigung https://forums.developer.Apple.com/thread/52224

Zur Überprüfung schauen Sie sich bitte auch Ihre anderen Apps an. Ich hatte meine Stunden verschwendet, aber ich hoffe, es hilft jemandem.

27
Kunal Gupta

Für den 19. Juli 2016: - 

Im Apple Developer-Formular gibt es ein Problem bezüglich Sandbox APNS down ... daher kann es ein Problem von Apple geben, weshalb Delegierte wie application:didRegisterForRemoteNotificationsWithDeviceToken: und application:didFailToRegisterForRemoteNotificationsWithError: nicht aufgerufen werden.

Zum Überprüfen des aktuellen Status von APNS Sandbox diesem Link ... Inzwischen funktioniert der Status von APNS Sandbox einwandfrei und ist normal ... also kann es einen anderen Fehler von Apple geben

Machen Sie sich also keine Sorgen, ob Ihre Methoden perfekt sind und Zertifikate gültig sind. Dies ist nur ein Problem von Apple. Sobald das Problem gelöst ist, funktionieren Ihre Methoden perfekt (wenn alles in Ordnung ist).

Beachten Sie, dass die Produktion einwandfrei funktioniert. Das Problem betrifft nur Sandbox APNS.

24
EI Captain v2.0

Ich hatte dieses Problem und fand schließlich die Notiz auf der Apple Developer-Website und löste dieses Problem:

Registrieren, Planen und Verwalten von Benutzerbenachrichtigungen

iOS-Hinweis im Abschnitt: "Registrieren für Remote-Benachrichtigungen:

iOS Hinweis: Wenn keine Mobilfunk- oder Wi-Fi-Verbindung verfügbar ist, wird weder die application: didRegisterForRemoteNotificationsWithDeviceToken: -Methode noch die application: didFailToRegisterForRemoteNotificationsWithError: -Methode aufgerufen. Bei Wi-Fi-Verbindungen tritt dies manchmal auf, wenn das Gerät über Port 5223 keine Verbindung zu APNs herstellen kann. In diesem Fall kann der Benutzer zu einem anderen Wi-Fi-Netzwerk wechseln, das diesen Port nicht blockiert, oder bei einem iPhone oder iPad warten bis der zellulare Datendienst verfügbar wird. In beiden Fällen sollte das Gerät die Verbindung herstellen können, und dann wird eine der Delegierungsmethoden aufgerufen.

Mein iPhone ist nur mit WLAN verbunden, startet das iPhone neu und stellt die Verbindung zum WLAN-AP wieder her. Dieses Problem wurde behoben.

13
Homer Wang

XCode 8.3.1 weiter

Wenn Sie alle oben genannten Optionen ausprobiert haben und die Delegat-Methode immer noch nicht aufgerufen wird, stellen Sie sicher, dass im Projekt

under 'Capabilities', (next to General), 
 - Push Notifications option is turned ON`
- and under Background Modes, Remote Notifications is turned ON
5
Naishta

Schande über mich!! O vergaß den grundlegendsten Schritt:

 enter image description here

Nachdem Sie alle Zertifikate von hier aus befolgt haben, gehen Sie folgendermaßen vor: https://www.pluralsight.com/guides/Swift/creating-ios-rich-Push-notifications

Das Tool zum Senden von Push-Benachrichtigungen war: https://github.com/noodlewerk/NWPusher

Möge die Macht mit dir sein!

In meinem Fall glaube ich nach iOS 9.3. Wenn ich Localytics verwendet habe, wird didRegisterForRemoteNotificationsWithDeviceToken nicht aufgerufen. Ich muss das aus meinem Code entfernen (in ApplicationDidFinishLaunchingWithOption) [Localytics autoIntegrate: @ "xxxxx" launchOptions: launchOptions];

2
Kong Hantrakool

Ok, Leute, ich habe gerade elf Stunden damit verbracht, dieses Ding zu debuggen, also hoffentlich wird diese Antwort jemandem helfen.

Wenn ALLES in ähnlichen Threads richtig eingerichtet ist und Google Firebase Analytics integriert ist und die didRegisterForRemoteNotificationsWithDeviceToken -Methode immer noch nicht aufgerufen wird, kann dies daran liegen, dass sie standardmäßig in Google Firebase eingeblendet wird. Aus irgendeinem seltsamen Grund kehrt FIR nicht zur ursprünglichen Methode zurück, nachdem Ihr Token an Google gesendet wurde. Um es zu fixieren 

    FirebaseAppDelegateProxyEnabled to NO (BOOL)

in Ihrer Info.plist.

2

In meinem Fall geschah dies, weil ich den gesamten Geräteverkehr durch Charles überwies. Durch das Entfernen wurde das Problem behoben und der didRegister-Rückruf wurde angezeigt.

2
rounak

Für mich lief die App auf dem Simulator. Für Simulatoren wird kein Push-Token generiert. Daher habe ich didFailToRegisterForRemoteNotificationsWithError anstelle von didRegisterForRemoteNotificationsWithDeviceToken eingegeben.

0
Luda

Bitte fügen Sie unten den Code hinzu, es funktioniert für mich,

 #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äte-Token in der unten beschriebenen Methode.

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

für Details verweisen wir auf Details Antwort

Hoffe, das ist eine Hilfe für jemanden.

0
Jaywant Khedkar