質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

PWA(Progressive Web Apps)

PWA(Progressive Web Apps)は、アプリのようなWebサイトを指します。仕様が異なる様々なデバイスで表示でき、インストールも不要。さらに訪問し続けることでユーザーについて学び、強力なPWAとなります。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

2171閲覧

Firebaseのmessaging設定がPWAで出来ない

abc1222

総合スコア24

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

PWA(Progressive Web Apps)

PWA(Progressive Web Apps)は、アプリのようなWebサイトを指します。仕様が異なる様々なデバイスで表示でき、インストールも不要。さらに訪問し続けることでユーザーについて学び、強力なPWAとなります。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/12/15 05:01

前提・実現したいこと

WEBアプリをPWA化し、通知を受け取りたいと思っています。
Firebaseのmessagingを活用したいと思っているのですが、以下のエラーがコンソールに発生しています。

発生している問題・エラーメッセージ

FirebaseError: Messaging: We are unable to register the default service worker. Failed to register a ServiceWorker for scope ('https://*ドメイン*/firebase-cloud-messaging-push-scope') with script ('https://*ドメイン*/firebase-messaging-sw.js'): A bad HTTP response code (404) was received when fetching the script. (messaging/failed-service-worker-registration). at nt.<anonymous> (window-controller.ts:166) at tslib.es6.js:102 at Object.throw (tslib.es6.js:83) at i (tslib.es6.js:74)

該当のソースコード

html

1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>省略</title> 8 <meta name="description" content="省略"> 9 <meta name="robots" content="noindex"> 10 <link rel="manifest" href="manifest.json"> 11 <script> 12 window.addEventListener('load', function() { 13 if ('serviceWorker' in navigator) { 14 navigator.serviceWorker.register("firebase-messaging-sw.js") 15 } 16 }); 17 </script> 18</head> 19 20<body> 21  省略 22 <script src="https://www.gstatic.com/firebasejs/8.6.3/firebase-app.js"></script> 23 <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-messaging.js"></script> 24 <script src="省略.js"></script> 25</body> 26 27</html>

json

1{ 2 "name": "省略", 3 "short_name": "省略", 4 "icons": [{ 5 "src": "../image/省略.png", 6 "sizes": "192x192", 7 "type": "image/png" 8 }, { 9 "src": "../image/省略.png", 10 "sizes": "512x512", 11 "type": "image/png" 12 }], 13 "theme_color": "省略", 14 "background_color": "省略", 15 "display": "standalone", 16 "orientation": "portrait", 17 "scope": "/省略/", 18 "start_url": "/省略/" 19}

Javascript

1const STATIC_DATA = [ 2 'index.html', 3 '省略.css', 4 '省略.js' 5]; 6 7var CACHE_VERSION = '省略'; 8 9self.addEventListener('install', function(e) { 10 e.waitUntil( 11 caches.open(CACHE_VERSION).then(function(cache) { 12 return cache.addAll(STATIC_DATA); 13 }) 14 ); 15}); 16 17var CACHE_DISP_VERSION = '省略'; 18 19self.addEventListener('fetch', function(event) { 20 21 event.respondWith( 22 caches.match(event.request) 23 .then(function(response) { 24 if (response) { 25 return response; 26 } else { 27 return fetch(event.request) 28 .then(function(res) { 29 return caches.open(CACHE_DISP_VERSION) 30 .then(function(cache) { 31 cache.put(event.request.url, res.clone()); 32 return res; 33 }) 34 }) 35 .catch(function() {}); 36 } 37 }) 38 ); 39}); 40 41self.addEventListener('activate', function(event) { 42 43 event.waitUntil( 44 caches.keys() 45 .then(function(keyList) { 46 return Promise.all(keyList.map(function(key) { 47 if (key !== CACHE_VERSION && key !== CACHE_DISP_VERSION) { 48 return caches.delete(key); 49 } 50 })); 51 }) 52 ); 53 return self.clients.claim(); 54}); 55 56self.addEventListener('push', function(event) { 57 var data = {}; 58 if (event.data) { 59 data = event.data.json(); 60 } 61 var title = data.notification.title || "無題"; 62 var message = data.notification.body || "メッセージが届いています。"; 63 event.waitUntil( 64 self.registration.showNotification(title, { 65 'body': message 66 }) 67 ); 68}); 69 70self.addEventListener('notificationclick', function(event) { 71 event.notification.close(); 72 73 const url = 'https://省略/省略'; 74 75 event.waitUntil(clients.matchAll({ 76 type: "window", 77 includeUncontrolled: true 78 }).then(function(clientList) { 79 for (const client of clientList) { 80 if (client.url === url && 'focus' in client) 81 return client.focus(); 82 } 83 if (clients.openWindow) 84 return clients.openWindow(url); 85 })); 86});

javascript

1var firebaseConfig = { 2 apiKey: "省略", 3 authDomain: "省略", 4 projectId: "省略", 5 storageBucket: "省略", 6 messagingSenderId: "省略", 7 appId: "省略" 8}; 9firebase.initializeApp(firebaseConfig); 10 11const messaging = firebase.messaging(); 12const vapidKey = "省略" 13 14window.onload = function() { 15 notification() 16}; 17 18function notification() { 19 Notification.requestPermission().then((permission) => { 20 if (permission === 'granted') { 21 messaging.getToken({ vapidKey: vapidKey }) 22 .then(async(currentToken) => { 23 if (currentToken) { 24 // トークン取得成功 25 *サーバー登録処理省略* 26 } 27 }) 28 .catch((err) => { 29 console.log(err); 30 }); 31 } else { 32 // 通知を拒否した場合 33 } 34 }); 35}

試したこと

要素を検証>アプリケーション>登録解除で再読み込みしてみましたが変わりません。
firebase-messaging-sw.jsをドメインの直下に置く必要があることは調べましたが、補足情報に記載した通りの構造になっています。

補足情報(FW/ツールのバージョンなど)

構造
public
ー省略
ーーindex.html
ーー省略.js
ーーfirebase-messaging-sw.js
ーーmanifest.json

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問