Как проверить, что пользователь включил push-уведомление из настроек?

Этот вопрос относится к изменениям iOS 10 APNS.

Это поток моего приложения:

  1. Приложение установлено
  2. Приложение запускается Screen Экран входа в систему
  3. Успешный вход в систему ➝ Главный экран
  4. Push-уведомление ➝ Запрос
  5. Push-уведомление ➝ Не разрешать
  6. Приложение Закрыть
  7. Настройки ➝ Пользователь активировал Push-уведомление
  8. Приложение открыто
  9. Как проверить, обновлены ли настройки?
  10. Приложение Закрыть
  11. Настройки ➝ Пользователь отключен Push-уведомления
  12. Приложение открыто
  13. Как проверить, обновлены ли настройки?

Я запрашиваю push-уведомление (шаг 4.) только когда пользователь входит в систему. Поэтому, пока пользователь не выйдет из системы, я не смогу повторно запросить push-уведомление.

Есть ли какое-то аккуратное и ясное решение для этого, чтобы мы могли поддерживать изменения iOS 10, все еще поддерживая iOS 8 или 9?

3 ответа

UIUserNotificationSettings больше не поддерживается в iOS8. Если вы хотите получить доступ к общему состоянию настроек ваших приложений, ознакомьтесь с UNUserNotifications, новой платформой. Насколько я понимаю, он рассматривает толчок и локальность как одну вещь. Когда вы регистрируете уведомления, вы можете позвонить, чтобы зарегистрировать push. Но для локальных разрешений - пропуска и т. Д. Вам все равно нужно запросить разрешение пользователя. То есть ваше устройство может принимать push-уведомления без разрешения пользователя для получения обновлений данных, но вы можете показывать уведомления только через центр с разрешениями. Вот как можно увидеть, какие разрешения были предоставлены.

  1. Импортируйте фреймворк в ваш класс

    @import UserNotifications;
    
  2. Запрос настроек

      - (void)_queryNotificationsStatus
    {
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings *settings){
    
        //1. Query the authorization status of the UNNotificationSettings object
        switch (settings.authorizationStatus) {
        case UNAuthorizationStatusAuthorized:
            NSLog(@"Status Authorized");
            break;
        case UNAuthorizationStatusDenied:
            NSLog(@"Status Denied");
            break;
        case UNAuthorizationStatusNotDetermined:
            NSLog(@"Undetermined");
            break;
        default:
            break;
        }
    
    
        //2. To learn the status of specific settings, query them directly
        NSLog(@"Checking Badge settings");
        if (settings.badgeSetting == UNAuthorizationStatusAuthorized)
        NSLog(@"Yeah. We can badge this puppy!");
        else
        NSLog(@"Not authorized");
    
      }];
    }
    

Используйте этот код

if ([[UIApplication sharedApplication] isRegisteredForRemoteNotifications]) {
// yes
}else{
// no
}

Вы можете использовать currentUserNotificationSettings всякий раз, когда ваше приложение выходит на передний план.

 UIUserNotificationSettings *grantedSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];
     if (grantedSettings.types == UIUserNotificationTypeNone) {
            NSLog(@"No permiossion granted");
        }
        else if (grantedSettings.types & UIUserNotificationTypeSound & UIUserNotificationTypeAlert ){
            NSLog(@"Sound and alert permissions ");
        }
        else if (grantedSettings.types  & UIUserNotificationTypeAlert){
            NSLog(@"Alert Permission Granted");
        }

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

Другие вопросы по тегам