概要
前回 Firebase を使って単一のデバイスにプッシュ通知を送信してみました
そのときはコンソールを使いましたが今回は Ruby から送信してみたいと思います
所謂、自動送信などを実現することができます
環境
- mac OS X 10.12.5
- Xcode 8.3.3 (8E3004b)
- Ruby 2.2.3p173
ライブラリインストール
- bundle init
- vim Gemfile
gem "fcm"
- bundle install
サーバキーの取得
Firebase のコンソールから取得できます
ログイン後
プロジェクトの設定 -> クラウドメッセージング -> サーバキー
で取得できます
コード
- vim send_push.rb
# coding: utf-8
require 'fcm'
fcm = FCM.new("先ほど取得したサーバキーはここに入力します")
token = "eIWudgln0C4:APA91bHA9sX7WNO6cBVAzV_DLZ89Ap54SSg6uNPOtWn8VLGdJlxutyu458yUR4yrz7ILNcNCaK5sAWhIyqq8W16XXPLfnDrenjmf_OBpLm5dJGCeZXrZ8hn5eJM2d8AYw8uQG8Gkj5E0"
opts = {
"notification" => {
"body" => "新着記事があります!"
}
}
ret = fcm.send_with_notification_key(token, opts)
p ret
実行
- bundle exec ruby send_push.rb
で成功すると以下のようなレスポンスが得られます
{:body=>"{\"multicast_id\":8431807027711221811,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1499328992939718%350c1818350c1818\"}]}", :headers=>{"content-type"=>["application/json; charset=UTF-8"], "date"=>["Thu, 06 Jul 2017 08:16:33 GMT"], "expires"=>["Thu, 06 Jul 2017 08:16:33 GMT"], "cache-control"=>["private, max-age=0"], "x-content-type-options"=>["nosniff"], "x-frame-options"=>["SAMEORIGIN"], "x-xss-protection"=>["1; mode=block"], "server"=>["GSE"], "alt-svc"=>["quic=\":443\"; ma=2592000; v=\"39,38,37,36,35\""], "accept-ranges"=>["none"], "vary"=>["Accept-Encoding"], "connection"=>["close"]}, :status_code=>200, :response=>"success"}
200 で返ってくれば OK です
ちょっと説明
今回の場合 notification というキーを使っています
これを使うことで通知が届くのですが、他に data というキーもありこれはカスタム用のペイロードを設定するためのキーなので、プッシュ通知は送信できるのですが、実際に通知バーに通知が出ません
所謂サイレントプッシュなどに使うためのキーになります
各種キーの詳細は参考サイトにある Firebase の公式ページを参考にすると良いと思います
また、API でプッシュ通知を送信した場合、なんとコンソール画面のプッシュ通知の一覧に表示されません
理由はわかりませんが現状はそういう仕様らしいので、履歴として管理したいのであれば何かしら自分で仕組みを作成する必要がありそうです
そしてもう一つ問題なのがコンソールではターゲットセグメントでアプリに対してプッシュ通知を送信できるのですが、API だとそれができません
なので、強制的に /all
みたいなトピックを Subscribe するような実装をアプリ側で行い、その /all
に対してプッシュ通知を送信することでアプリを使っている全ユーザに配信することができるようになります
最後に
Ruby を使って Firebase のプッシュ通知を送信してみました
1 つの端末に送信する方法を紹介しましたが、同じようにトピックにも送信することができると思います
指定するキーを間違えないようにしないとうまくプッシュ通知を受信することができないことがあるのでキーの内容については確認することをおすすめします
アプリ全体に送信することができなかったり、コンソールに結果が表示されないなど少し不可解な仕様はありますが、とりあえず今回の方法でプログラムからプッシュ通知を送信することはできると思います
0 件のコメント:
コメントを投稿