1つのプロジェクトに複数アプリを登録できます。
マルチプラットフォームな場合のみに限らず、同じ構成のwebアプリが複数ある場合など。
今回はドメインの違う複数アプリを登録し、webプッシュしようとしました。
普通は別ドメインの複数webアプリ登録ってしないんだろうか。でも30個しかプロジェクト作れないし。
コンソールに表示されたエラー
後からかこうとするとどうやって解決したか忘れてるのでうろ覚え…
An error occurred while retrieving token. DOMException: Failed to execute 'subscribe' on 'PushManager': Subscription failed - no active Service Worker
firebase-messaging-sw.jsの存在と中身を確認。firebase系importとfirebase.initializeApp(アプリ毎の設定)、messaging.setBackgroundMessageHandlerが必要になると思います。
Uncaught (in promise) DOMException: Registration failed - missing applicationServerKey, and manifest empty or missing
最初のアプリでmanifest.jsonのlinkタグ入れなくても動いた気がするけど気のせい…?とりあえずhtmlに<link rel="manifest" href="manifest.json">
的なのを入れましょう。
またmanifest.jsonの中身は下記の感じで、固定数字っぽいです。(調べたらsenderid入れるみたいなのも見たけど、固定派が多かった。公式ページのどこに書いてあるか探せなかった…)
{
"gcm_sender_id": "103953800507"
}
Registration failed - A subscription with a different applicationServerKey (or gcm_sender_id) already exists;
これがはまってしまいました。applicationServerKeyってなんなのか。何をkeyにしているのか。。
pushManager.subscribeの第二引数を入れて解決しました。
navigator.serviceWorker.ready
.then((registration) => {
return registration.pushManager.subscribe({userVisibleOnly: true, applicationServerKey: myVapidKey});
})
myVapidKeyにはアプリごとのウェブプッシュ証明書の公開鍵が入っています。
firebaseのウェブの構成→ウェブプッシュ証明書の鍵をアプリごとに作る。
アプリごとに公開鍵をvapidKeyとして使う。
これでとりあえずうごきました。合っているのかわからないけど…