it-swarm.com.ru

цель c - определить, когда пользователь изменяет настройки уведомлений приложения

Мне нужно всегда знать, какие параметры пользователь выбирает в настройках Push-уведомлений.
(Варианты - оповещение, звук и значки)

Поэтому, когда мое приложение запускается, я звоню:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

и определить, что выбрал пользователь.

Но как я могу определить, изменил ли пользователь настройки позже в течение срока службы приложения?
Есть ли какой-нибудь метод делегата, который вызывается при изменении этих настроек?

14
Eyal

Там нет делегата. Вам необходимо периодически запрашивать свойство UIApplicationenabledRemoteNotificationTypes, например, в applicationDidBecomeActive:.

Для деталей проверьте эти ответы:

Определите на iPhone, если пользователь включил Push-уведомления

Просмотр на экране блокировки и enabledRemoteNotificationTypes - iOS5

Правка:
Если вам нужно сбросить настройки push-уведомлений и уведомлений о разрешениях, взгляните на техническая заметка Apple TN2265 . В разделе «Сброс предупреждения разрешений push-уведомлений на iOS» объясняется, как сбросить настройки на iOS. Однако многие разработчики жалуются, что процедура не работает. Не уверен, что эта ссылка будет работать, вам нужно будет иметь доступ к форуму Apple, но это одна из тем об этой конкретной проблеме.

Я сам задавался вопросом, может быть, Apple удалила диалоговое окно разрешения в iOS 5.1. В противном случае, зачем им требовать, чтобы приложение показывало предупреждение? Согласно Руководству по обзору AppStore :

5.3 Приложения, отправляющие Push-уведомления без предварительного получения согласия пользователя, будут отклонены

Например, Path (приложение) просит пользователя включить Push-уведомление в середине процесса подписки, а не при первом запуске приложения.

В любом случае не уверен, что должно быть целью запроса, так как приложение не может запросить состояние параметра уведомления. В частности, приложение может проверить, какие типы уведомлений (используя enabledRemoteNotificationTypes) включены, но НЕ, если Push-уведомления для определенного приложения включены или отключены (переключатель ON/OFF Центра уведомлений вверху). По крайней мере, это поведение в iOS 5.1. Даже если пользователь отключает уведомления для этого приложения, оно все равно может зарегистрироваться для push-уведомлений (используя registerForRemoteNotificationTypes) и получит токен APNS.

22
Amiramix

Проверьте это, когда ваше приложение станет активным, а не только при запуске.

7
Nick Bull

Это пример, когда Push реализуется через UrbanAirship. Каждый раз, когда пользователь подписывается/отключается для Push после запуска делегата, и с помощью метода ниже этого вы можете проверить (ДА/НЕТ).

То же самое может быть достигнуто с делегатом UIApplication, если не используется UrbanAirship. 

- (void)registrationSucceededForChannelID:(NSString )channelID deviceToken:(NSString )deviceToken
    {
        NSLog(@"registrationSucceededForChannelID : %@",[self appRegisterForPushNotification][email protected]"YES":@"NO");
    }


    - (BOOL)appRegisterForPushNotification {
        if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {
            UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
            return ((types & UIUserNotificationTypeAlert) || (types & UIUserNotificationTypeSound));
        }
        return NO;
    }
0
Venu Gopal Tewari