如何迅速解决“多次推送通知”错误?

时间:2019-07-23 14:50:27

标签: ios swift push-notification

我正在遵循有关推送通知的书和一些文档的过程,在iOS应用上添加推送通知。

推送通知在几天内运行良好,然后突然我开始一次收到3个推送通知,然后逐渐增加到7。


// this function is called from didFinishLaunchingWithOptions function
func requestForNotification(_ application: UIApplication){
      UNUserNotificationCenter.current().requestAuthorization(options: [.badge,.sound,.alert]) { (granted, _) in
           guard granted else {return}
           DispatchQueue.main.async {
               UIApplication.shared.registerForRemoteNotifications()
           }
       }
   }


func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
       let token = deviceToken.reduce(""){$0 + String(format: "%02x",$1) }
       sendTokenToService(token: token)
       print("device token is:::::::::: \(token)")
   }

//Send token to local server
func sendTokenToService(token:String){
       var params = [String:AnyObject]()
       params["token"] = token as AnyObject
       APIManager.shared.request(apiRouter: APIRouter.init(endpoint: .addAdminToken(param: params))) { (response, success) in
           if success, let response = response["response"] {
               print(response)
           }
       }
   }

registerForRemoteNotifications()仅被调用了一次,但我在Apple的官方文档中发现了这一点:

  

registerForRemoteNotifications()方法:在其他极少数情况下,UIKit可能会调用它。例如,当用户从不是设备备份数据的数据中恢复设备后,用户启动应用程序时,UIKit会调用该方法。在这种特殊情况下,应用程序在用户启动之前不会知道新设备的令牌。

有什么办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

每个device token发送一次推送通知。如果您有权访问推送通知服务器(如果您不是自己管理推送服务器,则可以访问推送提供商),则可以验证情况是否如此。当您构建应用程序并在设备上安装时,新版本很可能会生成新令牌。用户卸载/安装应用程序时也会发生这种情况。这可能是您收到多个通知的原因。 Apple应该使旧设备令牌无效,并将反馈发送回您的服务器。有关Apple如何向您发送反馈的更多信息,请访问其Apple APNS docs的链接。