web-dev-qa-db-ja.com

GWTの使用中にFirebase Serviceワーカーが見つかりません(404エラー)

GWT Webアプリケーションでfirebaseクラウドメッセージングサービスを使用したいのですが、いくつかの問題があります。アプリケーションは、firebaseサービスワーカーを登録し、特定のトークンでサービスに接続できる必要があります。このトークン、受信したメッセージ、およびトークンが変更されたときのイベントは、GWT Javaコードでアクセスできる必要があります。

エラーは、handle.getToken()を使用してトークンを作成しようとすると発生します。このエラーメッセージが表示されます。

スクリプトの取得時に不正なHTTP応答コード(404)を受信しました。
リソースのロードに失敗しました:net :: ERR_INVALID_RESPONSE 
 
 browserErrorMessage: "登録に失敗しましたServiceWorker:スクリプトの取得時に不正なHTTP応答コード(404)を受信しました。」 
 code: "messaging/failed-serviceworker-registration" 
 message: "メッセージング:デフォルトのサービスワーカーを登録できません。ServiceWorkerの登録に失敗しました:不正なHTTP応答コード(404)スクリプトの取得時に受信されました。(messaging/failed-serviceworker-registration)。 "
 stack:" FirebaseError:Messaging:デフォルトのサービスワーカーを登録できません。ServiceWorkerの登録に失敗しました:不正なHTTP応答スクリプトの取得時にコード(404)を受け取りました(messaging/failed-serviceworker-registration)。↵https://www.gstatic.com/firebasejs/3.5.2/firebase-messaging.js:41:225"__proto__ :エラー

Service Workerを登録するためにアクセスしようとするURLは次のとおりです。 http://127.0.0.1:11111/firebase-messaging-sw.js

だから、他のfirebase JSファイルがある場所ではなく、ローカルホストアドレスからjavascriptにアクセスしようとするのは問題だということは明らかです。だから私の質問は、それを変更して正しいソースからファイルをロードする方法ですか?

これらのスクリプトは私のHTMLファイルに含まれています。

<script src="https://www.gstatic.com/firebasejs/3.6.1/firebase.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.5.2/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.5.2/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.5.2/firebase-database.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.5.2/firebase-messaging.js"></script>
<script>
  // Initialize Firebase
  var config = {
    apiKey: "AIzaSyBxdZNXHiLR1IC8Wrw3Y6q_5DFoN8hn_UY",
    authDomain: "fir-test-848de.firebaseapp.com",
    databaseURL: "https://fir-test-848de.firebaseio.com",
    storageBucket: "fir-test-848de.appspot.com",
    messagingSenderId: "974661154941"
  };
  firebase.initializeApp(config);
</script>

これは私のJavaコード:

 publicクラスFireBase 
 {
 
 private JavaScriptObject _messagingHandle; 
 private String _token; 
 
 public FireBase( )
 {
 _messagingHandle = createMessagingHandle(); 
 requestPermission(_messagingHandle、this); 
} 
 
プライベートネイティブJavaScriptObject createMessagingHandle ()
 /*-{
 return $ wnd.firebase.messaging(); 
}-* /; 
 
 private native void listenTokenRefresh (最終的なJavaScriptObjectハンドル)
 /*-{
 handle.onTokenRefresh(function()
 {
 instance。@ x.client.miscellaneous.FireBase :: onTokenRefresh ()(); 
}); 
}-* /; 
 
 private void onTokenRefresh()
 {
 getToken (_messagingHandle、これ); 
} 
 
 private native void requestPermission(最終的なJavaScriptObjectハンドル、最終的なObjectインスタンス)
 /*-{
 handle.requestPermission()。then(function()
 {
 $ wnd.console.log( 'Notification permission grant。'); 
 instance。@ x.client.miscellaneous.FireBase :: onPermission(Z)(true); 
})
}-* /; 
 
 private void onPermission(final boolean grant)
 {
 if(granted)
 {
 getToken(_messagingHandle、this); 
} 
} 
 
 private native void getToken(final JavaScriptObject handle、final Object instance)
 /*-{
 handle.getToken()。then(function( currentToken)
 {
 if(currentToken)
 {
 instance。@ x.client.miscellaneous.FireBase :: onTokenReceived(Ljava/lang/String;)( currentToken); 
} 
 else 
 {
 //許可リクエストを表示します。
 $ wnd.console.log( '利用可能なインスタンスIDトークンがありません。生成する許可をリクエストします。 '); 
 instance。@ x.client.miscellaneous.FireBase :: onTokenReceived(Ljava/lang/String;)(null); 
} 
 })
 
}-* /; 
 
 private void onTokenReceived(final String token)
 {
 if(token! = null)
 {
 GWT.log( "Received Token:" + token); 
 if(!token.equals(_token))
 {
 //サーバーにトークンを送信/更新
} 
} 
} 
} 
12
Roman

Firebase SDKは、特定の場所でサービスワーカーを登録しようとします。

場所は+ /firebase-messaging-sw.jsです。次の2つのオプションがあります。

1.)ブラウザで+ /firebase-messaging-sw.jsを動作させ(つまり、有効な応答を返すことを確認して)、SDKを再度使用してみます(ブラウザがファイルにアクセスできる場合は動作します)。

2.)useServiceworker(<service worker registration>)メソッドを使用して、カスタムサービスワーカーを渡します。この場合も、有効なサービスワーカーのURLが必要です。

10
Matt Gaunt

ルートフォルダーfirebase-messaging-sw.jsに空のファイルを作成するだけです

28
Rodrigo Asensio

angular cli file ... add

"firebase-messaging-sw.js"、 "manifest.json"

「アセット」:[「アセット」、「app/main/content/components/angular-material」、「favicon.ico」、「firebase-messaging-sw.js」、「manifest.json」]、

0
PRATHYUSH P