正在尝试从用户向用户FCM发送通知



我正在尝试向用户发送通知,但我不确定我是否使用了正确的方法,因为运行此代码后,firebases控制台中没有新的通知。我可以传递目的地、头衔和正文的标记,但我不确定帖子请求是否正确。任何建议都将不胜感激。

public class ClientNotifications extends AsyncTask<String, Void, String> {

String token;
String titles;
String body;
public ClientNotifications(String token,String title,String body)
{
this.token = token;
this.titles=title;
this.body=body;
}
@Override
protected String doInBackground(String[] params) {
JsonObject jsonObj = new JsonObject();
// client registration key is sent as token in the message to FCM server
jsonObj.addProperty("token", token);
JsonObject notification = new JsonObject();
notification.addProperty("body", body);
notification.addProperty("title", titles);
jsonObj.add("notification", notification);
JsonObject message = new JsonObject();
message.add("message", jsonObj);
final MediaType mediaType = MediaType.parse("application/json");
OkHttpClient httpClient = new OkHttpClient();
try {
Request request = new Request.Builder().url("https://fcm.googleapis.com/v1/projects/yourfirebaseproject/messages:send")
.addHeader("Content-Type", "application/json; UTF-8")
.addHeader("Authorization", "Bearer " + "key")
.post(RequestBody.create(mediaType, message.toString())).build();
Response response = httpClient.newCall(request).execute();
if (response.isSuccessful()) {
}
} catch (IOException e) {
Log.e("HI",e.toString());
}
return message.toString();
}
@Override
protected void onPostExecute(String message) {
}
}

这行不通:

.addHeader("Authorization", "Bearer " + "key")

您需要在这里传递实际的服务器密钥,而不仅仅是字符串"key"。

值得指出的是,您不应该向客户端应用程序提供此密钥,因为这是一个安全漏洞。最终用户永远不应该能够获得授予API特权访问权限的服务器密钥。您的客户端应用程序应该调用一个安全的后端来完成发送消息的工作。

我还要指出,您实际上并没有检查请求中的错误。调用FCM的结果应该会更详细地告诉你做错了什么(但传递字符串"key"肯定是不对的(。

JsonObject jsonObj = new JsonObject();
jsonObj.addProperty("to", token);
jsonObj.addProperty("content-available", true);
jsonObj.addProperty("priority", "high");
JsonObject notification = new JsonObject();
notification.addProperty("body", body);
notification.addProperty("title", titles);
jsonObj.add("notification", notification);
final MediaType mediaType = MediaType.parse("application/json");
OkHttpClient httpClient = new OkHttpClient();
try {
Request request = new Request.Builder().url("https://fcm.googleapis.com/fcm/send")
.addHeader("Content-Type", "application/json; UTF-8")
.addHeader("Authorization", "key=your_key")
.post(RequestBody.create(mediaType, jsonObj.toString())).build();
Response response = httpClient.newCall(request).execute();
if (response.isSuccessful()) {
}
} catch (IOException e) {
Log.e("HI",e.toString());
}

我修复了我能看到的东西。祝好运

相关内容

  • 没有找到相关文章

最新更新