Swift ios检查用户是否已启用通知始终返回true
我正在尝试检查用户是否已为我的应用启用远程通知,但即使我禁用/卸载我的应用,它始终返回true 我正在检查此代码:Swift ios检查用户是否已启用通知始终返回true,ios,swift,onesignal,Ios,Swift,Onesignal,我正在尝试检查用户是否已为我的应用启用远程通知,但即使我禁用/卸载我的应用,它始终返回true 我正在检查此代码: if UIApplication.shared.isRegisteredForRemoteNotifications == false { OneSignal.registerForPushNotifications() print("Notifications is off") } else { print("Notifications is on") }
if UIApplication.shared.isRegisteredForRemoteNotifications == false {
OneSignal.registerForPushNotifications()
print("Notifications is off")
} else {
print("Notifications is on")
}
但这将始终运行:print(“通知已打开”)
那么,我如何检查用户是否为我的应用程序启用了通知功能呢?实际上,这将始终返回
true
,只有在从未请求过远程通知权限的情况下,才会返回false
。这意味着,一旦您询问了用户,不管他回答了什么,都会返回true
原因是,当您请求权限时,它直接注册用户(甚至不用等待他的回答,您可以在用户回答之前设置断点来检查是否触发了代理)。然后,如果用户拒绝该权限,设备仍将被注册,但在用户在“常规设置”中打开通知之前,通知不会显示
这不是一个bug,苹果这样做是为了避免dev不断请求权限。因此,实际上不可能知道用户是否接受或拒绝了权限:/
if let settings = UIApplication.shared.currentUserNotificationSettings {
if settings.types != UIUserNotificationType() {
print("is on!")
}else{
print("is off!")
}
}else{
print("is off")
}
这似乎有效,但不确定是否正确?即使用户拒绝或禁用通知,该应用程序仍在注册。我的答案是您要找的:但为什么某些应用程序有时会显示弹出消息,告诉我启用通知。也请检查我的答案。它们是一些猜测的方法,但它可能很棘手。你根本不确定,这只是猜测而已。我将尝试找出我在以前的工作中是如何做到这一点的,并发布更新;)@RomOne没有全部,请尝试复制/粘贴:)是的,我的错误:)我不完全确定,但在这里,我认为您正在测试用户是否已启用通知,而不是您的应用程序specifically@RomOne这也不起作用:/如果我按deny,它将不再提示我这是正常的,您只能请求一次许可。一旦您发出请求,isRegisteredForRemoteNotifications将始终设置为YES。此外,如果用户通常对其通知进行了设置,则currentUserNotificationSettings将返回,这意味着您仍然无法知道应用程序的通知设置