Токен устройства IOS 8 не возвращается при отключении настройки уведомлений

Я разрабатываю push-уведомление IOS и пытаюсь получить токен устройства. Я могу получить токен устройства, когда включена настройка уведомлений ОС. Когда он выключается, мой didRegisterForRemoteNotificationsWithDeviceToken больше не вызывается, и, следовательно, я не могу получить токен устройства.

вот мой код

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { #ifdef __IPHONE_8_0 //Right, that is the point UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge |UIUserNotificationTypeSound |UIUserNotificationTypeAlert) categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; #else //register to receive notifications UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound; [[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes]; #endif return YES; }

и я также добавил

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler

Однако при отключении настройки уведомлений ОС

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken

не будет называться. Я отлаживал это в течение многих часов и не нашел удачи.


person Steven    schedule 24.10.2014    source источник
comment
Что вы ожидали, уведомления отключены, поэтому вы не получите этот обратный вызов. Это работает так, как задумано.   -  person Lance    schedule 24.10.2014
comment
я ожидаю, что все еще смогу получить токен, так как отключение уведомлений — это просто настройка. То есть вы имеете в виду, что когда пользователь сначала выбирает «Не разрешать» при получении запроса от ОС при первой установке, мы не сможем получить токен, пока пользователь не включит настройку? пожалуйста, поправьте меня, если я ошибаюсь. благодарить. @Лэнс   -  person Steven    schedule 25.10.2014
comment
Да, если пользователь выберет запретить, когда вы запрашиваете доступ к push-уведомлениям, это не позволит вашему приложению получить push-токен. Вот как это должно работать.   -  person Lance    schedule 27.10.2014
comment
@Lance, я выполняю тестирование. Сначала я устанавливаю приложения для обмена мгновенными сообщениями и сначала выбираю не разрешать. запустите приложения для обмена мгновенными сообщениями, я отправлю ему другое сообщение. Он может вывести мне уведомление. Мой вопрос: сначала я выбираю «Не разрешать», поэтому сервер приложений не должен иметь токен моего устройства. Однако после того, как я включу настройку уведомлений в настройках ОС, без запуска приложений, он сможет вывести мне уведомление. Поскольку я не запускаю приложения, приложения никак не смогут отправить мой токен после того, как я включу его в настройках ОС, не так ли?   -  person Steven    schedule 28.10.2014
comment
В большинстве случаев токен устройства никогда не меняется. Поэтому, если вы получили токен, отправили его на свой сервер, затем отключили, а затем снова включили уведомления, как вы описываете, очень вероятно, что ваш старый токен все еще действителен, и поскольку вы включили уведомления, iOS больше не отключает уведомления, поэтому они появляются.   -  person Lance    schedule 28.10.2014


Ответы (1)


Я столкнулся с той же проблемой.

Удалось решить это, включив «Удаленные уведомления» в разделе «Возможности» проекта (см. Скриншот ниже).

Фоновый режим

Мое мнение по этому вопросу:

Если пользователь явно запретил уведомления от вашего приложения, а приложение отключило «Удаленные уведомления», вы не сможете доставить уведомление пользователю. Вот почему нет необходимости возвращать токен для вашего приложения.

Если пользователь отключил уведомления, но вы включили «Удаленные уведомления», это означает, что у вас все еще есть возможность отправлять тихие уведомления, а iOS предоставляет вам токен.

person Gladkov_Art    schedule 31.10.2015