IsRegisteredForRemoteNotifications возвращает false, даже если регистрация прошла успешно

Проблема

isRegisteredForRemoteNotifications

вернуть ложный, даже если я успешно получил токен устройства.

Ситуация

1. Зарегистрируйтесь

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

func registerUserNotificationSettings() {
    let userNotificationTypes: UIUserNotificationType = ([.alert, .badge, .sound])
    let settings = UIUserNotificationSettings(types: userNotificationTypes, categories: nil)
    UIApplication.shared.registerUserNotificationSettings(settings)
  }

и после того, как диалоговое окно отобразится и пользователь эфира нажмет разрешить или запретить,

didRegister notificationSettings

называется. и мы звоним

application.registerForRemoteNotifications

внутри него. Какие звонки

didRegisterForRemoteNotificationsWithDeviceToken

и отправляем токен на наш сервер.

2. Убедитесь, что пользователь отключил разрешение на отправку.

После вышеуказанного и если использовать отключает форму уведомлений Приложение настроек iOS, я показываю модальное предупреждение, чтобы попросить пользователей изменить настройку уведомления на ON в какой-то момент. Я сужу показывать модальный код по этому коду.

func isApproved() -> Bool {
    guard let setting = UIApplication.shared.currentUserNotificationSettings else {
      return false
    }
    return setting.types.rawValue > 0
  }

Мы показываем модальное окно if isApproved == false.

3. Отправьте пользователя в приложение настроек.

В модальном окне мы разместили кнопку, которая вызывает следующий метод

func showAppropriateNotificationConfigView() {

    if UIApplication.shared.isRegisteredForRemoteNotifications == false {
      // case the app has never called registerUserNotificationSettings or registration failed
      registerUserNotificationSettings()

    } else {
      // registerUserNotificationSettings has beeen called and registration succeed
      UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
    }
  }

Большая часть нашего тестового устройства возвращает истину (и мы подтвердили, что токен устройства успешно получен) для

UIApplication.shared.isRegisteredForRemoteNotifications 

но только одно из наших устройств (iPhone7 плюс iOS 11.3) возвращает false. Чтобы

registerUserNotificationSettings

вызывается и ничего не отображает вместо отправки пользователя в приложение настроек

UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)

Вопрос

Что не так с моим кодом и как это исправить?

Я понимаю, что некоторые методы устарели, но мне нужно исправить это временно и быстро.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
784
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил это, обновив все связанные устаревшие методы.

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