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

Push Notification ON или OFF Проверка в iOS

Я хочу проверить параметр "Push Notification" на устройстве iOS, в любое время, если приложение запущено (или включено в режиме возобновления). Я использую следующий код для проверки, если опция выключена:

-(void)PushNotificationServiceChecking
{
    UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

    if (types == UIRemoteNotificationTypeNone)
    {
        NSString *msg = @"Please press ON to enable Push Notification";
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Push Notification Service Disable" message:msg delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"ON", nil];
        alert.tag = 2;
        [alert show];
    }
}

Затем я использую следующий код для перехода на вкладку "Настройки" → Центр уведомлений ", чтобы пользователь мог на нем вручную:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (alertView.tag == 2)
    {
        if (buttonIndex == 0)
        {
            // this is the cancel button
        }
        else if (buttonIndex == 1)
        {
            [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert)];
        }
    }

}

Но теперь проблема, с которой я столкнулся, появляется только в первый раз после запуска приложения. Он работает так, как я хочу. Но после этого, если я выключу опцию "Push Notification" из "настроек", она не выдаст "Сообщение о предупреждении".

4b9b3361

Ответ 1

Если приложение однажды зарегистрировалось с помощью registerForRemoteNotification, вы можете отключить его и включить. Как только вы отключите, и вы собираетесь перерегистрироваться с ним, тогда это позволит registerForRemoteNotification, без всплывающего окна для предупреждения.

Техническая нота TN2265: Устранение неполадок Push-уведомлений

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

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

Fore Дополнительная информация: INFO && Информация 2

Изменить: для checking with alert enable -

использовать

 if (types & UIRemoteNotificationTypeAlert){} 

вместо

if (types == UIRemoteNotificationTypeNone){}

Изменить: Последнее обновление из doc для iOS 8 или новее, вы можете проверить:

- (BOOL)isRegisteredForRemoteNotifications

Ответ 2

В iOS 8 теперь вы можете использовать:

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications];

И чтобы проверить, как настроены настройки, вы можете использовать:

[[UIApplication sharedApplication] currentUserNotificationSettings];

Ответ 3

Это работает для меня. Надеюсь, эта помощь!: D

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)


if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")){
    UIUserNotificationType type = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
    if (type == UIUserNotificationTypeNone){
        ALERT_WITH_TITLE(@"", kMessageNotificationTurnOnRequire);
    }
}
else {
   UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
   if (types == UIRemoteNotificationTypeNone) {
       ALERT_WITH_TITLE(@"", kMessageNotificationTurnOnRequire);
   }
}

Ответ 4

 NSString *iOSversion = [[UIDevice currentDevice] systemVersion];
            NSString *prefix = [[iOSversion componentsSeparatedByString:@"."] firstObject];
            float versionVal = [prefix floatValue];


            if (versionVal >= 8)
            {
                if ([[UIApplication sharedApplication] currentUserNotificationSettings].types != UIUserNotificationTypeNone)
                {

                    NSLog(@" Push Notification ON");
                }
                else
                {

                    NSString *msg = @"Please press ON to enable Push Notification";
                    UIAlertView *alert_push = [[UIAlertView alloc] initWithTitle:@"Push Notification Service Disable" message:msg delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Setting", nil];
                    alert_push.tag = 2;
                    [alert_push show];

                    NSLog(@" Push Notification OFF");

                }

            }
            else
            {
                UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
                if (types != UIRemoteNotificationTypeNone)

                {
                    NSLog(@" Push Notification ON");

                }
                else
                {
                    NSString *msg = @"Please press ON to enable Push Notification";
                    UIAlertView *alert_push = [[UIAlertView alloc] initWithTitle:@"Push Notification Service Disable" message:msg delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Setting", nil];
                    alert_push.tag = 2;
                    [alert_push show];

                    NSLog(@" Push Notification OFF");
                }

            }