从客户端发送 FCM 消息不起作用
Sending FCM message from client not working
注意: 我很清楚暴露我的 API 密钥的危险。这是个人应用程序。
我正在使用这个:
String urlString = "https://fcm.googleapis.com/fcm/send";
JSONObject jsonObjects = new JSONObject();
try {
jsonObjects.put("title", titleET.getText().toString());
jsonObjects.put("body", textET.getText().toString());
jsonObjects.put("to","/topics/subscribed");
} catch (JSONException e) {
e.printStackTrace();
}
RequestBody body = RequestBody.create(JSON, jsonObjects.toString());
Request req = new Request.Builder()
.url(urlString)
.post(body)
.addHeader("Authorization","key=AAAA0lrtzQs:APA91bHiergBa6_A5KEVlV00LiovITBwnkZfgoGEUx-Ofg4hnk48A_nEyTwwpyriOOHHM96ZkDiUeUgpPOApSS4zaivtRKxP4dQjdwH7CFROR5l51ZA85jaFgMa5VmSsu8_yqUb4kc1U")
.build();
try {
Response res = client.newCall(req).execute();
if (!res.isSuccessful()) {
throw new UnknownError("Error: " + res.code() + " " + res.body().string());
}
Log.d("MainActivity", res.body().toString());
} catch (IOException e) {
send();
}
没有发送任何内容。
如果我使用 Firebase 控制台,一切正常。当我执行此请求时,控制台中甚至没有显示任何内容。
我错过了什么?
一个问题是您没有正确构建 JSON for a notification。应该是:
JSONObject notif = new JSONObject();
JSONObject jsonObjects = new JSONObject();
try {
notif.put("title", titleET.getText().toString());
notif.put("body", textET.getText().toString());
jsonObjects.put("notification", notif);
jsonObjects.put("to","/topics/subscribed");
} catch (JSONException e) {
e.printStackTrace();
}
这不会导致邮件无法发送,但可能会混淆您的预期结果。
我能够复制您的代码,填写缺失的部分,并成功发送和接收主题消息。
我加的"missing pieces":
final OkHttpClient client = new OkHttpClient();
final MediaType JSON = MediaType.parse("application/json");
对于授权密钥,我使用了项目的 Firebase 控制台设置的云消息传递选项卡中显示的 "Server key"。
注意: 我很清楚暴露我的 API 密钥的危险。这是个人应用程序。
我正在使用这个:
String urlString = "https://fcm.googleapis.com/fcm/send";
JSONObject jsonObjects = new JSONObject();
try {
jsonObjects.put("title", titleET.getText().toString());
jsonObjects.put("body", textET.getText().toString());
jsonObjects.put("to","/topics/subscribed");
} catch (JSONException e) {
e.printStackTrace();
}
RequestBody body = RequestBody.create(JSON, jsonObjects.toString());
Request req = new Request.Builder()
.url(urlString)
.post(body)
.addHeader("Authorization","key=AAAA0lrtzQs:APA91bHiergBa6_A5KEVlV00LiovITBwnkZfgoGEUx-Ofg4hnk48A_nEyTwwpyriOOHHM96ZkDiUeUgpPOApSS4zaivtRKxP4dQjdwH7CFROR5l51ZA85jaFgMa5VmSsu8_yqUb4kc1U")
.build();
try {
Response res = client.newCall(req).execute();
if (!res.isSuccessful()) {
throw new UnknownError("Error: " + res.code() + " " + res.body().string());
}
Log.d("MainActivity", res.body().toString());
} catch (IOException e) {
send();
}
没有发送任何内容。
如果我使用 Firebase 控制台,一切正常。当我执行此请求时,控制台中甚至没有显示任何内容。 我错过了什么?
一个问题是您没有正确构建 JSON for a notification。应该是:
JSONObject notif = new JSONObject();
JSONObject jsonObjects = new JSONObject();
try {
notif.put("title", titleET.getText().toString());
notif.put("body", textET.getText().toString());
jsonObjects.put("notification", notif);
jsonObjects.put("to","/topics/subscribed");
} catch (JSONException e) {
e.printStackTrace();
}
这不会导致邮件无法发送,但可能会混淆您的预期结果。
我能够复制您的代码,填写缺失的部分,并成功发送和接收主题消息。
我加的"missing pieces":
final OkHttpClient client = new OkHttpClient();
final MediaType JSON = MediaType.parse("application/json");
对于授权密钥,我使用了项目的 Firebase 控制台设置的云消息传递选项卡中显示的 "Server key"。