Firebase(FCM)显示401未经授权

6
private void sendMsg() {
    DBManager dbManager = DBManager.getInstance();
    ArrayList<String> firebaseIds;

    try {
        ResultSet rs= dbManager.getRegisteredFirebaseDevice();
        while(rs.next()){
            System.out.println(rs.getString(1));
            firebaseIds.add(rs.getString(1));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

    String url = "https://fcm.googleapis.com/fcm/send";
    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();

    // add reuqest header
    con.setRequestMethod("POST");
    con.setRequestProperty("Authorization: key", "AIzaSyAl6S936qt_NKKFwwbd-NEmiSGIL7G_yJc");
    con.setRequestProperty("Content-Type", "application/json");
    // String msg="New design added in "+getCategory(designCategory)+". Design no."+designNo;
    // String urlParameters = "data.msg="+msg+"&registration_id="+firebaseIds.get(0);

    JSONObject msg=new JSONObject();
    msg.put("msg","New design added in "+getCategory(designCategory)+". Design no."+designNo);


    JSONObject parent=new JSONObject();

    parent.put("to", firebaseIds.get(0));
    parent.put("data", msg);

    // String urlParameters = "registration_id="+firebaseIds.get(0);
    // Send post request
    con.setDoOutput(true);


    OutputStreamWriter wr= new OutputStreamWriter(con.getOutputStream());
    wr.write(parent.toString());

    // DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    // wr.writeBytes(urlParameters);
    // wr.flush();
    // wr.close();

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Post parameters : " + parent.toString());
    System.out.println("Response Code : " + responseCode+" "+con.getResponseMessage());

}

当我调用上述代码时,它给出的响应是“401未经授权”。我无法理解为什么会出现此错误。我已使用正确的服务器密钥。是否存在语法错误或我使用的策略有误?
我已遵循https://firebase.google.com/docs/cloud-messaging/server#implementing-http-connection-server-protocol文档。
4个回答

12

这个问题已经被解决了,我更改了FCM控制台上Cloud Messaging选项卡中给出的Server API Key。在“项目概述”、“管理”下,有一个Cloud Messaging选项卡,显示了一个SERVER API KEY,可以使用那个。在JSON文件中,client_api key和SERVER_API_KEY是不同的!!


9
尝试替换成以下内容:
con.setRequestProperty("Authorization: key", "<YOUR API KEY>");

使用:

con.setRequestProperty("Authorization", "key=<YOUR API KEY>");

3
根据Harco的答案,在Firebase控制台中查看“项目设置”(点击齿轮图标),选择“云消息传递”选项卡。“服务器密钥”是您需要的内容。

enter image description here

实际上是在2017年06月28日。


使用服务器密钥,仍未经授权。 - UndercoverCoder
1
@UndercoverCoder,很抱歉这么长时间没有回复你。现在使用服务器密钥已经过时了,我们需要使用服务帐号:https://firebase.google.com/docs/cloud-messaging/migrate-v1?hl=en#java - DmitryKanunnikoff
1
我最终解决了这个问题,但还是谢谢 :) - UndercoverCoder

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接