Установите переменную messagingSenderId в сервисном работнике (Firebase)

Я хотел бы установить значение переменной 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
});

Проблема в том, что я не могу найти, как передать данные в мой рабочий файл. Любая идея?

Спасибо

1 ответ

Как уже упоминалось, передача информации о состоянии работнику сервиса перед установкой ответила на вопрос. Благодарю.

Вот ответ для этого варианта использования:

Вам нужно передать переменную в 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 (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+, опера: неизвестна

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;
}
Другие вопросы по тегам