以前の HTTP から HTTP v1 に移行する

以前の FCM HTTP API を使用しているアプリは、このガイドの手順に沿って HTTP v1 API に移行することを検討してください。HTTP v1 API には、以前の API に比べて次の利点があります。

  • アクセス トークンの利用によるセキュリティの強化: HTTP v1 API では、OAuth2 セキュリティ モデルに準じた有効期間の短いアクセス トークンを使用します。アクセス トークンが漏洩した場合でも、悪用される時間は有効期限が切れるまでの 1 時間程度しかありません。更新トークンは、以前の API で使用していたセキュリティ キーほど頻繁に送信されないため、捕捉される可能性が非常に低くなります。

  • プラットフォーム間メッセージのカスタマイズ効率の向上: HTTP v1 API では、すべてのターゲット インスタンスに適用される共通キーとプラットフォーム間メッセージのカスタマイズを可能にするプラットフォーム固有のキーをメッセージ本文に設定します。これを利用して「オーバーライド」を作成し、クライアント プラットフォームごとにわずかに異なるペイロードを 1 つのメッセージで送信できます。

  • クライアント プラットフォームの新しいバージョンに対応可能な高い拡張性と将来性: HTTP v1 API は、iOS、Android、ウェブで利用可能なメッセージング オプションを完全にサポートしています。各プラットフォームの JSON ペイロードには独自の定義済みブロックが含まれているため、FCM では必要に応じて新しいバージョンや新しいプラットフォームに合わせて API を拡張できます。

ただし、デバイス グループ メッセージングやマルチキャスト メッセージングを使用するアプリでは、API の今後のバージョンを待つことをおすすめします。HTTP v1 では、従来の API にあるこれらの機能がサポートされないためです。

サーバー エンドポイントを更新する

HTTP v1 API のエンドポイント URL は、次の点で以前のエンドポイントと異なります。

  • パスの /v1 の部分でバージョンが区別されます。
  • アプリ用の Firebase プロジェクトのプロジェクト ID が /projects/myproject-ID/ の形式でパスに含まれます。この ID は、Firebase コンソールの [プロジェクトの全般設定] タブで確認できます。
  • send メソッドを :send として明示的に指定します。

サーバー エンドポイントを HTTP v1 に更新するには、送信リクエストのヘッダーのエンドポイントにこれらの要素を追加します。

POST https://fcm.googleapis.com/fcm/send

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send

送信リクエストの承認を更新する

HTTP v1 送信リクエストでは、以前のリクエストで使用されるサーバーキー文字列の代わりに、Authorization: Bearer <valid Oauth 2.0 token> のように OAuth 2.0 アクセス トークンをヘッダーに追加する必要があります。

Authorization: key=AIzaSyZ-1u...0GBYzPu7Udno5aA

Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

アクセス トークンの生成と取得

すべての Firebase プロジェクトには、デフォルトのサービス アカウントがあります。このアカウントを使用して、アプリサーバーまたは信頼できる環境から Firebase サーバー API を呼び出すことができます。別のサービス アカウントを使用する場合は、そのアカウントに編集者またはオーナーの権限があることを確認してください。

サービス アカウントを認証して、そのアカウントが Firebase サービスにアクセスすることを承認するには、JSON 形式の秘密鍵ファイルを生成し、このキーを使用して有効期間が短い OAuth 2.0 トークンを取得する必要があります。有効なトークンを取得したら、Remote Config や FCM などのさまざまな Firebase サービスの必要に応じて、サーバー リクエストにトークンを追加できます。

サービス アカウント用の秘密鍵ファイルを生成するには:

  1. Firebase コンソールで、[設定] > [サービス アカウント] を開きます。
  2. [新しい秘密鍵の生成] をクリックし、[キーを生成] をクリックして確認します。
  3. キーを含む JSON ファイルを安全に保管します。これを行うには、次のステップを実行する必要があります。

アクセス トークンを取得するには:

トークンを取得するには、プライベート キー JSON ファイルを参照する、以下の適切な言語の Google API クライアント ライブラリを使用できます。

トークンが期限切れになると、更新されたトークンを取得するために、トークンの更新メソッドが自動的に呼び出されます。

FCM へのアクセスを承認するには、範囲 https://www.googleapis.com/auth/firebase.messaging をリクエストします。

アクセス トークンを HTTP リクエスト ヘッダーに追加するには:

トークンを Authorization ヘッダーの値として Authorization: Bearer <access_token> という形式で追加します。

