从客户端发送FCM消息不起作用

时间:2017-03-29 15:00:41

标签: android firebase firebase-cloud-messaging firebase-notifications

注意:我很清楚暴露我的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控制台,一切正常。当我做这个请求时,甚至没有任何东西出现在控制台中。 我错过了什么?

1 个答案:

答案 0 :(得分:2)

一个问题是您没有正确构建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();
    }

这不会导致邮件无法发送,但可能会混淆您的预期结果。

我能够复制您的代码,填写缺失的部分,并成功发送和接收主题消息。

我补充说:“缺少的部分”:

    final OkHttpClient client = new OkHttpClient();
    final MediaType JSON = MediaType.parse("application/json");

对于授权密钥,我使用了FirePro控制台设置的Cloud Messaging选项卡中显示的“服务器密钥”。