Firebase
クラウドメッセージング管理API
を使用してメッセージを送信しているときにエラーが発生します。
エラーメッセージは以下です
原因:com.google.api.client.http.HttpResponseException:400 Bad Request {"error":{"code":400、 "message": "リクエストに無効な引数が含まれています。"、 "errors":[{" message ":"リクエストに無効な引数が含まれています。 "、" domain ":" global "、" reason ":" 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>
だから誰もこれで私を助けることができますか?私は何を間違えていますか?
registrationToken
の形式が無効であると思われます。 152文字にする必要があります。
それを確認するには、setToken(registrationToken)
の代わりに setTopic( "test") を使用してメッセージを作成してみてください。
これの1つの考えられる原因は、クライアントとサーバーが異なるfirebaseプロジェクトに接続されていることです。プロジェクト名は、クライアントのgoogle-services.jsonファイルとサーバーの資格情報jsonに表示されます。
さらにもう1つの原因は、メッセージが大きすぎることです。
通知メッセージには、オプションのデータペイロードを含めることができます。両方のメッセージタイプの最大ペイロードは4KBです。ただし、Firebaseコンソールからメッセージを送信する場合は例外で、1024文字の制限が適用されます。
https://firebase.google.com/docs/cloud-messaging/concept-options
私の場合、問題は特定のキーが通知データペイロードで許可されていないことでした。具体的には、キー「from」は禁止されています。