当前位置: 首页 > 知识库问答 >
问题:

发送消息时Google FCMInvalid_argument

柴嘉石
2023-03-14

我正试图弄清楚如何使用Firebase向Android推送通知,并使用遗留HTTP使其正常工作(https://fcm.googleapis.com/fcm/send)但文件建议使用较新的endpoint(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个答案

欧渝
2023-03-14

正如OP所指出的,Firebase现在建议FCM v1endpoint是否希望通过HTTP发送消息

要通过HTTP发送消息,请向FCM v1endpoint发送HTTP POST请求并指定发送方法。endpointURL必须包含您的应用的Firebase项目的项目ID,可在Firebase控制台的常规项目设置选项卡中获得。

它看起来像这样:

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

这里的URL你的_project_id_部分是你的项目id。你需要找到特定于项目的项目id,它位于Firebase控制台的设置部分的选项卡常规

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

https://console.firebase.google.com/project/your_project_id_here/settings/general/android:your_project_name
 类似资料:
  • 接口说明 轻推轻应用/订阅号支持发送文本、图片、文本卡片、图文、key-value、文件、待办等消息类型。本接口针对各种消息类型和发送的对象(单发、群发以及给部分人发送)进行了定义。 注:openid是用户关注某个轻应用/订阅号后生成的唯一id,单发和给部分人发送消息必须携带此参数,可以通过如下接口来获取: 根据qt_code获取用户基本信息 获取使用者列表 通过userId获取openid 消息

  • 主动发送消息 use EasyWeChat\Kernel\Messages\TextCard; // 获取 Messenger 实例 $messenger = $app->messenger; // 准备消息 $message = new TextCard([ 'title' => '你的请假单审批通过', 'description' => '单号:1928373, ...

  • 向已经创建连接凭据的设备发送消息数据。 请求方式: |4|2|3|message|\r 参数 message 发送的消息内容 返回值: "|4|2|3|1|\r" 发送成功 "|4|2|3|2|\r" 发送失败 Arduino样例: softSerial.print("|4|2|3|DFRobot|\r");

  • 问题内容: 我有自己的基于JDA的Discord BOT。我需要向特定频道发送短信。我知道如何将消息作为onEvent响应发送,但是在我的情况下,我没有此类事件。 我有:作者(BOT),令牌和通道号。 我的问题是:如何在 没有事件的情况下 将消息发送到此频道? 问题答案: 好吧,我想我知道你的意思。您无需进行任何事件即可获取频道ID和发送消息。您唯一需要做的就是实例化JDA,调用awaitRead

  • 之前章节定义的SocketIO活动处理函数可以凭借send()函数和emit()函数来连接客户端 接下来的例子是将接收到的消息退回到发送它们的客户端: from flask_socketio import send, emit @socketio.on('message') def handle_message(message): send(message) @socketio.on('

  • 26.3 发送消息 JmsTemplate包含许多方便的方法来发送消息。有些发送方法可以使用 javax.jms.Destination对象指定目的地,也可以使用字符串在 JNDI 中查找目的地。没有目的地参数的发送方法使用默认的目的地。 import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.