簡単にトピックを送信する方法(裏技?)があるが、ドキュメントに書いてなかったのでここにメモしておいた。
Firebase Console からトピックを送る上での問題
Firebase の通知管理画面は以下のような感じになっていて、ラジオボタンからトピックを選び、矢印のところからトピックが選択できる
一見便利そうに見えて不便なところがある。
- セレクトボックスとなっているので、選択式になっていて入力することができない。
- ここには反映されるまでに時間がかかる(1日ぐらい待たされる感じがする)ので、ストレスが溜まる。
代替手段
そこで以下のように「単一の端末」を選んでトピック欄に「/topic/トピック名」と入力して送信すると、特定のトピックに送信することができる。
この仕様は何?
Firebase Notification も裏側の実装は FCM であることを考えると、これは納得がいく仕様であることが理解できる。
FCM で単一の端末に対して通知を送る際は以下のような感じで API に対して json を送信する。
{
"to" : "個別の端末のTOKEN",
"notification": {
"title": "タイトルです",
"body": "メッセージです",
"content_available": true,
},
"priority" : "normal",
"data": {
"hoge": "foo"
}
}
これに対し、FCM でトピックに対して通知を送る際は以下のような感じで API に対して json を送信する。
{
"to" : "/topics/topic_name_daaa",
"notification": {
"title": "タイトルです",
"body": "メッセージです",
"content_available": true,
},
"priority" : "normal",
"data": {
"hoge": "foo"
}
}
そう、to の中身が変わっただけだ。たぶん Firebase console の裏側の実装も to を置き換えているだけだから、このような動きをするのだと思われる。
ちなみに送信するときに使用した curl はこんな感じ
curl --header "Authorization: key=MYKEYYYYYY" --header Content-Type:"application/json" https://fcm.googleapis.com/fcm/send -d @info.json