Swift ios检查用户是否已启用通知始终返回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") }

我正在尝试检查用户是否已为我的应用启用远程通知,但即使我禁用/卸载我的应用,它始终返回true

我正在检查此代码:

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将返回,这意味着您仍然无法知道应用程序的通知设置