Push通知を実装したくなる
結構なサイトで解説されており手順通りに行えば特に問題もなく実装できそうだったけど、色々と躓いたところもあったので忘備録的なアレです。
参考にしたサイトは以下のサイト。2019-2020年と新しいかったため参考になりました。実装は@yuppejpさんのほうで行いました。
とFCMの公式の実装方法です
まずはテストプロジェクトで一番上のサイトの通りに実装しました。Firebaseのサイトの通知の作成より通知を作って送ることはできました。
最後の「curlでメッセージを投げる」でPOSTでのやり方が書いてあります。この例では特定のトークンのユーザーに対し送る感じです。
まずはここまでしっかり実装して通知がくるようにしておきましょう(結構長い道のりです)。
トピックを指定して送る(ユーザー全体に送る)
僕の場合はアプリを利用しているユーザー全体にプッシュ通知したかったので、少し加筆しておきます。
「ユーザー全体に送る」
というイメージではなく
「任意のトピックを購読(設定)しているユーザーに対して送る」
という感じです。アプリ全体のユーザーに送りたい場合は全ユーザーに任意のトピックを購読するように設定してあげればよいわけです。具体的にはMainActivity.javaに受信したいトピックをsubscribeすればいいだけです。ここでのトピック名はhogehogeです。
1 2 3 4 5 6 7 8 9 10 11 |
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Push通知の購読開始 FirebaseMessaging.getInstance().subscribeToTopic("hogehoge"); } } |
これで終わりです。
Nofiticationのアイコンを作る
通知時に出る白黒っぽいアイコンを専用につくらなければなりません
上のサイトを参考に作成し、リソース追加後、マニフェストに記述を追加しました。
1 2 3 4 5 6 7 8 9 10 11 12 |
<!-- add 通知関連の追加 --> <service android:name=".MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_stat_name" /> <!-- add ここまで --> |
通知関連のマニフェスト追加は上のようになると思います。アイコンはic_stat_nameでMyFirebaseMessagingServiceはFirebaseMessagingServiceを継承した独自クラスです。先のサイト通りに実装していればわかるとおもいます。
FCM HTTP APIを使ってテスト送信
しょっぱなからアレなんですが、Googleは「FCM HTTP API」から「FCM HTTP v1 API」への移行を勧めています。
「FCM HTTP API」はトークンを指定するだけで投げれるんですが、非推奨なのでいつ使えなくなるかわからないのでサーバーなどに実装する場合「FCM HTTP v1 API」を用いたほうがよいですが、ステップが増えるので今回は簡単に「FCM HTTP API」でテストします。ちなみに先のサイトはcurlも「FCM HTTP API」を叩いています。
また「curlって何よ」てきな人にはブラウザのプラグインなどにある「REST Client」を使うと便利です。僕はFireFoxの下のプラグインを使っています。
MethodをPOST、ヘッダーにAuthorization: key=[サーバーキー]とContent-Type: application/jsonを入れておいて、BODYにPOSTデータを入れてsendを押せば結果がでます。サーバーキーは[設定]の[Colud Messaging]にあります。
実際のPOSTデータは
1 2 3 4 5 6 7 8 9 |
{ { "to":"/topics/hogehoge", "notification":{ "title" : "通知テスト" "body" : "通知を送りましたよ!!" }, "priority":10 } |
のようにトピックを指定します。このときtoで指定するとき「/topics/」をつけないとダメでした。
通知が来れば成功です。送られない場合、レスポンスがちゃんとかえってきているかRESTの結果を見てみてください。それでもダメならトピックを指定しないなどワンステップずつ確認する必要があります。
先にも言った通りこれは「FCM HTTP API」でのテストですが「FCM HTTP v1 API」で実装したほうが将来的にいいと思います。これにはサーバーサイドの問題もあります。実際レンタルサーバー(バリューサーバー)で実装した記事を別に書きたいと思います
追記 記事にしてみました