Подтвердить что ты не робот

Создание для iOS, если registerForRemoteNotificationTypes: не поддерживается в iOS 8.0 и более поздних версиях

Если произошли изменения в том, как регистрируются устройства для уведомлений, и мы больше не можем использовать registerForRemoteNotificationTypes: как мы можем создать новую версию приложения для поддержки iOS 8, если мы не сможем использовать Xcode 6 beta? Должны ли мы создать и представить день, когда версия Xcode 6 GM будет выпущена для наших пользователей, чтобы продолжать получать push-уведомления?

4b9b3361

Ответ 1

iOS 8 изменила регистрацию уведомлений. Поэтому вам нужно проверить версию устройства, а затем вам нужно зарегистрировать настройки уведомлений (пожалуйста, проверьте эту ссылку.) Я пробую этот код на Xcode 6, и он работал у меня.

- (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;
}

Ответ 2

Возможно, вы захотите использовать responsesToSelector вместо проверки версии системы:

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)];
}

Ответ 3

#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

Ответ 4

Согласно документации Apple registerForRemoteNotificationTypes: устарел в iOS 8, вместо этого вы можете использовать registerForRemoteNotifications и registerUserNotificationSettings:.

Xcode 6 beta и iOS 8 beta - это предварительная версия softwar. Бета-версии предназначены только для разработки и тестирования. Новые приложения и обновления приложений должны быть созданы с версиями Xcode и iOS для отправки в App Store.

Ответ 5

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)];
}

Ответ 6

Вы можете использовать это,

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;

Ответ 7

напишите этот код в функции 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;