【问题标题】:Storing tokens for Push Notifications为推送通知存储令牌
【发布时间】:2016-10-16 22:43:27
【问题描述】:

我们的项目目前有一个 Node jS 后端,我们想为 iOS 实现推送通知。我们做了一些研究,发现我们必须将 APN 提供给我们的令牌存储在我们的数据库中,以便向特定设备发送推送通知。有人可以确认这一点还是有更好的发送通知方式?

其次,我还发现,当设备进行软件更新时,这会更改其令牌,这是否意味着我们必须有能力更新数据库中的令牌,因为它会经常更改。这也是相当重要的。令牌是否还有其他时间可能发生变化?

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

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    您必须将通知 accessToken 发送到服务器,它类似于要传递通知的地址。您不必担心 accesstoken 的变化,因为您每次登录时都必须发送它,因此新更新的 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

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

    【讨论】:

    • 感谢您的回答,但我想我仍然想知道是否要在两个人之间发送通知,我是否仍然存储在我的数据库中?谢谢
    • 是的,您必须维护数据库,即使它在两个人之间,当用户从 ios 9 重新安装应用程序或恢复他们的手机时访问令牌发生变化,而且一个人可以拥有多个设备。所以,你肯定要维护数据库。
    • 如果您必须在每次启动时更新设备令牌并且应该立即将其发送给您的提供商,您为什么要在本地将其保存为默认值?
    • 此方法不会在每次午餐时生成不同的令牌,因此如果您保存它,您可以将其与新的令牌进行比较,只有在它发生变化时才将其发送到服务器。 (优化)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 2011-12-30
      相关资源
      最近更新 更多