APN не работает в iOS 8.0 и более поздних версиях с использованием UIUserNotificationSettings

На самом деле я разрабатываю приложение для iPhone и iPad.

Я внедряю APN, и это работает для iOS ‹ 8.0. В поисках в Stackoverflow я нашел много вопросов об этом и способе реализации APN для iOS 8.0 и более поздних версий, и я просто следую этим шагам.

Мой код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [self registerForRemoteNotification];
  return YES;
}

- (void)registerForRemoteNotification 
{
  if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {

    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:
                                        UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
  } else {
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
  }
}

#ifdef __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
   //register to receive notifications
   [application registerForRemoteNotifications];
   NSLog(@"Active notifications: %@", [[UIApplication sharedApplication] currentUserNotificationSettings]);
}
#endif

Когда я проверяю активные уведомления, он возвращает мне «UIUserNotificationSettings: 0x156c03e0; типы: (нет);» и я не понимаю, почему, и журнал все еще показывает мне «Попытка пометить значок приложения, но не получил разрешения от пользователя пометить приложение».


person origds    schedule 30.10.2014    source источник


Ответы (1)


Вам не хватает кода строки для iOS8:

[[UIApplication sharedApplication] registerForRemoteNotifications];

Как это:

if ([application respondsToSelector: selector (registerUserNotificationSettings :)]) {
      UIUserNotificationSettings * settings = [UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound
                                                                               categories: nil ];
       [[UIApplication sharedApplication] registerUserNotificationSettings: settings];
       [[UIApplication sharedApplication] registerForRemoteNotifications];
   } else {
       [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
        UIRemoteNotificationTypeBadge |
        UIRemoteNotificationTypeAlert |
        UIRemoteNotificationTypeSound];

   }
person TonyMkenu    schedule 31.10.2014
comment
Спасибо @TonyMkenu, я собираюсь изменить его, но я нашел свою ошибку, у приложения были отключены разрешения для уведомлений в устройстве. :( это была моя вина - person origds; 31.10.2014
comment
в iOS8 вы ДОЛЖНЫ добавить эту строку (registerForRemoteNotifications), если хотите получать уведомления :) - person TonyMkenu; 01.11.2014