React Native 推送通知,FCM 表示令牌仅在 iOS 上无效(Android 有效)
React Native Push Notifications, FCM says token is invalid on iOS only (Android works)
我们有一个 React Native 应用程序正在尝试使用 Firebase 云消息服务发送推送通知。我们正在使用 Insomnia 对此进行测试。
为此,我们使用了 zo0r 的一个名为“react-native-push-notification”的包。
我们已经能够从 real-life 苹果设备获取 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"
}
还有这些 headers:
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。
我将假设因为您使用了 v1 IID API 来转换您需要使用 v1 FCM 的 APN 令牌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"
}
}
}
另请注意,v1 不像旧版 API 那样使用服务器密钥,您需要创建一个 OAuth 令牌。
我们有一个 React Native 应用程序正在尝试使用 Firebase 云消息服务发送推送通知。我们正在使用 Insomnia 对此进行测试。
为此,我们使用了 zo0r 的一个名为“react-native-push-notification”的包。 我们已经能够从 real-life 苹果设备获取 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"
}
还有这些 headers:
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。
我将假设因为您使用了 v1 IID API 来转换您需要使用 v1 FCM 的 APN 令牌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"
}
}
}
另请注意,v1 不像旧版 API 那样使用服务器密钥,您需要创建一个 OAuth 令牌。