假设我启用了Google Cloud Project(GCP1),并启用了客户端ID为P1的GCM。
现在我创建了一个独立的Firebase项目F2,而不将其导入GCP1。我也发布了F2到生产。 (或者,我已将F2从现有的firebase.com项目导入到新的Firebase控制台中。)
我使用后端服务器发送推送通知。当我将推送发送到通过F2项目通过GCP1生成的GCM令牌时,由于客户端ID不正确,它会自然失败。是否有解决方案可以使用在F2中为P1生成的GCM令牌?
答案 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项目),您有两种可能:
更简单且推荐的方法:更改后端以存储哪个客户端发起了gcm / fcm令牌。然后在从后端发送消息时使用正确的API-KEY。 (旧客户的旧项目关联的API-KEY,以及使用新Firebase项目的新客户的新API-KEY)。
如果您无法更改后端:在FCM中,您可以使用API为旧的SenderID创建额外的令牌:
FirebaseInstanceId.getInstance().getToken("old-sender-id", "FCM")
由于此令牌与old-sender-id相关联,因此您的后端将能够使用旧项目的API-KEY向其发送消息。
注意:这不会影响基于new-sender-id的Firebase控制台。
该控制台将只能定位包含firebase sdk和相关google_services.json文件的新客户端。