RailsでFirebase Cloud Messaging(FCM)を使ってプッシュ通知を送信する

6 min read読了の目安(約3800字

概要

流れ

  1. 登録トークンを取得する
  2. 取得したトークンを使って送信処理(FCM HTTP v1 APIを使用)
    1. 登録トークンを指定しての送信(1件ずつ送信)
    2. トピックへの送信(複数の対象への送信)

注意点

記事中に登場する、{プロジェクトID}のような中括弧で囲んだ項目は、中身をその場所に展開することを指すことにします。実際には中括弧は不要です。

登録トークンの取得(アプリ側)

登録トークンとは

FCMがアプリ インスタンスを一意に識別するためのトークン。プッシュ通知を受け取るアプリ側で設定を行う。

登録トークンの取得

Firebaseコンソール側での準備(認証情報の設定)

OAuth 2.0 アクセストークンの取得(Rails側)

登録トークンを指定して送信(Rails側)

  • POST https://fcm.googleapis.com/v1/projects/{プロジェクトID}/messages:send

  • Header

    • Authorization
      • Bearer {OAuth2.0 アクセストークン}
    • Content-Type
      • application/json
  • Body

    {
       "message":{
          "token":"{登録トークン}",
          "notification":{
            "body":"This is an FCM notification message!",
            "title":"FCM Message"
          }
       }
    }
    
  • プロジェクトIDの取得

    • 設定 → 全般 → プロジェクト ID
  • uri = URI.parse("https://fcm.googleapis.com/v1/projects/{プロジェクトID}/messages:send")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    req = Net::HTTP::Post.new(uri.request_uri)
    req['Authorization'] = "Bearer #{access_token['access_token']}"
    req['Content-Type'] = "application/json"
    req.body = body
    res = http.request(req)
    
  • 参考:https://firebase.google.com/docs/cloud-messaging/send-message?hl=ja#send-messages-to-specific-devices

トピックへ登録トークンを紐づける(Rails側)

  • POST https://iid.googleapis.com/iid/v1/{登録トークン}/rel/topics/{トピック名}
  • Header
    • Authorization
      • key={サーバーキー}
      • サーバーキーは、プロジェクトを設定 → Cloud Messaging → サーバーキー から取得

トピックへ送信(Rails側)

  • POST https://fcm.googleapis.com/v1/projects/{プロジェクトID}/messages:send

  • Header

    • Authorization
      • Bearer {OAuth2.0 アクセストークン}
  • Body

    {
    	"message" : {
    		"topic" : "{トピック名}",
    		"notification" : {
    			"title" : "title test",
    			"body" : "topic test"
    		} 
    	}
    }
    

注意点

  • トピックへ登録トークンを紐づけるAPIと、通知を送信するAPIで認証の方法が違うので気をつけてください