Firebase 云消息传递令牌在网站加载时未定义

问题描述 投票:0回答:1

我刚刚为我的网站设置了 Firebase Cloud Messaging。

一切都运行得非常好。

但是,在用户授予接收通知权限后,以下代码在网站重新加载后不会显示 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个回答
1
投票

这可能是与异步相关的问题。您提供给

then
的回调实际上不会更改容器函数返回的值,因为它没有返回任何内容。你必须返回 Promise,然后等待它解决:

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.