Android で CLI を使用して FCM メッセージの送信テストを行う方法
Android アプリの開発において、FCM(Firebase Cloud Messaging)のプッシュ通知テストは不可欠です。Firebase Console の管理画面からもテストメッセージを送信できますが、開発効率や自動化テストの観点からは、コマンドラインインターフェース(CLI)から送信する方が柔軟で便利です。
本記事では、gcloud + curl を用いて FCM HTTP API を呼び出し、特定のデバイスにテストメッセージを送信する手順を紹介します。
1. Google Cloud SDK のインストール(macOS)
まず、認証用トークンを取得するために Google Cloud SDK をインストールします。
brew install --cask google-cloud-sdk
2. ログインとプロジェクト設定
gcloud で認証を行い、対象となる Firebase プロジェクトを設定します。
# ブラウザが起動し、ログインを求められます
gcloud auth login
gcloud config set project <your-firebase-project-id>
3. FCM トークンの取得
Android デバイス上でアプリを起動し、FCM 登録トークンを取得します。adb を使って Logcat をフィルタリングすることで簡単に見つけることができます。
adb logcat -s FCMRepository FIMessage | grep -i "FCM Token"
ログに出力されたトークンをコピーし、ターミナルで以下の環境変数を設定します。
[!TIP] もちろん、環境変数を設定せずにコマンドへ直接値を入力(または貼り付け)して実行しても構いません。FCM トークンやアクセストークンは頻繁に変更されるため、その都度環境変数を再設定する手間を省きたい場合は、直接指定する方が便利です。
export FCM_TOKEN="<取得したトークン>"
export PROJECT_ID="<your-firebase-project-id>"
export ACCESS_TOKEN="$(gcloud auth print-access-token)"
4. データメッセージの送信 (Data Message)
データメッセージは、アプリのバックグラウンドサービスによって直接処理され、通知センターに自動でポップアップを表示しません。
curl -X POST "https://fcm.googleapis.com/v1/projects/$PROJECT_ID/messages:send" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": {
"token": "'"$FCM_TOKEN"'",
"data": {
"key1": "value1",
"key2": "value2"
}
}
}'
5. 通知メッセージの送信 (Notification Message)
通知メッセージは、アプリがバックグラウンドにある場合、Android システムによって通知領域に直接表示されます。
curl -X POST "https://fcm.googleapis.com/v1/projects/$PROJECT_ID/messages:send" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": {
"token": "'"$FCM_TOKEN"'",
"notification": {
"title": "Test Title",
"body": "Test body message"
}
}
}'
6. 通知+データメッセージの送信 (Notification + Data)
通知とデータを組み合わせて送信することで、通知をタップしたときにカスタムデータを基にして特定の画面へ遷移させることができます。
curl -X POST "https://fcm.googleapis.com/v1/projects/$PROJECT_ID/messages:send" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": {
"token": "'"$FCM_TOKEN"'",
"notification": {
"title": "Hello",
"body": "Tap to open"
},
"data": {
"screen": "home",
"item_id": "99"
}
}
}'
7. アクセストークンの再取得(有効期限切れの場合)
gcloud で生成されたアクセストークンの有効期限は通常 1 時間です。期限切れエラーが発生した場合は、以下のコマンドで環境変数を更新してください。
export ACCESS_TOKEN="$(gcloud auth print-access-token)"
8. デバイスログの検証
アプリがメッセージを正しく受信できているかを Logcat から確認します。
adb logcat -s FIMessage
9. 権限エラー時の再ログイン
権限や認証関連のエラー(PERMISSION_DENIED など)が発生した場合は、再ログインとアプリケーションのデフォルト認証情報の再設定を行います。
gcloud auth login
gcloud auth application-default login