即使注册成功,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的主要内容,如果未能解决你的问题,请参考以下文章

域名ping不通是啥原因

域名ping不通是啥原因

以下题目均在bookstore项目上完成(请先运行数据库文件): 1编写单元测试用例,对用户注册功能的Action层进行测试。(注意:测试用例应考虑成功和失败的情况)

即使没有错误,也无法使用Selenium Webdriver注册零售网站

即使成功后也没有从 PayPal 获得成功响应

为啥我会收到“服务未注册”异常,即使我没有在 Android - Java/Kotlin 中使用任何服务?