ios - Swift FIRMessaging 推送通知 token 重置

标签 ios swift firebase firebase-realtime-database firebase-cloud-messaging

我目前正在我的新项目中使用推送通知,因此我正在尝试生成推送 token 。我的问题是,这些什么时候到期?我将每个用户的推送 token 存储在我的 Firebase 数据库中,但我知道这些 token 会自行过期/重新生成。所以我的问题是,保持推送 token 最新的最佳方法是什么?

我会在每次用户导航到他们的个人资料时都这样做吗?:

let token = FIRInstanceID.instanceID().token()

ref.child("Users").child(id).child(pushToken).updateChildValues(["tokenid":token])

你看,截至目前,我要求用户在注册后立即允许推送通知,但不知何故,即使我拒绝了请求,它似乎仍会生成 token ID。所以我的问题是,我怎样才能更新这个 token ID?我必须在 AppDelegate 中执行此操作吗?

谢谢。非常感谢您的帮助!

最佳答案

要将 token 正确存储在数据库中,您需要处理两种情况:

  1. 应用启动时
  2. token 刷新时

第一个get the current token在应用程序/主视图上通过调用 FirebaseInstFIRInstanceID.instanceID().token() 开始,例如 viewDidLoad:

if let token = FIRInstanceID.instanceID().token() {
  ref.child("Users").child(id).child(pushToken).updateChildValues(["tokenid":token])
}

由于当前token可能还没有生成,所以需要在这段代码中处理nil

然后还有 monitor for changes to the token通过实现 tokenRefreshNotification:

func tokenRefreshNotification(notification: NSNotification) {
  if let refreshedToken = FIRInstanceID.instanceID().token() {
    ref.child("Users").child(id).child(pushToken).updateChildValues(["tokenid":refreshedToken])
  }

}

另请参阅我对类似 Android 用例的回答:Update Firebase Instance ID on app update

关于ios - Swift FIRMessaging 推送通知 token 重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39975953/

相关文章:

ios - 不能使用其他类的 reloadData

ios - 从不同类 Swift 中的结构内的变量获取数据

javascript - 如何从swift调用javascript

json - 如何将对象的json转换为字典

javascript - 如何在firebase上执行sql "LIKE"操作?

ios - Xamarin - 绝对布局中带有文本和图像的按钮导致元素未对齐

swift - 递归函数替换json对象

javascript - 错误: Received unknown parameter: source

javascript - 如何在 Firestore 中查询 DocumentReference

ios - 绘制 UIButton/UIBarButtonItem 以使用父栏的tintColor?