didRegisterForRemoteNotificationsWithDeviceToken non appelé dans ios8, mais didRegister … Settings est

J'ai suivi ce thread , mais la méthode didRegisterForRemoteNotificationsWithDeviceToken n'est toujours pas appelée:

la documentation dit:

Après avoir appelé la méthode registerForRemoteNotifications de l'object UIApplication, l'application appelle cette méthode lorsque l'logging de périphérique se termine correctement

didRegisterUser apparaît bien, mais did register notif pas did register notif .

Voici mon code dans AppDelegate (la version de l'application est 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 } 

J'ai aussi le mode arrière-plan -> notification à distance dans le info.plist.

Votre code semble être correct. Comme une amélioration mineure, vous pouvez écrire votre méthode didRegisterUserNotificationSettings comme ceci:

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

Il peut y avoir un problème de configuration qui provoque un logging APN échoué.

  1. Assurez-vous que votre profil d'approvisionnement contient l'input aps-environment

  2. Assurez-vous que vous avez un identifiant d'application unique (une string sans "*") définie dans votre profil d'approvisionnement. Vous devez également utiliser cet identifiant exact en tant qu '"identifiant de regroupement" dans votre Info.plist

  3. Vous avez peut-être décliné l'option "Push-Feature" après l'installation initiale – dans ce cas, vous ne verrez plus jamais l'alerte in-app-push-again et vous devrez activer à nouveau Push dans l'application settings.

  4. Essayez un autre appareil.

Après une longue fouille, j'ai découvert que le 19 juillet 2016, suite à une erreur ou une mise à jour à la fin d'Apple, la méthode didRegisterForRemoteNotificationsWithDeviceToken ne serait pas appelée même si toutes les conditions comme la connection Internet, Device et les methods utilisées sont parfaites.

Référez-vous à ce lien pour la confirmation https://forums.developer.apple.com/thread/52224

Pour vérifier s'il vous plaît jeter un oeil dans vos autres applications aussi. J'avais perdu mes quelques heures mais j'espère que cela aidera quelqu'un. Merci.

Pour le 19 juillet 2016: –

Selon le formulaire Apple Developer , il y a un problème concernant Sandbox APNS … donc il peut y avoir un problème du côté Apple, c'est pourquoi les delegates aiment l' application:didRegisterForRemoteNotificationsWithDeviceToken: et l' application:didFailToRegisterForRemoteNotificationsWithError: n'est pas appelée ..

Pour vérifier l'état actuel de APNS Sandbox ce lien … Maintenant, selon le statut APNS Sandbox fonctionne bien et son normal … donc peut-être il y a un autre bug de côté Apple

Alors ne vous inquiétez pas si vos methods sont parfaites et que les certificates sont valides. C'est juste un problème du côté d'Apple .. dès que le problème a été résolu, vos methods fonctionnent parfaitement (si tout va bien de votre côté).

Notez que la production fonctionne correctement. Le problème concerne uniquement les APNS Sandbox.

J'ai eu ce problème et finalement trouvé la note dans le site Web de développeur Apple et résolu ce problème:

Enregistrement, planification et gestion des notifications user

iOS Note dans la section: "Enregistrement des notifications à distance:

iOS Remarque: Si une connection cellulaire ou Wi-Fi n'est pas disponible, ni l'application: didRegisterForRemoteNotificationsWithDeviceToken: méthode, ni l'application: didFailToRegisterForRemoteNotificationsWithError: méthode est appelée. Pour les connections Wi-Fi, cela se produit parfois lorsque l'appareil ne peut pas se connecter avec des APN sur le port 5223. Dans ce cas, l'user peut passer à un autre réseau Wi-Fi qui ne bloque pas ce port ou, sur un iPhone ou iPad jusqu'à ce que le service de données cellulaires devienne disponible. Dans les deux cas, le périphérique doit pouvoir établir la connection, puis l'une des methods de délégation est appelée.

Mon iPhone connecté uniquement avec le Wifi, redémarrer l'iPhone et se reconnecter au WiFi AP a résolu ce problème.

Dans mon cas, après iOS 9.3 je crois. Si j'ai utilisé Localytics, le didRegisterForRemoteNotificationsWithDeviceToken ne sera pas appelé. Je dois supprimer ceci de mon code (dans ApplicationDidFinishLaunchingWithOption) [Localytics autoIntegrate: @ "xxxxx" launchOptions: launchOptions];

S'il vous plaît append le code ci-dessous, cela fonctionne pour moi,

  #ifdef __IPHONE_8_0 - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { //register to receive notifications [application registerForRemoteNotifications]; } - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSSsortingng *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler { //handle the actions if ([identifier isEqualToSsortingng:@"declineAction"]){ } else if ([identifier isEqualToSsortingng:@"answerAction"]){ } } #endif 

Vous obtiendrez le Token de l'appareil dans la méthode ci-dessous,

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

pour les détails s'il vous plaît se référer Détails réponse

J'espère que c'est de l'aide pour quelqu'un.

XCode 8.3.1 et suivantes

Après avoir essayé toutes les options ci-dessus, si la méthode déléguée n'est toujours pas appelée, assurez-vous dans le projet,

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

Honte sur moi!! O oublié l'étape la plus fondamentale:

entrez la description de l'image ici

Après avoir suivi toutes les instructions de traitement de process de certificates d'ici: https://www.pluralsight.com/guides/swift/creating-ios-rich-push-notifications

L'outil d'envoi de notifications push était: https://github.com/noodlewerk/NWPusher

Que la force soit avec toi!