即使注册成功,isRegisteredForRemoteNotifications 也会返回 false
Posted
技术标签:
【中文标题】即使注册成功,isRegisteredForRemoteNotifications 也会返回 false【英文标题】:isRegisteredForRemoteNotifications returns false even registration succeed 【发布时间】:2018-05-01 09:54:44 【问题描述】:问题
isRegisteredForRemoteNotifications
return false 即使我成功收到了设备令牌。
情况
1。注册
在用户安装我的应用程序后,在特定时间点,我检查isRegisteredForRemoteNotifications
,如果为假,我使用上面的代码要求用户允许通知
func registerUserNotificationSettings()
let userNotificationTypes: UIUserNotificationType = ([.alert, .badge, .sound])
let settings = UIUserNotificationSettings(types: userNotificationTypes, categories: nil)
UIApplication.shared.registerUserNotificationSettings(settings)
在显示对话框并且以太用户推送允许或禁止之后,
didRegister notificationSettings
被调用。我们叫
application.registerForRemoteNotifications
在里面。哪个调用
didRegisterForRemoteNotificationsWithDeviceToken
然后我们将令牌发送到我们的服务器。
2。检查用户是否关闭了推送权限
在完成上述操作后,如果使用关闭 iOS 设置应用程序的通知表单,我会显示一个模式警报,要求用户在某个时候将通知设置更改为 ON。我判断通过这段代码显示模态。
func isApproved() -> Bool
guard let setting = UIApplication.shared.currentUserNotificationSettings else
return false
return setting.types.rawValue > 0
如果 isApproved == false,我们会显示模态。
3。将用户发送到设置应用
在模态框上,我们放置了一个调用以下方法的按钮
func showAppropriateNotificationConfigView()
if UIApplication.shared.isRegisteredForRemoteNotifications == false
// case the app has never called registerUserNotificationSettings or registration failed
registerUserNotificationSettings()
else
// registerUserNotificationSettings has beeen called and registration succeed
UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
我们的大多数测试设备都返回 true(并且我们确认设备令牌已成功接收)
UIApplication.shared.isRegisteredForRemoteNotifications
但我们只有一台设备(iPhone7 加 ios 11.3)返回 false。 这样
registerUserNotificationSettings
被调用并且不显示任何内容,而不是通过
将用户发送到设置应用程序UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
问题
我的代码有什么问题,我们该如何解决?
我了解某些方法已被弃用,但我需要临时快速修复它。
【问题讨论】:
【参考方案1】:我通过更新所有相关的弃用方法解决了这个问题。
【讨论】:
以上是关于即使注册成功,isRegisteredForRemoteNotifications 也会返回 false的主要内容,如果未能解决你的问题,请参考以下文章
以下题目均在bookstore项目上完成(请先运行数据库文件): 1编写单元测试用例,对用户注册功能的Action层进行测试。(注意:测试用例应考虑成功和失败的情况)