在服务工作者 (Firebase) 中设置变量 MessagingSenderId



我想在我的服务工作线程中设置一个变量 messagingSenderId 值,而不是硬编码的值。可能吗?

我像这样注册我的服务工作者:

navigator.serviceWorker.register( 'firebase-messaging-sw.js' )
.then( function( registration ) {
    messaging.useServiceWorker( registration );     
});

在我的 firebase-messaging-sw.js 中,我像这样初始化 firebase

importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-app.js' );
importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-messaging.js' );
firebase.initializeApp({
  'messagingSenderId': 'my-id' // <- I want this to be variable
});

问题是我找不到如何将数据传递到我的服务工作线程文件。知道吗?

谢谢

如前所述,在"安装"之前将状态信息传递给服务工作者回答了这个问题。谢谢。

以下是此用例的答案:

您需要在 URL 中传递变量,如下所示:

var myId = 'write-your-messaging-sender-id-here';
navigator.serviceWorker.register( 'firebase-messaging-sw.js?messagingSenderId=' + myId )
.then( function( registration ) {
    messaging.useServiceWorker( registration );     
});

然后,在 firebase service worker (firebase-messaging-sw.js) 中,你可以得到这个变量,如下所示:

importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-app.js' );
importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-messaging.js' );
var myId = new URL(location).searchParams.get('messagingSenderId');
firebase.initializeApp({
  'messagingSenderId': myId
});

这行得通。但是URL.searchParams是一个非常新的工具。它的兼容性不如Firebase本身。

URL.searchParams: Chrome 51+, Firefox: 52+, Opera: 未知

Firebase: Chrome 50+, Firefox 44+, Opera 37+

所以代替:

var myId = new URL(location).searchParams.get('messagingSenderId');

我建议使用:

var myId = get_sw_url_parameters( 'messagingSenderId' );
function get_sw_url_parameters( param ) {
    var vars = {};
    self.location.href.replace( self.location.hash, '' ).replace( 
        /[?&]+([^=&]+)=?([^&]*)?/gi, // regexp
        function( m, key, value ) { // callback
            vars[key] = value !== undefined ? value : '';
        }
    );
    if( param ) {
        return vars[param] ? vars[param] : null;    
    }
    return vars;
}

相关内容

  • 没有找到相关文章

最新更新