J'ai suivi ce fil , mais la méthode didRegisterForRemoteNotificationsWithDeviceToken
n'est toujours pas appelée:
la documentation dit:
Après avoir appelé la méthode registerForRemoteNotifications du fichier Objet UIApplication, l'application appelle cette méthode lorsque device l'inscription se termine avec succès
didRegisterUser
apparaît bien, mais 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 de fond -> notification à distance dans info.plist.
Votre code semble être correct. Comme amélioration mineure, vous pourriez écrire votre méthode didRegisterUserNotificationSettings de la manière suivante:
- (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 entraîne l'échec de l'enregistrement d'un APN.
Assurez-vous que votre profil d'approvisionnement contient l'entrée aps-environment
Assurez-vous que vous avez un identifiant d'application unique (une chaîne sans aucun "*") défini dans votre profil d'approvisionnement. Vous devriez également utiliser cet identifiant exact comme "identifiant de paquet" dans votre Info.plist
Peut-être avez-vous décliné la fonctionnalité Push après l'installation initiale; dans ce cas, vous ne verrez plus jamais l'alerte in-app et vous devrez réactiver l'application Push dans les paramètres.
Essayez un autre appareil.
Après une longue fouille, j'ai constaté que le 19 juillet 2016 en raison d'une erreur ou d'une mise à jour de la part d'Apple, la méthode didRegisterForRemoteNotificationsWithDeviceToken ne serait pas appelée, même si toutes les conditions, telles que connexion Internet, Appareil et les méthodes utilisées étaient parfaites.
Veuillez vous référer à ce lien pour 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 mon plusieurs heures mais espère que cela aide quelqu'un . Merci.
Pour le 19 juillet 2016: -
Selon Formulaire développeur Apple , il existe un problème concernant Sandbox APNS
down ... il peut donc y avoir un problème du côté Apple, c'est pourquoi les délégués comme application:didRegisterForRemoteNotificationsWithDeviceToken:
et application:didFailToRegisterForRemoteNotificationsWithError:
ne s'appellent pas ..
Pour vérifier l’état actuel de APNS Sandbox ce lien ... A présent, en fonction de son statut, APNS Sandbox fonctionne correctement et reste normal ... c’est peut-être un autre bogue du côté Apple
Alors, ne vous inquiétez pas si vos méthodes sont parfaites et les certificats valides. Ceci est juste un problème du côté Apple .. dès que le problème est résolu, vos méthodes fonctionnent parfaitement (si tout va bien de votre côté).
Notez que la production fonctionne bien .. donc le problème concerne uniquement Sandbox APNS.
J'avais ce problème et j'ai finalement trouvé la note sur le site Web du développeur Apple et résolu ce problème:
Enregistrement, planification et gestion des notifications utilisateur
note iOS dans la section: "Inscription aux notifications à distance:
iOS Remarque: Si aucune connexion cellulaire ou Wi-Fi n'est disponible, ni la méthode application: didRegisterForRemoteNotificationsWithDeviceToken: ni l'application: didFailToRegisterForRemoteNotificationsWithError: la méthode n'est appelée. Pour les connexions Wi-Fi, cela se produit parfois lorsque l'appareil ne peut pas se connecter avec des APN via le port 5223. Si cela se produit, l'utilisateur peut passer à un autre réseau Wi-Fi qui ne bloque pas ce port ou, sur un iPhone ou un iPad, attendre jusqu'à ce que le service de données cellulaires soit disponible. Dans les deux cas, le périphérique doit pouvoir établir la connexion, puis l'une des méthodes de délégation est appelée.
Mon iPhone connecté uniquement par Wi-Fi, redémarrez l'iPhone et reconnectez-vous au réseau Wi-Fi. Ce problème a été résolu.
XCode 8.3.1 et après
Après avoir essayé toutes les options ci-dessus, si la méthode delegate n’est toujours pas appelée, assurez-vous que, 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:
Après avoir suivi toutes les instructions relatives au traitement des certificats à partir 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!
Dans mon cas, après iOS 9.3, je crois. Si j'ai utilisé Localytics, didRegisterForRemoteNotificationsWithDeviceToken ne sera pas appelé. Je dois supprimer cela de mon code (dans ApplicationDidFinishLaunchingWithOption) [Localytics autoIntegrate: @ "xxxxx" launchOptions: launchOptions];
Ok, les gars, je viens de passer 11 heures consécutives à déboguer ce problème, alors espérons-le, cette réponse aidera quelqu'un.
Si tout est dit dans des threads similaires, configurez-le correctement et intégrez les analyses de Google Firebase, et didRegisterForRemoteNotificationsWithDeviceToken N'est pas encore appelé, cela est peut-être dû au fait que Google Firebase l'utilise par défaut. Pour une raison étrange, FIR ne retourne pas à la méthode d'origine après l'envoi de votre jeton à Google. Pour le réparer
FirebaseAppDelegateProxyEnabled to NO (BOOL)
dans votre Info.plist.
Dans mon cas, cela se passait parce que je mandatais tout le trafic de périphérique par l'intermédiaire de Charles. Le fait de supprimer cela a résolu le problème et m'a donné le rappel didRegister.
Pour moi, il exécutait l'application sur le simulateur. Le jeton Push n’est pas généré pour les simulateurs et j’ai donc entré didFailToRegisterForRemoteNotificationsWithError
au lieu de didRegisterForRemoteNotificationsWithDeviceToken
S'il vous plaît ajouter 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:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
{
//handle the actions
if ([identifier isEqualToString:@"declineAction"]){
}
else if ([identifier isEqualToString:@"answerAction"]){
}
}
#endif
Vous obtiendrez un jeton d'appareil selon la méthode ci-dessous,
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
pour plus de détails s'il vous plaît se référer Détails Réponse
J'espère que c'est une aide pour quelqu'un.