2017年7月8日土曜日

Ruby で Firebase のプッシュ通知を送信する方法

概要

前回 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 のコンソールから取得できます
ログイン後

プロジェクトの設定 -> クラウドメッセージング -> サーバキー

で取得できます

firebase_push_with_ruby1.png

コード

  • 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 件のコメント:

コメントを投稿