【问题标题】:What is the point of this "token" in IndexedDB firebase-messaging-storeIndexedDB firebase-messaging-store 中的这个“令牌”有什么意义
【发布时间】:2020-10-08 12:45:50
【问题描述】:


我很困惑,我可以使用这个令牌(存储在 indexedDb 中)为设备订阅主题或向设备发送推送通知吗? 这个令牌有什么意义?


最好的问候

谢谢

【问题讨论】:

    标签: firebase-cloud-messaging indexeddb


    【解决方案1】:

    这个数据库很可能是 Firebase 云消息传递客户端存储设备令牌的方式。然而,这没有记录,因此您不应依赖现有的此数据库条目。

    如果您想使用令牌(订阅主题或其他原因),请使用public API to get the token

    messaging.getToken().then((currentToken) => {
      ...
    });
    

    上述可能从 indexeddb 读取令牌,但它也可能主动从对 FCM 服务器的调用中获取令牌。

    【讨论】:

    • 非常感谢。我正在保存messaging.getToken() 返回的令牌。但它会刷新每个页面回发事件。我正在使用 nuxtjs,firebase 应用程序会初始化每次刷新。我怎样才能防止这种行为?
    • 通常您无法控制 FCM 何时生成设备令牌。但是,如果您认为您的代码可能有问题,我建议您使用minimal code that reproduces the problem that you're asking about 提出一个新问题。
    • 对这个问题的限制感到抱歉:)
    【解决方案2】:

    正如弗兰克所说,

    const localStorageKey = 'webpush';
    messaging.getToken().then((currentToken) => {
    if (localStorage.getItem(localStorageKey) !== currentToken) {
       localStorage.setItem(localStorageKey, currentToken); 
    }
    ...
    });
    

    Firebase 将令牌存储在索引数据库中。当令牌刷新时,IndexedDb 将获取更新后的令牌。



    这些令牌完全相同。


    我的令牌发生了变化,因为我的服务人员在每次页面刷新时都取消注册(在开发模式下很奇怪)。然后它再次注册。因此,如果服务工作者状态为未注册,firebase 将创建新令牌。但在生产模式下,Service Worker 工作得很好。

    【讨论】:

      猜你喜欢
      • 2017-05-08
      • 2021-02-24
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 2016-10-06
      • 2018-12-12
      • 2015-11-22
      • 1970-01-01
      相关资源
      最近更新 更多