我需要检测用户何时允许或不允许推送通知。
当用户在第一个推送通知提醒中点击允许或不允许按钮时,我应该在服务器中调用push api。 (允许 - > pushYn = Y,不允许 - > pushYn = N) 并且用户在iPhone的设置 - 通知
中打开,关闭所以,我在" didRegisterForRemoteNotificationsWithDeviceToken"中调用了api。 喜欢这个代码
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// Convert token to string
var token = ""
for i in 0..<deviceToken.count {
token = token + String(format: "%02.2hhx", arguments: [deviceToken[i]])
}
print(token)
pushTokenSetHttpRequest()
}
但用户点击了“不允许”#34;它没有被调用。
如何知道用户点击&#34;不允许&#34;在推送通知提醒或开启iPhone的设置 - 通知?
注册通知
if #available(iOS 10, *) {
UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]){ (granted, error) in }
application.registerForRemoteNotifications()
}
else {
UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil))
UIApplication.shared.registerForRemoteNotifications()
}
谢谢
答案 0 :(得分:1)
如果这是iOS级弹出窗口,那么我相信它无法确定用户是否点击了不允许推送通知。但您可以使用以下方法检查是否启用了推送通知,并相应地导航到设置页面: -
func isPushEnabledAtOSLevel() -> Bool {
guard let settings = UIApplication.shared.currentUserNotificationSettings?.types else { return false }
return settings.rawValue != 0
}
答案 1 :(得分:1)
不幸的是,我们没有准确的方法来检查用户是否拒绝它。
但您可以随时通过此方法检查是否已获得许可。
UIApplication.shared.isRegisteredForRemoteNotifications
只会告诉您应用程序是否已实际注册Apple的推送服务器并且已收到设备令牌:
返回值是
如果应用程序已注册远程通知和 如果没有发生注册,则收到设备令牌或NO 失败或被用户拒绝。
答案 2 :(得分:0)
取决于iOS版本:
// nil if not authorized. If I recall correctly, nullability was changed from iOS 8 to 9 correctly
UIApplication.shared.currentUserNotificationSettings()
// iOS 10+ (If you are using UNUserNotificationCenter). Docs link below
UNUserNotificationCenter.current().getNotificationSettings(completionHandler:)
UNUserNotificationCenter.current()authorizationStatus