結果は見つかりませんでした
その言葉を使ったものは見つかりませんでした。他の言葉で検索してみてください。
< /span>< /i>はじめに< /h1> FCM(Firebase Cloud Messaging)でWeb Pushする記事はいくつかありますが、2023年6月20日に非推奨になっているCloud Messaging API(レガシー)を使用した記事が多いので、最新のFirebase Cl
FCM(Firebase Cloud Messaging)でWeb Pushする記事はいくつかありますが、2023年6月20日に非推奨になっているCloud Messaging API(レガシー)を使用した記事が多いので、最新のFirebase Cloud Messaging API(V1)で動かしてみます。< /p>
・FCMとは
Googleが提供するクラウドベースのメッセージングソリューションです。主にモバイルおよびWebアプリケーション向けに設計されており、リアルタイムでメッセージを送受信するためのサービスです 。
・Web Pushとは
Webブラウザを介してユーザーに対してリアルタイムで通知を送信する技術です。主にWebサイトやWebアプリケーションで利用され、ユーザーがサービスにアクセスしていないときでも、重要な情報を届けることができます。< /p>
・Web Push導入を検討している方< /p>
まず初めに、下記記事を参考にして、プロジェクトとマイアプリをFirebaseに登録します 。
https://ralacode.com/blog/post/register-firebase/< /p>
登録後、下記情報をコピーしておきます。
・「プロジェクトの設定」 – 「全般」 – 「マイアプリ」のプロジェクトIDとCDNのコード
< /p>
・「プロジェクトの設定」 – 「Cloud Messaging」の鍵ペア
< /p>
・「プロジェクトの設定」-「サービスアカウント」の新しい秘密鍵を生成(jsonファイルのダウンロード)
< /p>
次にソースコードを作成していきます 。
ファイル構成は以下の通りです。< /p>
.
├── front
│ ├── index.html
│ ├── firebase-message-sw.js
│ ├── manifest.json
│ └── service-worker.js
└── server
├── push.php
└── XXXXXXXXXX.json
< /code>< /pre>
< /span>< /i>index.html< /h1>
Web Pushを受信するWebアプリで、「トークン取得」ボタン押下時にFCMトークンを取得し、ブラウザに表示します。
本来であればFCMトークンはサーバーで適切に管理する必要がありますが、今回は検証目的なので簡易的に実装しています。< /p>
index.html< /span>< /p>
<!< /span>DOCTYPE< /span> html< /span>>< /span>
<< /span>html< /span>>< /span>
<< /span>head< /span>>< /span>
<< /span>meta< /span> charset< /span>=< /span>'utf-8/'< /span>>< /span>
<< /span>link< /span> rel< /span>=< /span>"manifest"< /span> href< /span>=< /span>" ./manifest.json "< /span>>< /span>
<< /span>script< /span>>< /span>
// service workerが有効なら、service-worker.js を登録します< /span>
if< /span> (< /span>'serviceworker'< /span> in< /span> navigator< /span>)< /span> {< /span>
navigator< /span>.< /span>serviceworker< /span>.< /span>register< /span>(< /span>'./service-worker.js'< /span>) ;< /span>
}< /span>
</< /span>script< /span>>< /span>
</< /span>head< /span>>< /span>
<< /span>body< /span>>< /span>
<< /span>button< /span> i d< /span>=< /span>"allow_push_notification"< /span>>< /span>トークン取得< /span></< /span>button< /span>>< /span>
<< /span>p< /span> i d< /span>=< /span>"output"< /span>></< /span>p< /span>>< /span>
<< /span>script< /span> type< /span>=< /span>"module"< /span>>< /span>
import< /span> {< /span> initializeApp< /span> }< /span> from< /span> "https://www.gstatic.com/firebasejs/10.12.2/firebase-app.js"< /span>;< /span>
import< /span> {< /span> getMessaging< /span>,< /span> gettoken< /span> }< /span> from< /span> "https://www.gstatic.com/firebasejs/10.12.2/firebase-message.js"< /span>;< /span>
// Your web app 's Firebase configuration< /span>
const< /span> firebaseConfig< /span> =< /span> {< /span>
apiKey< /span>:< /span> "XXXXXXXXXX"< /span>,< /span>
authDomain< /span>:< /span> "XXXXXXXXXX"< /span>,< /span>
projectId< /span>:< /span> "XXXXXXXXXX"< /span>,< /span>
storageBucket< /span>:< /span> "XXXXXXXXXX"< /span>,< /span>
messageSenderId< /span>:< /span> "XXXXXXXXXX"< /span>,< /span>
appId< /span>:< /span> "XXXXXXXXXX"< /span>
};< /span>
// initialize Firebase< /span>
const< /span> app< /span> =< /span> initializeApp< /span>(< /span>firebaseConfig< /span>) ;< /span>
// 通知を許可するボタンが押された時のアクション< /span>
const< /span> btn< /span> =< /span> document< /span>.< /span>getElementById< /span>(< /span>' allow_push_notification '< /span>) ;< /span>
btn< /span>.< /span>addEventListener< /span>(< /span>"click"< /span>,< /span> function< /span> ()< /span> {< /span>
//let promise = Notification.requestPermission() ;< /span>
//console.log("promise : " , promise ) ;< /span>
if< /span> (< /span>!< /span>(< /span>" notification "< /span> in< /span> window< /span>))< /span> {< /span>
// ブラウザーが通知に対応しているか調べる< /span>
alert< /span>(< /span>" このブラウザーはデスクトップ通知には対応していません 。 "< /span>) ;< /span>
}< /span> else< /span> if< /span> (< /span>Notification< /span>.< /span>permission< /span> ! = =< /span> " deny "< /span>)< /span> {< /span>
//if(Notification.permission ! = = " deny ") {< /span>
Notification< /span>.< /span>requestPermission< /span>()< /span>.< /span>then< /span>( (< /span>permission< /span>)< /span> =>< /span> {< /span>
const< /span> message< /span> =< /span> getMessaging< /span>() ;< /span>
// Add the public key generated from the console here.< /span>
gettoken< /span>(< /span>message< /span>,< /span> {< /span>vapi dKey< /span>:< /span> "★鍵ペア★"< /span>} )< /span>
.< /span>then< /span>( (< /span>token< /span>)< /span> =>< /span> {< /span>
if< /span> (< /span>token< /span>)< /span> {< /span>
// tokenを出力< /span>
//document.getElementById('output').textcontent = `${token.Promise}`;< /span>
console< /span>.< /span>log< /span>(< /span> "token"< /span>,< /span> token< /span>) ;< /span>
document< /span>.< /span>getElementById< /span>(< /span>'output'< /span>)< /span>.< /span>textcontent< /span> =< /span> token< /span>;< /span>
}< /span>else< /span>{< /span>
console< /span>.< /span>log< /span>(< /span>'登録トークンがありません。生成する許可をリクエストします。'< /span>) ;< /span>
}< /span>
} )< /span>
.< /span>catch< /span>( (< /span>err< /span>)< /span> =>< /span> {< /span>
console< /span>.< /span>log< /span>(< /span>'gettoken Error'< /span>,< /span>err< /span>) ;< /span>
} ) ;< /span>
} ) ;< /span>
}< /span>
} ) ;< /span>
</< /span>script< /span>>< /span>
</< /span>body< /span>>< /span>
</< /span>html< /span>>< /span>
< /code>< /pre>
< /span>
「"XXXXXXXXXX"」の部分は、FirebaseのCDNのコードに変更してください。
「★鍵ペア★」の部分は、Firebaseの鍵ペアに変更してください。< /p>
< /span>< /i>firebase-message-sw.js< /h1>
FCMのService Workerであり、Web Push通知を受信した際に動作します。< /p>
firebase-message-sw.js< /span>< /p>
// Push通知を受け取ると呼ばれる< /span>
self< /span>.< /span>addEventListener< /span>(< /span>'push'< /span>,< /span> function< /span> (< /span>event< /span>)< /span> {< /span>
// メッセージを表示する< /span>
var< /span> data< /span> =< /span> {};< /span>
if< /span> (< /span>event< /span>.< /span>data< /span>)< /span> {< /span>
data< /span> =< /span> event< /span>.< /span>data< /span>.< /span>json< /span>() ;< /span>
}< /span>
var< /span> title< /span> =< /span> data< /span>.< /span>notification< /span>.< /span>title< /span>;< /span>
var< /span> message< /span> =< /span> data< /span>.< /span>notification< /span>.< /span>body< /span>;< /span>
event< /span>.< /span>waituntil< /span>(< /span>
self< /span>.< /span>registration< /span>.< /span>showNotification< /span>(< /span>title< /span>,< /span> {< /span>
'body'< /span>:< /span> message< /span>
} )< /span>
) ;< /span>
} ) ;< /span>
< /code>< /pre>
< /span>< /i>manifest.json / service-worker.js< /h1>
iOSでWeb Pushを受信する場合はPWA化が必要です。
PWA化する場合は下記2つのファイルを作成します。
( iosで使用しない場合は不要です )< /p>
manifest.json< /span>< /p>
{< /span>
"< /span>$schema< /span>"< /span>:< /span> " https://json.schemastore.org/web-manifest-combined.json "< /span>,< /span>
"name"< /span>:< /span> " web Push test "< /span>,< /span>
"short_name"< /span>:< /span> "Push Test"< /span>,< /span>
"start_url"< /span>:< /span> "."< /span>,< /span>
"display"< /span>:< /span> "standalone"< /span>,< /span>
"background_color"< /span>:< /span> "#fff"< /span>,< /span>
"description"< /span>:< /span> " web push テスト "< /span>
}< /span>
< /code>< /pre>
service-worker.js< /span>< /p>
var< /span> cache_name< /span> =< /span> ' pwasample '< /span>;< /span>
var< /span> urlsToCache< /span> =< /span> [< /span>
'/apps/pwa/'< /span>,< /span>
' /apps / pwa / index.html '< /span>
];< /span>
self< /span>.< /span>addEventListener< /span>(< /span>'install'< /span>,< /span> function< /span>(< /span>event< /span>)< /span> {< /span>
event< /span>.< /span>waituntil< /span>(< /span>