Swift FIRMessaging推送通知令牌重置

时间:2016-10-11 11:11:47

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

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

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

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

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

你看,到目前为止,我要求用户在注册后立即允许推送通知,但不知怎的,即使我拒绝请求,它仍然会生成令牌ID。所以我的问题是,如何更新此令牌ID?我是否必须在AppDelegate中执行此操作?

感谢。非常感谢帮助!

1 个答案:

答案 0 :(得分:1)

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

  1. 应用启动时
  2. 令牌刷新时
  3. 应用/主视图中的第一个get the current token首先调用FirebaseInst FIRInstanceID.instanceID().token(),例如viewDidLoad

    if let token = FIRInstanceID.instanceID().token() {
      ref.child("Users").child(id).child(pushToken).updateChildValues(["tokenid":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