2015-05-18 5 views
0

Я создаю приложение, которое запрашивает у пользователя разрешение на отправку уведомлений, когда пользователь включает коммутатор. Я использую этот код:Удаление ключа в зависимости от решения пользователя

- (IBAction)mySwitchValueChanged:(id)sender { 
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){ 
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]]; // ask the user for permission 
} 

if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) { // Check it's iOS 8 and above 
    UIUserNotificationSettings *grantedSettings = [[UIApplication sharedApplication] currentUserNotificationSettings]; 
    if (grantedSettings.types != UIUserNotificationTypeNone) 
    { 
     // Accepted 
    } else 
    { 
     [self.mySwitch setOn:NO]; // Declined 
    } 
} 
} 

Желаемое поведение следующим образом:

  • горок ПЕРЕКЛЮЧИТЬ
  • оповещения просит разрешения
  • код ждет пользователя, чтобы решить
  • Либо делает то, что я кодирую, где я положил //, или отключил переключатель.

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

Спасибо!

+0

Вы смотрели на делегатов обратных вызовов вы получаете? – Wain

+0

Прочитайте обсуждение в документах для 'registerUserNotificationSettings'. Он рассказывает вам, как с этим справиться. – rmaddy

+0

@rmaddy чтение сейчас. Я вижу, что документы сообщают вам следующее: «Если ваше приложение отображает предупреждения, воспроизводит звуки или значки с его значком, вы должны вызвать этот метод во время цикла запуска, чтобы запросить разрешение на оповещение пользователя таким образом». Но я называю это, когда пользователь переводит переключатель, который дает гораздо больше контекста пользователю, поскольку они знают, что они «подписывают». Это разрешено? – Erik

ответ

1

Примечание: Это временное решение идея

После того как вы вызываете этот метод: - [UIApplication sharedApplication] registerUserNotificationSettings и пользователь предоставляет толчок уведомление для приложения, затем didRegisterForRemoteNotificationsWithDeviceToken в AppDelegate уволят,

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{ 
    //call a notification when user granted Push Notifiaction 
    [[NSNotificationCenter defaultCenter] 
    postNotificationName:@"PushNotificationSuccess" 
    object:self]; 

} 

Итак, что вам нужно сделать, вы можете вызвать NSNotification из указанного метода, чтобы обновить интерфейс.

- (void)updateUIOnNotification:(NSNotification *) notification 
{ 

      // Accepted 
    } 
0
//Call the below method in your else part and remove the line 
    //[self.mySwitch setOn:NO]; 

    -(void)Showalert{ 
    UIAlertview*Temp=[[UIAlertview alloc]initWithTitle:@"Need Permission to Send Notifications" message:@"The App Wants The Permission to Work Properly!\nPermit The App in Notification settings"delegate:self cancelButtonTitle:@"Okay!" otherButtonTitles:nil]; 
    [Temp show];   
    } 
    #pragma mark Alertview delegate method 
    - (void)alertViewCancel:(UIAlertView *)alertView{ 
    //Remove the Below line From Else part of your code 
     [self.mySwitch setOn:NO]; 
    } 
Смежные вопросы