messaging.getToken()は deprecatedになりました。register() + onRegistered() で FID を取得する方式を使います。Message.token / MulticastMessage.tokens がdeprecatedとなりました。fid / fids、sendEachForMulticast({ fids }) を使います。旧方式(非推奨)
messaging.getToken({
vapidKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
})
→ このメソッドは deprecated。
新方式(推奨・FIDベース)
import { getMessaging, onRegistered, register } from "firebase/messaging";
const messaging = getMessaging();
// 登録が完了すると Installation ID (FID) がコールバックで渡される
onRegistered(messaging, (installationId) => {
console.log('Registered installation ID:', installationId);
sendRegistrationToServer(installationId); // サーバーへ送信
});
register(messaging, {
vapidKey: '<YOUR_PUBLIC_VAPID_KEY_HERE>' // Firebase Console で確認できる公開鍵
}).catch((err) => {
console.error('An error occurred while registering', err);
});
register() の引数として渡します。firebase-messaging-sw.js をドメインのルートに配置しておく必要がある点は変わりません。fid を主として設計しておくと、後々の再移行が不要になります。token ベースのままで更新が追いついていません。Message.token → Message.fid、MulticastMessage.tokens → MulticastMessage.fids という対応関係が用意されつつありますが、公式の具体的なサンプルコードはまだ乏しいため、実装時は各言語 Admin SDK(Node.js v14.1.0+、Java v9.10.0+、Python v7.5.0+)のリファレンス/リリースノートを都度確認するのが安全です。token を使った送信も引き続き動作するので、既存実装を即座に壊す必要はありません。参考:
・「以前の HTTP」(レガシー)→ 2024年6月に完全廃止済み。使用不可。
( https://fcm.googleapis.com/fcm/send ) ※現在は動作しません
・「HTTP v1」を使う ( https://fcm.googleapis.com/v1/projects/<プロジェクトID>/messages:send )
必要なもの(サービスアカウントの秘密鍵 json → 秘密鍵 jsonからアクセストークンを生成してそれを使用する)
トークン(および今後は FID)の扱いについて: https://firebase.google.com/docs/cloud-messaging/manage-tokens?hl=ja
※上記ドキュメントも token ベースの記述が中心で、FID への言及がまだ薄いため、実装前に最新のリリースノートを確認することを推奨します。
https://qiita.com/yum_fishing/items/54b4f10dea24e0d7722d
・(サーバー側)Topic を作成する
・(利用者)Topic に登録する(この登録も内部的には token/FID を使う)
・(サーバー側)Topic に対して通知を送信すると、そのトピックをサブスクライブしている全員に通知が届く
register() / onRegistered()(FID ベース)で書く。getToken() 実装は今すぐ壊れないが、次回の改修タイミングで移行を検討する。getToken(旧)と register(新)を同一アプリ内で混在させない(公式が明示的に禁止)。token→fid の変更が入っていないかリリースノートを確認する。