检查用户是不是已在 Swift 中注册本地通知时出错

Posted

技术标签:

【中文标题】检查用户是不是已在 Swift 中注册本地通知时出错【英文标题】:Error while checking if user has registered for local notifications in Swift检查用户是否已在 Swift 中注册本地通知时出错 【发布时间】:2016-03-17 01:53:44 【问题描述】:

我正在尝试检查我的用户是否已接受接收来自我的应用的通知。我使用的是UIApplication.sharedApplication().isRegisteredForRemoteNotifications(),但它总是说这是错误的,即使我已接受接收它们。

现在我稍微改了一下,我用这段代码来检查:

func checkRegisteredUserForNotifications() 
    if UIApplication.sharedApplication().currentUserNotificationSettings() != nil 

        notificationStatus.hidden = false

        UIView.animateWithDuration(0.3, animations:  () -> Void in
            self.notificationStatus.alpha = 1.0
        )

        notificationStatus.text = "Thats greay!"

        btn.hidden = false

        UIView.animateWithDuration(0.3, animations:  () -> Void in
            self.btn.alpha = 1.0
        )

     else 

        notificationStatus.hidden = false

        UIView.animateWithDuration(0.3, animations:  () -> Void in
            self.notificationStatus.alpha = 1.0
        )

        notificationStatus.text = "That's bad"

        btn.hidden = false

        UIView.animateWithDuration(0.3, animations:  () -> Void in
            btn.alpha = 1.0
        )

        print("not registered!!")
    

但它总是给我真实的,即使我拒绝接收通知。 为什么会这样?

更多信息:我有一个按钮,当用户点击它时,它会调用函数 registerForRemoteNotifications(),并在 10 秒后调用该函数来检查用户是否已接受。

感谢任何帮助,谢谢!

【问题讨论】:

我猜是因为currentUserNotificationSettings 不会返回nil,即使你还没有注册。 那我怎么查? 看这里...***.com/questions/26051950/… 您使用的是本地通知还是推送通知?问题和标签不清楚。 @TroyT 使用本地 【参考方案1】:
if UIApplication.sharedApplication().currentUserNotificationSettings.types == .None 
    // not registered
 else 
    // registered in some way

这只是检查是否有任何允许的通知设置类型(有 3 种,您可以将它们任意组合:徽章、声音、警报)。如果您需要特定的类型,您可以根据需要修改 if 语句。

【讨论】:

感谢您的回答!我明天只能测试这段代码,如果它有效,我会告诉你,但它应该。我认为问题在于我正在检查它是否为 nil,但我猜它永远不会是 nil。再次感谢!另外,与这个问题无关,我如何检测应用程序的首次启动并呈现视图控制器? @HenriqueDourado 我不能在这里给你一个完整的答案,但你基本上使用 NSUserDefaults。这是popular question in Objective-C 和this answer in Swift 了解更多信息。

以上是关于检查用户是不是已在 Swift 中注册本地通知时出错的主要内容,如果未能解决你的问题,请参考以下文章

swift ios检查本地通知是不是被解除[重复]

如何检查用户是不是已在 ejabberd 服务器中注册或未使用 asmack

在 ios 的 Facebook 登录中检查是不是已在此应用中注册

用户选择的 swift 3 重复间隔中的本地通知

如何持续检查 AVAudioplayer 是不是已在 Swift 中播放完毕?

如何检查用户 JID 是不是已在 XMPPFrameWork 中使用