存储推送通知的令牌

时间:2016-06-15 17:18:47

标签: ios node.js swift push-notification apple-push-notifications

我们的项目目前有一个Node jS后端,我们想要实现iOS的推送通知。我们进行了一些研究并发现我们必须存储APN在我们的数据库中提供的令牌,以便将推送通知发送到特定设备。有人可以确认这个或者有更好的方式发送通知吗?

其次,我还发现,当设备通过软件更新时,这会更改其令牌,这意味着我们必须能够更新数据库中的令牌,因为它会经常更改。这也很重要。还有其他任何时候令牌可能会改变吗?

最后,Node中是否有用于发送推送通知的好库?

提前致谢!

2 个答案:

答案 0 :(得分:2)

您必须将通知accessToken发送到服务器,其地址与要发送的通知相同。您不必担心accessstoken的变化,因为您必须在每次登录时发送它,因此新的更新的accesstoken也会附加到服务器中。您必须在Appdelegate中注册远程通知,然后发送保存的令牌在nsuserdefault中登录API中的服务器。

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.


    let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
      UIApplication.sharedApplication().registerUserNotificationSettings(settings)
    UIApplication.sharedApplication().registerForRemoteNotifications()
    return true
}

//Called if successfully  registered for APNS.
 func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    // let deviceTokenString = NSString(format: "%@", deviceToken) as String

    var tokenStr = deviceToken.description
    tokenStr = tokenStr.stringByReplacingOccurrencesOfString("<", withString: "", options: [], range: nil)
    tokenStr = tokenStr.stringByReplacingOccurrencesOfString(">", withString: "", options: [], range: nil)
    tokenStr = tokenStr.stringByReplacingOccurrencesOfString(" ", withString: "", options: [], range: nil)
    print(deviceToken.description)
    print(tokenStr)
    //save the token in NSUserDefaults
    NSUserDefaults.standardUserDefaults().setObject(deviceTokenString, forKey: "deviceToken")


}

//Called if unable to register for APNS.
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {

    print(error)

}

Reference Apple's Documentation

  

设备令牌是向您的应用发送推送通知的关键   在特定设备上。设备令牌可以更改,因此您的应用需要   每次启动时重新注册并将收到的令牌传回   到你的服务器。如果您无法更新设备令牌,则远程   通知可能无法进入用户的设备。设备   当用户将备份数据恢复为新数据时,令牌始终会更改   设备或计算机或重新安装操作系统。迁移时   数据到新设备或计算机,用户必须启动您的应用程序一次   在远程通知可以传送到该设备之前。

答案 1 :(得分:0)

我一直在为此寻找最佳解决方案,但似乎没有明确的处理方法,因为我们不知道令牌何时会发生变化。 这是否意味着我们应该将令牌存储在我们的数据库中,并在每次用户打开应用程序时获取它,然后尝试比较它们?我猜这还不够有效。

在我看来,将令牌保留在服务器的数据库中,然后在本地存储中保留一份副本,以便您可以将其与每次打开应用程序时生成的进行比较,除非两者不相同,然后您可以更新数据库中的那个。