我刚刚为我的网站设置了 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>
如上所述,通知已获批准。但是,令牌不会返回。
这是为什么?
这可能是与异步相关的问题。您提供给
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);
}