Вы можете направлять пользователей на страницу настроек вашего приложения из настроек устройства приложения пользователя, позволяя им отказаться в в LocalNotification
- IOS раньше, чем версия 10 дос не предоставляют информацию, если пользователь отказано в разрешении, или нет ,
- В вашем приложении вам нужно сохранить в NSUserDefaults или где-то еще, что вы уже просили разрешения.
- Каждый раз, когда вам требуется разрешение, сначала проверьте, доступно ли разрешение или нет.
- Если разрешение недоступно, и ваше приложение ранее не запрашивало пользователя (на основе сохраненного состояния на предыдущем шаге), вы запрашиваете разрешение.
- Если вы запросили разрешение пользователя раньше (на основе сохраненного состояния на предыдущем шаге), вы запрашиваете пользователей, если они хотят разрешить разрешение, если они говорят «Да» пересылают их в приложение настройки устройства.
Objective-C для прошивки < = 10 (Устаревший в прошивке 10)
Это код надрез для запрашивая UIUserNotificationSettings
UIUserNotificationSettings *currentSettings = [[UIApplication sharedApplication] currentUserNotificationSettings]
if (currentSettings.types == UIUserNotificationTypeNone) // Permission does not exist either user denied or never been asked before
if (!(currentSettings.types & (UIUserNotificationTypeAlert | UIUserNotificationTypeSound))) // This means your app does not have permission alert and to play sounds with notification.
Этого код надреза показывает, как отправлять пользователь страница настройки устройства.
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
Swift 3 для прошивки < = 10 (Устаревшего в прошивке 10)
Это код надрез для запрашивая UIUserNotificationSettings
let currentSettings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
if currentSettings.types.isEmpty {
// Here you decide whether to prompt user with new authorization request
// or send user to setting app based on your stored variable
}
Этого код надреза показывает, как отправлять пользователь страница настройки устройства.
if let urlStr = URL(string: UIApplicationOpenSettingsURLString) {
if UIApplication.shared.canOpenURL(urlStr) {
UIApplication.shared.openURL(urlStr)
}
}
Для прошивки 10 и выше
вместо сохранения переменных в приложении чек ли когда-либо ваше приложение просило разрешение или нет, проверить значение authorizationStatus
из UNNotificationSettings
класса
Значение этого свойства не определено, если ваше приложение никогда не запрашивало авторизацию с использованием метода requestAuthorization (options: completeHandler :).
наряду с другими методами UNNotificationSettings
аналогичными аналогичными старой версии этого класса (UIUserNotificationSettings
) разрешения запроса или проверки на наличие разрешений, доступных как знак, предупреждение или звук.
Одна из основных проблем с этим ответом - это в Objective-C. Несмотря на это, это хороший ответ. Вот ответ, подробно описывающий одно и то же в Swift: http://stackoverflow.com/questions/41303746/swift-3-camera-permission-dialog-priming-prime-permissions-in-ios10 – dfd
Спасибо, это помогает. 'UIApplicationOpenSettingsURLString' возвращает меня прямо в настройки уведомлений моего приложения! Также спасибо @dfd за ссылку, очень хорошо знать об этой идее «Permission Priming». – Coder1224
Я отметил этот вопрос из-за ответа. Когда-нибудь это мне тоже поможет. Рад, что это, возможно, дало вам альтернативу думать. – dfd