如何知道用户在推送通知中点击了“不允许”[重复]

Posted

技术标签:

【中文标题】如何知道用户在推送通知中点击了“不允许”[重复]【英文标题】:How to know user tapped "Don't allow" in push notification [duplicate] 【发布时间】:2017-07-27 02:30:31 【问题描述】:

我需要检测用户何时允许或不允许推送通知。

当用户在第一个推送通知警报中点击允许或不允许按钮时,我应该在服务器中调用推送 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()
    

但是用户点击了“不允许”,它没有被调用。

如何知道用户在推送通知警报或打开关闭 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()
        

谢谢

【问题讨论】:

您必须意识到注册令牌,您不需要获得用户的许可。静默通知未经许可即可工作。 如果你想向用户展示一些东西(例如徽章/警报/声音),那么你需要得到他们的许可 【参考方案1】:

很遗憾,我们没有准确的方法来检查用户是否拒绝。

但是您可以随时检查是否通过此方法获得许可。 UIApplication.shared.isRegisteredForRemoteNotifications 只会告诉您应用程序是否已实际注册到 Apple 的推送服务器并已收到设备令牌:

返回值是

如果应用注册了远程通知并且 收到其设备令牌,如果没有注册,则为 NO,已 失败或已被用户拒绝。

【讨论】:

不要回答重复的问题,而是将它们标记为重复问题。 当然@JAL。谢谢【参考方案2】:

如果这是 iOS 级别的弹出窗口,那么我相信它不可能找出用户是否点击了不允许在推送通知中。但是您始终可以使用以下方法检查您的推送通知是否已启用,并相应地导航到设置页面:-

func isPushEnabledAtOSLevel() -> Bool 
 guard let settings = UIApplication.shared.currentUserNotificationSettings?.types else  return false 
 return settings.rawValue != 0

【讨论】:

【参考方案3】:

取决于 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

文档:https://developer.apple.com/documentation/usernotifications/unusernotificationcenter/1649524-getnotificationsettings

【讨论】:

以上是关于如何知道用户在推送通知中点击了“不允许”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

iOS 9:如何检测用户何时对推送通知请求说“不允许”? [复制]

如何从iOS中的设置处理推送通知允许

iOS极光推送设置别名

如果用户既没有允许也没有“不允许”我的应用程序的推送通知,推送通知会起作用吗?

控制“允许推送通知”警报

Swiftui:当用户点击推送通知时,如何导航到特定的 NavigationLink?