8

クライアント ID P1 で GCM がオンになっている Google Cloud プロジェクト (GCP1) があるとします。

これで、GCP1 にインポートせずにスタンドアロンの Firebase プロジェクト F2 を作成しました。また、F2 を本番環境にリリースしました。(または、F2 を既存の firebase.com プロジェクトから新しい Firebase コンソールにインポートしました)。

バックエンド サーバーを使用してプッシュ通知を送信します。F2 プロジェクトから GCP1 経由で生成された GCM トークンにプッシュを送信すると、クライアント ID が正しくないために (当然のことながら) 失敗します。P1 用に生成された GCM トークンを F2 内で使用できるようにするための回避策はありますか?

4

1 に答える 1

14

バックエンド サーバーからメッセージを送信する場合、GCM/FCM トークンの生成に使用されるプロジェクト (sender-id) に関連付けられた API-KEY でリクエストを認証する必要があります。
セキュリティ上の制限により、これに対する回避策はありません。

既存の GCM ユーザーにとって最適な移行は、古いプロジェクトを Firebase コンソールにインポートすることです。 ここの手順sender-idは変更されないため、これにより、古いクライアントと新しいクライアントの両方をターゲットにすることができます: https://developers.google.com/cloud-messaging/android/android-migrate-fcm

それができない場合(以前の Google Cloud プロジェクトとは別の新しい Firebase プロジェクトを既に作成している場合)、次の 2 つの可能性があります。

  1. より簡単で推奨されるアプローチ:バックエンドを変更して、どのクライアントが gcm/fcm トークンを生成したかを保存します。次に、バックエンドからメッセージを送信するときに正しい API-KEY を使用します。(古いクライアントの場合は古いプロジェクトに関連付けられた API キー、新しい Firebase プロジェクトを使用している新しいクライアントの場合は新しい API キー)。

  2. バックエンドをまったく変更できない場合: FCM では、API を使用して古い SenderID の追加トークンを作成できます:
    FirebaseInstanceId.getInstance().getToken("old-sender-id", "FCM")
    このトークンは古い送信者 ID に関連付けられているため、バックエンドはメッセージを送信できます。古いプロジェクトの API-KEY を使用してそれに。
    注:これは、new-sender-id に基づく Firebase コンソールには影響しません。
    そのコンソールは、firebase sdk と関連する google_services.json ファイルを含む新しいクライアントのみをターゲットにすることができます。

于 2016-06-03T21:31:57.110 に答える