Приложение iOS не запрашивает разрешения на устройстве iOS7

У меня есть приложение iOS с включенными push-уведомлениями, используя следующий код

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

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

Когда это приложение запускается на устройстве iOS9, оно сначала запрашивает разрешения просто отлично, но при использовании на iOS7, iPhone 4 оно не запрашивает разрешения, но получает уведомления просто отлично, не в состоянии понять проблему.


person vishal dharankar    schedule 11.01.2016    source источник
comment
Если ваше приложение уже получило разрешения на операцию, оно больше не запрашивает их, если только устройство не будет сброшено или приложение не будет удалено как минимум на день. Вы уверены, что ранее не давали своему приложению разрешения на отправку на этот iPhone 4?   -  person NSNoob    schedule 11.01.2016
comment
Пользователь говорит, что его никогда не просили об этом   -  person vishal dharankar    schedule 11.01.2016
comment
Это означает, что у приложения есть разрешения, хотя и до установки приложения. Он не мог получить никакого толчка, не дав разрешения. Попросите пользователя проверить разрешения для приложения в меню настроек. Он, вероятно, просто удалил предыдущую сборку, но сразу же последнюю сборку, которую вы ему дали.   -  person NSNoob    schedule 11.01.2016


Ответы (1)


Видя, как ваш пользователь получает push-уведомления, несмотря на то, что ему не представлен диалог разрешений, должен быть следующий сценарий:

  1. У него была предыдущая сборка на его iPhone 4s, которую он авторизовал для push-уведомлений.
  2. Он быстро удалил предыдущую сборку и установил последнюю, которую вы ему дали, не дав устройству один день перед переустановкой.
  3. В результате ему не было представлено никакого диалога с запросом разрешений на push-уведомления, поскольку разрешения уже были предоставлены ранее.

Согласно Apple Техническое примечание 2265:

Когда приложение с поддержкой push-уведомлений впервые регистрируется для получения push-уведомлений, iOS спрашивает пользователя, хотят ли они получать уведомления для этого приложения. После того как пользователь ответил на это оповещение, оно не отображается снова, если только устройство не будет восстановлено или приложение не будет удалено в течение как минимум дня.

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

Удалите свое приложение с устройства. Полностью выключите устройство и снова включите его. Перейдите в «Настройки» > «Основные» > «Дата и время» и установите дату на день или более вперед. Снова полностью выключите устройство и снова включите его.

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

person NSNoob    schedule 11.01.2016