开发者问题收集

React Native Push Notifications,FCM 表示令牌仅在 iOS 上无效(Android 有效)

2021-02-15
2587

我们有一个 React Native 应用,它正在尝试使用 Firebase 云消息服务发送推送通知。我们正在使用 Insomnia 对此进行测试。

为此,我们使用了 zo0r 的一个名为“react-native-push-notification”的软件包。 我们已经能够从真实的苹果设备获取 iOS apn 令牌。然后,我们能够成功地向此 URL 发送 POST 请求:

https://iid.googleapis.com/iid/v1:batchImport 

以将 apns 令牌转换为 Google Firebase 云消息传递平台的注册令牌。

但是,当我们尝试使用转换后的令牌发送消息时,通过向此端点发送 POST 请求:

https://fcm.googleapis.com/fcm/send

使用此 JSON 负载:

{
   "direct_book_ok": true,
    "to": "fTiQ5mg266o:APA91bGQN1s9sYJh9U_B6h1vuwAjpQVrPIJFnCWWsiv4PgKTCOCqLiKIdAD6ls48f-dBbnV3tOdc6NvTScXSRJYrXNHz_5QonSFraEau5jKSJPcw8HYeOb2YnutC39TlaIlKBnD3FpSx",
     "notification": {
                       "title": "Breaking News",
                        "body": "New Story available."
              },
     "priority": "high"
}

以及这些标头:

Authorization: key=<OUR_SECRET_KEY> 
and 
Content-Type: application/json

Google API 响应以下错误,表明通知由于“参数无效”而失败。

{
 "multicast_id": 3503657462083604439,
 "success": 0,
 "failure": 1,
 "canonical_ids": 0,
 "results": [
   {
     "error": "InvalidParameters: RpcError:INVALID_ARGUMENT"
   }
 ]
}

我们如何解决这个问题?我们尝试了 sandbox=true 和 sandbox false。

1个回答

我将 假设 由于您使用 v1 IID API 转换 APN 令牌,因此您需要使用 v1 FCM API 发送消息。真的没有理由继续使用旧版 API。

POST https://fcm.googleapis.com/v1/projects/<ProjectId>/messages:send

{
    "validate_only": false,
    "message": {
        "token": "fTiQ5mg266o:APA91bGQN1s9sYJh9U_B6h1vuwAjpQVrPIJFnCWWsiv4PgKTCOCqLiKIdAD6ls48f-dBbnV3tOdc6NvTScXSRJYrXNHz_5QonSFraEau5jKSJPcw8HYeOb2YnutC39TlaIlKBnD3FpSx",
        "notification": {
            "title": "Breaking News",
            "body": "New Story available."
        },
        "android": {
            "priority": "high"
        }
    }
}

REST API 文档

另请注意,v1 不使用与旧版 API 类似的服务器密钥,您需要创建 OAuth 令牌。

Brian Burton
2021-02-18