firebase云消息传递请求包含无效的参数

时间:2018-03-06 06:11:33

标签: firebase google-cloud-messaging firebase-cloud-messaging

使用Firebase云消息管理员API发送消息时收到错误。

错误信息在

之下
  

引起:com.google.api.client.http.HttpResponseException:400错误请求       {         "错误":{           "代码":400,           " message":"请求包含无效参数。",           "错误":[             {               " message":"请求包含无效参数。",               "域":"全球",               "原因":" badRequest"             }           ]           " status":" INVALID_ARGUMENT"         }       }

让我把我的管理配置放在这里..

FileInputStream serviceAccount = new FileInputStream("My service accout file.json");

FirebaseOptions options = new FirebaseOptions.Builder().setCredentials(GoogleCredentials.fromStream(serviceAccount))
                    .setDatabaseUrl("https://deliveryeat-1aa42.firebaseio.com").build();

FirebaseApp.initializeApp(options);

消息发送代码在

之下
// This registration token comes from the client FCM SDKs.
String registrationToken = "YOUR_REGISTRATION_TOKEN";

// See documentation on defining a message payload.
Message message = Message.builder().putData("score", "850").putData("time", "2:45").setToken(registrationToken).build();

// Send a message to the device corresponding to the provided
// registration token.
String response = FirebaseMessaging.getInstance().sendAsync(message).get();
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);

我正在使用的maven依赖关系

<dependency>
    <groupId>com.google.firebase</groupId>
    <artifactId>firebase-admin</artifactId>
    <version>5.9.0</version>
</dependency>

所以有人可以帮助我吗?我做错了什么?

6 个答案:

答案 0 :(得分:5)

我怀疑您的registrationToken格式无效。它应该是152个字符。

要确认这一点,请尝试使用setTopic("test")代替setToken(registrationToken)来构建邮件。

答案 1 :(得分:2)

一个可能的原因是客户端和服务器连接到不同的Firebase项目。项目名称显示在客户端上的google-services.json文件和服务器上的凭据json中。

Firebase FCM: invalid-argument

答案 2 :(得分:1)

这的另一个原因是您的消息太大:

  

通知消息可以包含可选的数据有效载荷。两种消息类型的最大有效负载为4KB,但从Firebase控制台发送消息时除外,这会强制执行1024个字符的限制。

https://firebase.google.com/docs/cloud-messaging/concept-options

答案 3 :(得分:0)

就我而言,问题是通知数据有效载荷中不允许某些键。具体来说,键“ from”是禁止的。

Firebase data message payload

答案 4 :(得分:0)

我在 URL 中将我的项目名称大写(奇怪,因为我的项目名称实际上是大写的)

答案 5 :(得分:0)

我在尝试将 'content_available' 标志设置为 true 时收到此错误(这是文档所说的:https://firebase.google.com/docs/cloud-messaging/http-server-ref)。

事实证明,您需要将其改为“内容可用”。