8

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

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

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

4

1 回答 1

14

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

对于现有的 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 为旧 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 回答