使用firebase推送通知中的onTokenRefresh与getToken有啥区别?

Posted

技术标签:

【中文标题】使用firebase推送通知中的onTokenRefresh与getToken有啥区别?【英文标题】:What is the different between onTokenRefresh to getToken in push notification with firebase?使用firebase推送通知中的onTokenRefresh与getToken有什么区别? 【发布时间】:2018-09-06 15:21:26 【问题描述】:

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

    firebase 推送通知中的 onTokenRefresh 和 getToken 有什么区别?

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

    为什么 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)
      )
         )
    
    另一个问题是,如果我想获取令牌并将其发送到服务器以将其保存在数据库中,以便将来在我应该使用什么功能(获取令牌或刷新)时推送通知?以及如何确保万一令牌更改(通过更新应用程序或重新安装)它将新令牌发送到服务器?或者有什么方法可以在不让用户打开应用的情况下保持令牌新?

感谢您的帮助!

【问题讨论】:

【参考方案1】:
    onTokenRefresh 在生成新令牌时使用最后注册的令牌触发,但 getToken 用于注册令牌消息(如果您已注册令牌,您将从 else 语句中获得 console.log 生成新令牌时,您没有获得正确的最新令牌 onTokenRefresh 始终为您提供正确和最新的令牌 无论是在getToken(如果您还没有注册令牌并获得一个)和刷新(如果它已更改),如果在数据库和应用程序上收到的令牌相同,您必须在服务器上进行比较。不错的选择是将用户数据也保存到服务器上的 redux 存储中,如果 firebase refresh 为您提供不同的令牌,请使用此新令牌发出请求,如果不执行任何操作,因为它是正确的。

希望它会有所帮助。

【讨论】:

感谢您的回答...我还有一个小问题,如果用户已经登录并给了我设备令牌并且我保存在服务器上的数据库中,现在用户重新安装应用程序并且还没有打开应用程序,在这种情况下,设备令牌发生了变化,并且在数据库中我的令牌无效,所以下次我尝试推送通知它将不起作用......这有什么关系吗? @TalShani 我在 react native 中使用 oneSignal 时遇到了同样的问题,如果用户登录并重新安装应用程序,现在可以轻松注销他(删除令牌)并处理卸载/重新安装应用程序JS,在原生 android Activity 或 ios 中可能你可以在服务中处理它,但我不确定它是否可能(我只是跳过了这个案例)。用户必须在重新安装后运行应用程序,以便他获得新令牌,您将在服务器端对其进行更新。如果他不打开应用程序,很遗憾他不会收到推送通知。

以上是关于使用firebase推送通知中的onTokenRefresh与getToken有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

使用firebase创建反应应用程序中的推送通知

向firebase中的所有用户推送通知[重复]

Cordova 中的后台 Firebase 推送通知

通过 Firebase 函数发送的 Swift 中的加密推送通知

使用 Cloud Functions for Firebase 发送推送通知

为啥推送通知不能在 iOS 中使用 Firebase 从设备到设备?