谷歌 FCM 发送消息时出现 Invalid_argument 错误

5

我正在尝试使用Firebase向Android设备发送推送通知,通过使用遗留的HTTP(https://fcm.googleapis.com/fcm/send)我已经使其工作。但是文档建议使用更新的终端点(https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send)。由于一直收到以下响应,所以我似乎无法让它正常工作:

{
    "error": {
        "code": 400,
        "message": "Request contains an invalid argument.",
        "status": "INVALID_ARGUMENT"
    }
}

这是在使用位于https://firebase.google.com/docs/cloud-messaging/send-message#send_messages_to_specific_devices的示例时发生的情况:

POST https://fcm.googleapis.com/v1/projects/project-916177026973/messages:send HTTP/1.1
cache-control: no-cache
Postman-Token: 81403929-77ba-4568-8681-a854527ccb22
Content-Type: application/json
Authorization: Bearer <token redacted>
User-Agent: PostmanRuntime/6.4.1
Accept: */*
Host: fcm.googleapis.com
accept-encoding: gzip, deflate
content-length: 319
Connection: close

{
  "message":{
    "token" : <token redacted>,
    "notification" : {
      "body" : "This is an FCM notification message!",
      "title" : "FCM Message",
      }
   }
}

我也试过去掉最后一个逗号以符合JSON格式,但仍然没有成功。有什么想法吗?

1
你确定你正在使用正确的项目ID吗?看起来这部分 "/project-916177026973/" 包含了你的发送者ID。当你打开Firebase控制台时,你的项目ID将是URL的一部分。 - Barns
@Barns 阿门!谢谢 - 把它做成一个解决方案,我会标记它为答案。 - Wade Tracy
1个回答

3

正如开发者所指出的,Firebase现在建议使用FCM v1端点来通过HTTP发送消息。

要通过HTTP发送消息,请向FCM v1端点发送HTTP POST请求并指定发送方法。端点URL必须包含Firebase项目的项目ID,该ID可在Firebase控制台的“常规项目设置”选项卡中找到。

它看起来应该像这样:

POST https://fcm.googleapis.com/v1/projects/your_project_id_here/messages:send HTTP/

URL中的your_project_id_here部分是您的项目ID。您需要在Firebase控制台中找到项目特定的Project ID,该选项位于项目下的General标签页下的Settings部分。

寻找Project ID。如果您对自己的正确Project ID有任何疑问,它也是网站地址中指向您的项目的一部分。它看起来像:

https://console.firebase.google.com/project/your_project_id_here/settings/general/android:your_project_name

使用主题帮助我看到了真正的问题。在我的情况下,我更改了Firebase帐户并创建了一个新的serviceAccountKey.json。但是...我仍然在应用程序中使用由旧帐户创建的相同令牌。 - Akostha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接