J'utilise actuellement Xcode6 beta (première version). En utilisant parse.com, j'essaie d'implémenter les notifications Push. Dans mon délégué app, j'ai
[application registerForRemoteNotifications];
Lorsque je l'exécute sur mon iPhone beta ios8, l'application ne me demande pas si je souhaite activer les notifications Push, et le application:didRegisterForRemoteNotificationsWithDeviceToken:
correspondant n'est jamais appelé. Cependant, lorsque j'ai essayé de l'exécuter sur un iPhone ios7, l'application s'est bloquée et j'ai reçu une erreur unrecognized selector
pour la méthode registerForRemoteNotifications
.
Ensuite, j'ai essayé de l'exécuter sur une version précédente de Xcode (version 5.0), mais j'ai reçu l'erreur de compilation no visible @interface declares registerForRemoteNotifications
.
Je suppose que cette erreur a à voir avec des bugs liés à la transition vers iOS 8, mais je ne sais pas comment résoudre ce problème.
Vous saurez comment faire cela.
Premier:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
ajouter un code comme celui-ci
#ifdef __IPHONE_8_0
//Right, that is the point
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound) categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
#else
//register to receive notifications
UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];
#endif
Seconde:
Ajouter cette fonction
#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
Et vous pouvez obtenir le deviceToken dans
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
si cela ne fonctionne toujours pas, utilisez cette fonction et NSLog leerror
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
Quelques observations:
tester la présence de sélecteurs comme dans ce code:
func registerForPushForiOS7AndAbove(){
UIApplication.sharedApplication()
let application = UIApplication.sharedApplication()
if application.respondsToSelector(Selector("registerUserNotificationSettings:")) {
let notifSettings = UIUserNotificationSettings(forTypes: .Sound | .Alert | .Badge,
categories: nil)
application.registerUserNotificationSettings(notifSettings)
application.registerForRemoteNotifications()
}
else{
application.registerForRemoteNotificationTypes( .Sound | .Alert | .Badge )
}
}
(ne manquez pas UIBackgroundModes dans PList .. peut être fait dans Capabilities)
Utilisez simplement cet extrait de code pour vous inscrire aux notifications dans iOS 8:
UIUserNotificationSettings *settings =
[UIUserNotificationSettings
settingsForTypes: (UIUserNotificationTypeBadge |
UIUserNotificationTypeSound |
UIUserNotificationTypeAlert)
categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
Utilisez UIUserNotificationType
au lieu de UIRemoteNotificationType
!
Dans iOS 8, le système ne demandera pas à l'utilisateur d'autoriser votre application à envoyer des notifications Push (à distance). Il est autorisé par défaut.
L'utilisateur peut choisir de ne pas autoriser les notifications de votre application sur Paramètres> Votre application> Notifications> Autoriser les notifications .
La méthode registerForRemoteNotifications
est disponible à partir de iOS8.
La méthode déléguée application:didRegisterForRemoteNotificationsWithDeviceToken:
est appelée uniquement lorsque l'enregistrement est réussi. En cas d'échec, elle appelle la méthode application:didFailToRegisterForRemoteNotificationsWithError:
.
Pour plus d'informations, consultez: UIApplication Class reference
Vérifiez également que la notification est activée pour l'application Settings -> Notifications -> YourApp -> Enable_Notifications
Selon la documentation, aucun des rappels ne se produira jusqu'à ce que le périphérique ait une connexion persistante avec le serveur Push. Alors S'il n'y a pas de connexion Wi-Fi ou de données disponible, les rappels ne le seront pas arriver - et Apple ne considère pas cela comme une condition d'erreur. seules les erreurs pouvant causer le didFail ... callback est un problème incorrect d'autorisations de certificat/d'application (problème de développement .__) ou d'autorisations refusées par l'utilisateur.
Veuillez passer par Guide de programmation des notifications push