2
1

More than 3 years have passed since last update.

RubyでFirebase Cloud Messagingに利用するアクセストークンを取得する

Last updated at Posted at 2020-01-30

Rails からネイティブアプリへのプッシュ通知を実装する際に、Firebase Admin SDK を使わずに Firebase Cloud Messaging (FCM) に利用する access_token を取得する方法です。
※ Firebase Admin SDK は Ruby に対応していません

利用 Gem

Gemfile
gem 'googleauth'
bash
# インストール
$ bundle

秘密鍵の取得方法

https://console.firebase.google.com/project/
Firebase のダッシュボードにアクセスし、下記の手順で秘密鍵を取得する。
firebase_1.png
サービス アカウントを作成 をクリックする。
firebase_2.png
新しい秘密鍵の生成 をクリックする。
firebase_3.png
キーを生成 をクリックする。

下記のような内容の json ファイルがダウンロードできる。

my-project-name-xxxx-firebase-adminsdk-xxxx.json
{
  "type": "service_account",
  "project_id": "my-project-name-xxxx...",
  "private_key_id": "abcdef012345...",
  "private_key": "-----BEGIN PRIVATE KEY-----xxxxxxx....",
  "client_email": "firebase-adminsdk-xxxx@my-project-name-xxxx.iam.gserviceaccount.com",
  "client_id": "01234567891...",
  ...
  ...
}

アクセストークンの取得方法

ダウンロードした秘密鍵の json ファイルを適切な場所に保存します。
※ ここでは config/ ディレクトリ配下に firebase-adminsdk.json という名前で保存したとする

配置後は、以下のようなコードで取得が可能です。

SECRET_KEY_PATH = File.open("#{Rails.root}/config/firebase-adminsdk.json")

def credential
  authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
    json_key_io: SECRET_KEY_PATH,
    scope: 'https://www.googleapis.com/auth/firebase.messaging'
  )
  authorizer.fetch_access_token!
end

# --- 利用側 ---
puts credential['access_token']
# 出力例 : xxxxxxxxxxxxxxxxxxxxxx

環境変数を使う場合

ダウンロードした秘密鍵の json ファイルをもとに、下記の環境変数を設定する。
- GOOGLE_CLIENT_ID
- GOOGLE_CLIENT_EMAIL
- GOOGLE_ACCOUNT_TYPE
- GOOGLE_PRIVATE_KEY

設定後は、下記のようなコードで取得可能になる。


def credential
  authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
    scope: 'https://www.googleapis.com/auth/firebase.messaging'
  )
  authorizer.fetch_access_token!
end

# --- 利用側 ---
puts credential['access_token']
# 出力例 : xxxxxxxxxxxxxxxxxxxxxx

以上です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1