Rails からネイティブアプリへのプッシュ通知を実装する際に、Firebase Admin SDK を使わずに Firebase Cloud Messaging (FCM) に利用する access_token を取得する方法です。
※ Firebase Admin SDK は Ruby に対応していません
利用 Gem
- googleauth - Google Auth Library for Ruby
Gemfile
gem 'googleauth'
bash
# インストール
$ bundle
秘密鍵の取得方法
https://console.firebase.google.com/project/
Firebase のダッシュボードにアクセスし、下記の手順で秘密鍵を取得する。
サービス アカウントを作成 をクリックする。
新しい秘密鍵の生成 をクリックする。
キーを生成 をクリックする。
下記のような内容の 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
以上です。