【问题标题】:Firebase Cloud Messaging Token is undefined upon website loadingFirebase 云消息传递令牌在网站加载时未定义
【发布时间】:2020-01-08 09:19:51
【问题描述】:

我刚刚为我的网站设置了 Firebase 云消息传递。

一切都很好。

但是,在用户授权接收通知后,以下代码在网站重新加载后不会显示 FCM 令牌:

<script>
  var config = {
    apiKey: "XXX",
    ....
  };
  firebase.initializeApp(config);
  const messaging = firebase.messaging();

  ...

  function fcm_get_fcm_push_token() {
    messaging.getToken().then(function(fcmToken){ return fcmToken }); // <-- returns undefined
  }

  function print_fcm_token() {
    console.log(fcm_get_fcm_push_token()); //prints undefined
  }

  window.onload = print_fcm_token;
</script>

如前所述,通知已被授予。但是,令牌没有返回。

这是为什么呢?

【问题讨论】:

    标签: javascript firebase push-notification firebase-cloud-messaging


    【解决方案1】:

    这可能是与异步有关的问题。您提供给then 的回调实际上并没有改变您的容器函数返回的值,因为它没有返回任何内容。您必须返回承诺,然后等待它解决:

    function fcm_get_fcm_push_token() {
        return messaging.getToken();
      }
    
      function print_fcm_token() {
        fcm_get_fcm_push_token().then(console.log);
      }
    

    或者也许是异步/等待方法:

    function fcm_get_fcm_push_token() {
        return messaging.getToken();
      }
    
      async function print_fcm_token() {
        const token = await fcm_get_fcm_push_token()
        console.log(token);
      }
    

    我认为你不需要包装函数:

    
      async function print_fcm_token() {
        const token = await messaging.getToken()
        console.log(token);
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-10
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 2017-07-04
      • 1970-01-01
      相关资源
      最近更新 更多