1. はじめに
FCM レガシー API と比較して、FCM HTTP v1 API は有効期間の短いアクセス トークンを使用するより安全な認可モデルを提供します。FCM v1 API のアクセス トークンを生成する手順は、レガシー API の手順とは大きく異なります。
この Codelab では、FCM HTTP v1 API を使用して Android アプリにプッシュ通知を送信できるように、クライアント側とサーバー側でのセットアップのプロセスについて説明します。v1 API の認証情報生成の主な手順がハイライト表示されます。
詳細情報:
前提条件
- Java と Android 開発に関する基本的な知識
学習内容
- FCM HTTP v1 API を使用して Android アプリにプッシュ通知を送信できるようにするためのクライアントサイドとサーバーサイドのセットアップの詳細な手順
- サービス アカウントを使用した HTTP v1 API の認証情報の生成
- HTTP v1 API を介したテスト メッセージの送信
必要なもの
Android Studio の最新の安定版
次のいずれかのデバイス:
- パソコンに接続されている Android の実機
- Android Emulator(Android Emulator 上でアプリを実行するを参照)
Java 開発環境または任意のコードエディタ
2. Firebase プロジェクトと Android アプリのセットアップ
この Codelab の最後では、Firebase Cloud Messaging を使用してアプリにメッセージを送信できるようになります。そのためには、Firebase プロジェクトを作成する必要があります。この Codelab では、FCM と統合するためのサンプルコードを含む Android アプリも提供しています。
Firebase プロジェクトの設定
- 「ステップ 1: Firebase プロジェクトを作成する」の手順に沿って、この Codelab 用に独自の Firebase プロジェクトを作成します。
Android アプリのセットアップ
この Codelab で提供されているサンプル Android アプリは、すでに FCM と統合されています。起動すると、FCM サーバーに登録し、トピックにサブスクライブします。この Codelab の後半では、トピックにトピック メッセージを送信し、アプリがそのメッセージを受信します。
- Firebase Android クイックスタート サンプルをダウンロードする。
- https://github.com/firebase/quickstart-android/tree/master/messaging のプロジェクトを Android Studio にインポートします。
- Firebase コンソールでアプリを登録します。アプリ名は
com.google.firebase.quickstart.fcm
です。「ステップ 2: アプリを Firebase に登録する」セクションの手順に沿って、このアプリを Firebase プロジェクトに登録します。 - 「ステップ 3: Firebase 構成ファイルを追加する」のパート 1 の手順を行います。
google-services.json
をダウンロードしてプロジェクトに追加します。プロジェクトをビルドして実行します。
3. アプリサーバーをセットアップする
アプリがセットアップされたので、FCM v1 API を使用してアプリにメッセージを送信するためのサーバーサイド コードサンプルをダウンロードする必要があります。このコードは、API 認証情報(次のセクションで説明)を読み込んでアクセス トークンを生成します。次に、FCM トピック メッセージングを使用してアプリにメッセージを送信します。
- GitHub プロジェクトをダウンロードして、スターター サーバー コードをインポートします。「メッセージ」project は、メッセージを送信するための機能を提供する firebase-admin SDK に依存する Gradle ベースの Java プロジェクトです。
アプリサーバーと FCM の連携について詳しくは、サーバー環境と FCM のドキュメントをご覧ください。
4. v1 認証情報を取得する
FCM HTTP v1 API は、OAuth2 セキュリティ モデルに則って、有効期間の短いアクセス トークンを使用します。FCM レガシー API で使用される静的 API キーと比較して、有効期間の短いアクセス トークンは認証情報漏洩のリスクが低くなります。このセクションでは、API の呼び出しに使用するアクセス トークンを生成するための認証情報を作成する手順について説明します。
- Firebase サービス アカウントを設定して、Firebase Admin SDK が FCM API の呼び出しを承認できるようにします。Firebase コンソールで [プロジェクトの設定] を開き、[サービス アカウント] タブを選択します。[新しい秘密鍵の生成] をクリックして、構成スニペットをダウンロードします。
- ダウンロードした GitHub プロジェクトで、ダウンロードしたファイルの名前を
service-account.json
に変更し、プロジェクトのmessaging/
パスにコピーします。 Messaging.java
クラスのgetAccessToken()
メソッド(下記を参照)は、1 時間有効な OAuth2 トークンを生成します。
private static String getAccessToken() throws IOException { GoogleCredentials googleCredentials = GoogleCredentials.fromStream(new FileInputStream("service-account.json")).createScoped(Arrays.asList(SCOPES)); googleCredentials.refresh(); return googleCredentials.getAccessToken().getTokenValue(); }
- main メソッドを変更して次の行を追加します。
public static void main(String[] args) throws IOException { System.out.println(getAccessToken()); ... }
- ターミナルで Messaging/ プロジェクト ディレクトリに移動し、次のように入力します。
./gradlew run -Pmessage=common-message
を実行して OAuth2 トークンを出力します。
詳細については、送信リクエストを承認するをご覧ください。
5. REST API を使用してメッセージを送信する
これで、HTTP v1 API を使用してメッセージを送信する準備ができました。手順は次のとおりです。
- アクセス トークンを HTTP リクエスト ヘッダーに追加するには:
- トークンを
Authorization: Bearer <access_token>
の形式で Authorization ヘッダーの値として追加します。 - curl を使用して FCM v1 API に HTTP リクエストを送信します。
curl -s -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $OAuth2_token" -H "X-GFE-SSL: yes" -d "{\"message\": {\"topic\": \"$topic_name\", \"notification\": {\"title\": \"breaking news\", \"body\": \"This is breaking news\"}}}" https://fcm.googleapis.com/v1/projects/[PROJECT_NAME]/messages:send
上記の $topic_name
は、Firebase プロジェクトと Android アプリの設定に記載されている Android アプリコードにあります。デフォルトでは "weather"
です。
- メッセージが正常に配信されると、以下の画像のような通知が画面にポップアップ表示されます。
6. まとめ
これで完了です。この Codelab を修了し、以下のことを行いました。
- Firebase プロジェクトを設定します
- Firebase を Android アプリと統合する
- FCM HTTP v1 API の認証情報を作成する
- FCM HTTP v1 API を使用してアプリにメッセージを送信する
FCM が提供する高度な機能を確認するには、次のリファレンスが有用です。