web-dev-qa-db-fra.com

Création pour iOS si registerForRemoteNotificationTypes: n'est pas pris en charge dans iOS 8.0 et versions ultérieures

S'il y a des changements de rupture dans la façon dont les appareils s'enregistrent pour les notifications, et nous ne pouvons plus utiliser registerForRemoteNotificationTypes: comment pouvons-nous créer une nouvelle version de l'application pour prendre en charge iOS 8 si nous ne pouvons pas utiliser Xcode 6 beta? Devrons-nous construire et soumettre le jour où Xcode 6 GM est publiée pour que nos utilisateurs continuent à recevoir des notifications Push?

18
Jason Hocker

iOS 8 a modifié l'enregistrement des notifications. Vous devez donc vérifier la version de l'appareil, puis vous devez enregistrer les paramètres de notification (veuillez vérifier le lien this ). J'essaie ce code sur Xcode 6 et son a fonctionné pour moi.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
        {
            [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
            [[UIApplication sharedApplication] registerForRemoteNotifications];
        }
        else
        {
            [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
             (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
        }

     return YES;
}
50
Raşit ERASLAN

Vous voudrez peut-être envisager d'utiliser respondsToSelector plutôt que de vérifier la version du système:

if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]){
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
}
else{
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
}
17
alex da franca
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
#else
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
#endif
11
Muhammad Adil

Selon Apple documentation registerForRemoteNotificationTypes: est déconseillé dans iOS 8 à la place, vous pouvez utiliser registerForRemoteNotifications et registerUserNotificationSettings:.

Xcode 6 beta et iOS 8 beta sont des logiciels de pré-version. Les versions bêta sont uniquement destinées au développement et aux tests. Les nouvelles applications et mises à jour d'applications doivent être créées avec les versions de sortie de Xcode et iOS pour être soumises à l'App Store.

3
VoidStack
if ([[[ UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
  [[UIApplication sharedApplication]registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];

  [[UIApplication sharedApplication] registerForRemoteNotifications];
}
else
{
  [[UIApplication sharedApplication] registerForRemoteNotificationTypes(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
}
3
Hardik Bar

Vous pouvez l'utiliser,

if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)]) 
    {
        // for iOS 8
        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];

        [application registerForRemoteNotifications];
    }
    else
    {
        // for iOS < 8
        [application registerForRemoteNotificationTypes:
         (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
    }

    // RESET THE BADGE COUNT 
    application.applicationIconBadgeNumber = 0;
1
Neenu

écrire ce code dans la fonction AppDelegate didFinishLaunchingWithOptions

 if([[UIApplication sharedApplication] respondsToSelector:@selector(registerForRemoteNotifications)]) {
UIUserNotificationType types = UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge;
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
[[UIApplication sharedApplication] registerForRemoteNotifications];
 }
        else {
UIRemoteNotificationType types = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:types];
  }    [self.window makeKeyAndVisible];
return YES;
0
amit gupta