如何在另一个 Firebase 项目中使用现有的 GCM 令牌?

How to use an existing GCM token within another Firebase project?

假设我有 Google 云项目 (GCP1),GCM 已打开,客户端 ID P1。

现在我已经创建了一个独立的 Firebase 项目 F2,但没有将其导入到 GCP1。我还发布了 F2 到生产环境。 (或者,我已将现有 firebase.com 项目中的 F2 导入到新的 Firebase 控制台中)。

我使用后端服务器发送推送通知。当我从 F2 项目向通过 GCP1 生成的 GCM 令牌发送推送时,由于客户端 ID 不正确,它(自然地)失败了。是否有变通方法可以在 F2 中使用为 P1 生成的 GCM 令牌?

从后端服务器发送消息时,您需要使用与用于生成 GCM/FCM 令牌的项目 (sender-id) 关联的 API-KEY 对请求进行身份验证。
由于安全限制,这里没有解决方法。

对于现有的 GCM 用户,最好的迁移是将旧项目导入 Firebase 控制台。这将允许您同时针对新老客户,因为 sender-id 不会改变
此处步骤:https://developers.google.com/cloud-messaging/android/android-migrate-fcm

如果这不是选项(您已经创建了一个不同于之前的 Google Cloud 项目的新 Firebase 项目),您有两种可能性:

  1. 更简单且推荐的方法: 更改您的后端以存储哪个客户端发起了 gcm/fcm 令牌。然后在从后端发送消息时使用正确的 API-KEY。 (与老客户的旧项目关联的 API-KEY,以及使用新 Firebase 项目的新客户的新 API-KEY。

  2. 如果您根本无法更改后端: 在 FCM 中,您可以使用 API:
    FirebaseInstanceId.getInstance().getToken("old-sender-id", "FCM")
    因为此令牌与旧发件人 ID 关联,您的后端将能够使用旧项目的 API-KEY 向其发送消息。
    注意:这不会影响基于新发件人 ID 的 Firebase 控制台。
    该控制台将只能针对包含 firebase sdk 和相关 google_services.json 文件的新客户端。