具有 firebase 连接超时的 Java 服务器端连接

Java server side connection with firebase connection timeout

提问人:Mahi 提问时间:7/20/2017 最后编辑:Mahi 更新时间:7/20/2017 访问量:2128

问:

我正在尝试连接到 firebase 以向 android 应用程序发送推送通知。 我在 Java Server 端编写了以下代码。但是我总是收到连接超时异常。

 final String apiKey="AAAAeEpqP-w:APA91bFulyT23Km-onTNr_q5yEz4uoOaM8KdE4LMyIoz6kWlk3pJSHirDJBSiqESRXKiGa-Z_tBfpXA6naaaTXxcFFxAnaSkMTPVVOMswyJ0bhhdpwlo-92HXgxRMsHV6Y8bNaHX7tMd";
 int i=0;
 try {

 URL url = new URL("https://fcm.googleapis.com/fcm/send");
 HttpsURLConnection  conn = (HttpsURLConnection ) url.openConnection();
 System.out.println("after connection open");
 //conn.setDoInput(true);
 conn.setRequestMethod("POST");
 conn.setRequestProperty("Content-Type", "application/json");
 conn.setRequestProperty("Authorization", "key=" + apiKey);
 conn.setDoOutput(true);
 JSONObject json = new JSONObject();
   json.put("to", "device-token");
    JSONObject info = new JSONObject();
    info.put("title", "notification title"); // Notification title
    info.put("body", "message body");
    json.put("notification", info);
    OutputStreamWriter wr = new OutputStreamWriter(
            conn.getOutputStream());
    wr.write(json.toString());
    wr.flush();

    BufferedReader br = new BufferedReader(new InputStreamReader(
            (conn.getInputStream())));

    String output;
    System.out.println("Output from Server .... \n");
    while ((output = br.readLine()) != null) {
        System.out.println(output);
    }
   // result = CommonConstants.SUCCESS;
 System.out.println("after closed out put stream");
 int responseCode = conn.getResponseCode();

// System.out.println("Post parameters : " + input);
 System.out.println("Response Code : " + responseCode);


} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();

}
 catch(Exception e){
     e.printStackTrace();
 }
}

它始终显示会话超时错误。 这是向应用程序发送通知的正确方法吗? 任何帮助都是值得赞赏的。

编辑:- 我已经从 rest 客户端调用了带有设备令牌和其他东西的相同 url,并且效果很好。我的应用中收到了一条通知。但是当我通过 Java 代码发送它时,它显示连接超时。

Java Android 推送通知 服务器端

评论


答:

0赞 The Riddler 7/20/2017 #1

以下是 Firebase 的官方文档,可帮助您设置服务器。https://firebase.google.com/docs/cloud-messaging/server

在您的代码中,我注意到并假设您仅将其用作示例的占位符。如果没有,则需要在请求中发送类似 .json.put("to", "device-token");{ "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..." }

评论

0赞 Mahi 7/22/2017
我已经按照上面提到的文档进行了操作,现在我已经在我的Andorid端java代码中添加了上面提到的代码。现在有时我会收到通知,但并非总是如此。我正在开发模式下检查它。现在我的消息接收代码也被调用,我得到了一个日志跟踪,我已将其放入消息接收中。但是通知不是通过电话来的。