首页 > 解决方案 > 使用firebase推送通知中的onTokenRefresh与getToken有什么区别?

问题描述

我是 firebase 和 react-native 的新手,所以我很抱歉这些问题,但我想知道

  1. 使用firebase的推送通知中的onTokenRefresh与getToken有什么区别?

  2. 为什么不只与 getToken 一起使用?

  3. 为什么 onTokenRefresh 总是出现在这段代码中,我认为只有在令牌实际改变时才会运行这个函数......

    componentDidMount() {
    
    kittensApp.onReady().then(app => {
     app.messaging().getToken()
    .then(fcmToken => {
    if (fcmToken) {
        console.log('fcmtokenApp', fcmToken)
    } else {
      console.log('here 2')
     } 
      })
    
    app.messaging().onTokenRefresh(token => {
    console.log('refreshtoken', token)
      })
         })}
    
  4. 另一个问题是,如果我想获取令牌并将其发送到服务器以将其保存在数据库中,以便将来在我应该使用什么功能(获取令牌或刷新)时推送通知?以及如何确保万一令牌更改(通过更新应用程序或重新安装)它将新令牌发送到服务器?或者有什么方法可以在不让用户打开应用程序的情况下保持令牌新?

感谢您的帮助!

标签: firebasereact-nativefirebase-cloud-messaging

解决方案


  1. 生成新令牌时,使用最后注册的令牌触发 onTokenRefresh,但 getToken 用于注册令牌消息(如果您已注册令牌,您将从console.logelse 语句中获取
  2. 当生成新令牌时,您没有得到正确的最新令牌
  3. onTokenRefresh 始终为您提供正确和最新的令牌
  4. 无论是在 getToken(如果您还没有注册令牌并获得一个)和刷新(如果它已更改)上,如果在数据库和应用程序上收到的令牌相同,则必须在服务器上进行比较。好的选择是将用户数据也保存到服务器上的 redux 存储中,如果 firebase refresh 给你不同的令牌,用这个新的令牌发出请求,如果不做任何事情,因为它是正确的。

希望它会有所帮助。


推荐阅读