node.js

headers: {
  'Authorization': 'Bearer ' + accessToken
}

Python

headers = {
  'Authorization': 'Bearer ' + _get_access_token(),
  'Content-Type': 'application/json; UTF-8',
}

Java

URL url = new URL(BASE_URL + FCM_SEND_ENDPOINT);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestProperty("Authorization", "Bearer " + getAccessToken());
httpURLConnection.setRequestProperty("Content-Type", "application/json; UTF-8");
return httpURLConnection;

送信リクエストのペイロードを更新する

FCM HTTP v1 では、JSON メッセージ ペイロードの構造が大幅に変更されています。異なるクライアント プラットフォームで受信されたメッセージが正しく処理されるようにするための変更が主ですが、プラットフォームに合わせてメッセージ フィールドをより柔軟にカスタマイズできるようになっています(このカスタマイズは「オーバーライド」とも言います)。

HTTP v1 について理解を深めるために、このセクションで紹介する例のほかに、プラットフォーム間でのメッセージのカスタマイズAPI リファレンスもご覧ください。

例: シンプルな通知メッセージ

ここでは、title フィールド、body フィールド、data フィールドのみを含む非常にシンプルな通知ペイロードを比較し、以前のペイロードと HTTP v1 ペイロードの基本的な違いを示します。

{
  "to": "/topics/news",
  "notification": {
    "title": "Breaking News",
    "body": "New news story available."
  },
  "data": {
    "story_id": "story_12345"
  }
}

{
  "message": {
    "topic": "news",
    "notification": {
      "title": "Breaking News",
      "body": "New news story available."
    },
    "data": {
      "story_id": "story_12345"
    }
  }
}

例: 複数のプラットフォームをターゲットにする

マルチプラットフォーム ターゲティングを有効にする場合、以前の API ではバックエンドでオーバーライドを実行しました。これとは対照的に、HTTP v1 には、プラットフォーム間の相違をはっきりと可視的に示すプラットフォーム固有のキーブロックが用意されています。そのため、次の例で示すように、常に 1 つのリクエストで複数のプラットフォームをターゲットにできます。

// Android
{
  "to": "/topics/news",
  "notification": {
    "title": "Breaking News",
    "body": "New news story available.",
    "click_action": "TOP_STORY_ACTIVITY"
  },
  "data": {
    "story_id": "story_12345"
  }
}
// iOS
{
  "to": "/topics/news",
  "notification": {
    "title": "Breaking News",
    "body": "New news story available.",
    "click_action": "HANDLE_BREAKING_NEWS"
  },
  "data": {
    "story_id": "story_12345"
  }
}

{
  "message": {
    "topic": "news",
    "notification": {
      "title": "Breaking News",
      "body": "New news story available."
    },
    "data": {
      "story_id": "story_12345"
    }
    "android": {
      "notification": {
        "click_action": "TOP_STORY_ACTIVITY"
      }
    },
    "aps": {
      "payload": {
        "aps": {
          "category" : "NEW_MESSAGE_CATEGORY"
        }
      }
    }
  }
}

例: プラットフォーム オーバーライドによるカスタマイズ

HTTP v1 API を使用すると、メッセージのクロスプラットフォーム ターゲティングが簡単にできるだけでなく、プラットフォームに合わせてメッセージを柔軟にカスタマイズすることもできます。

// Android
{
  "to": "/topics/news",
  "notification": {
    "title": "Breaking News",
    "body": "Check out the Top Story.",
    "click_action": "TOP_STORY_ACTIVITY"
  },
  "data": {
    "story_id": "story_12345"
  }
}
// iOS
{
  "to": "/topics/news",
  "notification": {
    "title": "Breaking News",
    "body": "New news story available.",
    "click_action": "HANDLE_BREAKING_NEWS"
  },
  "data": {
    "story_id": "story_12345"
  }
}

{
  "message": {
    "topic": "news",
    "notification": {
      "title": "Breaking News",
      "body": "New news story available."
    },
    "data": {
      "story_id": "story_12345"
    },
    "android": {
      "notification": {
        "click_action": "TOP_STORY_ACTIVITY",
        "body": "Check out the Top Story"
      }
    },
    "apns": {
      "payload": {
        "aps": {
          "category" : "NEW_MESSAGE_CATEGORY"
        }
      }
    }
  }
}

FCM HTTP v1 API のその他の例や詳細については、Firebase のブログをご覧ください。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。