Firebase Cloud Messaging无托管(Web/JavaScript)

Dav*_*son 10 javascript firebase firebase-cloud-messaging

在完成Firebase云消息传递的官方视频教程时,如果没有托管应用程序,我将无法获得消息传递令牌.

这是我的app.js档案:

/* global firebase */

// Initialize Firebase
var config = {
  apiKey: 'AIzaSyBYfb9HAi_oE-PKqFNkRQcxAgLU-nm8sIE',
  authDomain: 'web-quickstart-c0309.firebaseapp.com',
  databaseURL: 'https://web-quickstart-c0309.firebaseio.com',
  projectId: 'web-quickstart-c0309',
  storageBucket: 'web-quickstart-c0309.appspot.com',
  messagingSenderId: '713880824056'
}
firebase.initializeApp(config)

const messaging = firebase.messaging()
messaging.requestPermission()
  .then(() => {
    console.log('Permission granted.')
    return messaging.getToken()
      .then(token => {
        console.log('messaging token test:', token)
        return token
      })
      .catch(error => {
        console.log('messaging error:', error)
      })
  })
  .then(token => {
    console.log('permission token test:', token)
  })
  .catch(error => {
    console.log('permission error:', error)
  })
Run Code Online (Sandbox Code Playgroud)

firebase-messaging-sw.js我的根目录中有一个文件.

当我index.html直接在浏览器中加载文件并接受对话框时,我收到一个未定义的令牌值.完整的控制台输出是:

16:20:35.744 app.js:17 Permission granted.
16:20:35.750 app.js:20 messaging token test: null
16:20:35.751 app.js:28 permission token test: null
Run Code Online (Sandbox Code Playgroud)

如果我通过编辑firebase.json文件来托管应用程序:

{
  "hosting": {
    "public": "./"
  }
}
Run Code Online (Sandbox Code Playgroud)

然后运行firebase serve -p 8081,打开http://localhost:8081并接受对话框,我收到一个令牌.完整输出是:

16:23:42.902 app.js:17 Permission granted.
16:23:43.059 app.js:20 messaging token test: eyd1EaFwULQ:APA91bGUZr9fAGcCaYVtXTPjk55AmpWLNdaqGapMa1S1GWTYeJwtJraEKuhAPpSM-v-2xPaSJQgTKRVosTN-0KRPHCccjdRZNDkegtW2HMC_mSbdap9h5TeH7KKQSbN4QrjVmIl7VZlu
16:23:43.060 app.js:28 permission token test: eyd1EaFwULQ:APA91bGUZr9fAGcCaYVtXTPjk55AmpWLNdaqGapMa1S1GWTYeJwtJraEKuhAPpSM-v-2xPaSJQgTKRVosTN-0KRPHCccjdRZNDkegtW2HMC_mSbdap9h5TeH7KKQSbN4QrjVmIl7VZlu
Run Code Online (Sandbox Code Playgroud)

这是一个记录的约束吗?有没有办法在不托管应用程序的情况下接收令牌?

Ali*_*Ali 5

FCM仅在https协议提供的页面中工作

文件中所示

仅在通过HTTPS服务的页面中支持FCM SDK。这是由于使用了服务工作者,仅在HTTPS站点上可用。需要提供者?Firebase托管是一种在您自己的域上获取免费HTTPS托管的简便方法。

如果你想知道为什么本地主机的工作,因为在本地主机工作页面,就像他们所服务的HTTPS

所以 有没有办法在不托管应用程序的情况下接收令牌?

答案是您的网页不应由https协议提供服务