【问题标题】:firebase (fcm) says 401 unauthorizedfirebase (fcm) 说 401 未经授权
【发布时间】:2016-10-24 02:52:03
【问题描述】:
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 Unauthorized 的响应。我无法理解为什么会收到此错误。我使用了正确的服务器密钥。我使用的策略是否有任何语法错误或任何错误。

我已关注https://firebase.google.com/docs/cloud-messaging/server#implementing-http-connection-server-protocol 文档

【问题讨论】:

    标签: android jakarta-ee firebase firebase-authentication firebase-cloud-messaging


    【解决方案1】:

    刚刚为我解决了这个问题,我更改了 FCM 控制台中云消息选项卡上提供的服务器 API 密钥。在 Project Overview, Manage 中,有 Cloud Messaging 选项卡,它显示了可能使用的 SERVER API KEY。 json文件中client_api key和SERVER_API_KEY不同!!

    【讨论】:

      【解决方案2】:

      尝试替换:

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

      与:

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

      【讨论】:

        【解决方案3】:

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

        2017.06.28 实际。

        【讨论】:

        【解决方案4】:

        https://firebase.google.com/docs/cloud-messaging/server

        “确保这是服务器密钥,其值在 Firebase 控制台设置窗格的云消息传递选项卡中可用。Android、iOS 和浏览器密钥被 FCM 拒绝。”

        【讨论】:

          猜你喜欢
          • 2016-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-06
          • 2018-05-19
          • 2020-06-11
          • 2017-02-22
          相关资源
          最近更新 更多