📍
Go で Firebase Cloud Messaging を用いて Web push 通知を行う
概要
今回は Go から以下のような Web push 通知を送信する例を紹介します。
Firebase Cloud Messaging とは
Firebase の Cloud Messaging を用いることで Instagram や YouTube でも利用されている Web push 通知を送信することが出来ます。
Push 通知を送信するまでの流れ
クライアントでトークンを発行する → トークンをサーバ側で保存する → サーバ側から Firebase に対してメッセージの発行を行う
React によるクライアント登録
firebase v9 ( @firebase/messaging@0.9.16
) を用いたクライアント側での Firebase Cloud Messaging トークンの発行について説明します。
クライアント側では以下のコードを用いてクライアントごとに Firebase Cloud Messaging トークンを生成します。
import { getMessaging, getToken } from "firebase/messaging"
const app = initializeApp(firebaseConfig)
const messaging = getMessaging(app)
const fcm_token = await getToken(messaging, {
vapidKey: "****",
})
console.log(fcm_token)
その後、クライアントから何かしらの方法 ( API など ) を用いてサーバ側でトークンを保存します。ここで保存したトークンは適切なタイミングで更新などを行う必要があります。
この記事では上記のトークンをサーバ側で保存している前提で進めます。
Go による通知送信
一度に複数のデバイス ( ユーザ ) に通知を送信するサンプルを掲載します。
- firebase の初期化
import (
firebase "firebase.google.com/go"
)
app, err := firebase.NewApp(context.TODO(), &firebase.Config{})
if err != nil {
log.Print(err)
}
- Cloud Messaging の初期化
client, err := app.Messaging(context.TODO())
if err != nil {
log.Print(err)
}
- message の作成
WebpushFcmOptions.Link
に https
のリンクを設定することで Push 通知をクリックした際に遷移するリンクを設定出来ます。
Tokens
には各クライアントで生成した Firebase Cloud Messaging のトークンを文字列の配列で設定します。
message := &messaging.MulticastMessage{
Tokens: tokens,
Notification: notification,
Webpush: &messaging.WebpushConfig{
FcmOptions: &messaging.WebpushFcmOptions{
Link: "https://example.com",
},
},
}
- message の送信
br, err := client.SendMulticast(context.TODO(), message)
if err != nil {
log.Print(err)
}
Discussion