我正在遵循有关推送通知的书和一些文档的过程,在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会调用该方法。在这种特殊情况下,应用程序在用户启动之前不会知道新设备的令牌。
有什么办法解决这个问题吗?
答案 0 :(得分:0)
每个device token
发送一次推送通知。如果您有权访问推送通知服务器(如果您不是自己管理推送服务器,则可以访问推送提供商),则可以验证情况是否如此。当您构建应用程序并在设备上安装时,新版本很可能会生成新令牌。用户卸载/安装应用程序时也会发生这种情况。这可能是您收到多个通知的原因。 Apple应该使旧设备令牌无效,并将反馈发送回您的服务器。有关Apple如何向您发送反馈的更多信息,请访问其Apple APNS docs的链接。