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

时间:2016-06-03 20:41:12

标签: firebase firebase-notifications

假设我启用了Google Cloud Project(GCP1),并启用了客户端ID为P1的GCM。

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

我使用后端服务器发送推送通知。当我将推送发送到通过F2项目通过GCP1生成的GCM令牌时,由于客户端ID不正确,它会自然失败。是否有解决方案可以使用在F2中为P1生成的GCM令牌?

1 个答案:

答案 0 :(得分:14)

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

对于现有GCM用户,最佳迁移包括将旧项目导入Firebase控制台。这样您就可以定位旧客户端和新客户端,因为sender-id不会更改 这里的步骤:https://developers.google.com/cloud-messaging/android/android-migrate-fcm

如果这不是选项(您已经创建了与以前的Google Cloud Project不同的新Firebase项目),您有两种可能:

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

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