isRegisteredForRemoteNotifications
вернуть ложный, даже если я успешно получил токен устройства.
После того, как пользователь установил мое приложение и в определенный момент, я проверяю 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
и отправляем токен на наш сервер.
После вышеуказанного и если использовать отключает форму уведомлений Приложение настроек iOS, я показываю модальное предупреждение, чтобы попросить пользователей изменить настройку уведомления на ON в какой-то момент. Я сужу показывать модальный код по этому коду.
func isApproved() -> Bool {
guard let setting = UIApplication.shared.currentUserNotificationSettings else {
return false
}
return setting.types.rawValue > 0
}
Мы показываем модальное окно if isApproved == false.
В модальном окне мы разместили кнопку, которая вызывает следующий метод
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)!)
Что не так с моим кодом и как это исправить?
Я понимаю, что некоторые методы устарели, но мне нужно исправить это временно и быстро.
Я решил это, обновив все связанные устаревшие методы.