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()); 

} 

Po wywołaniu powyższego kodu, daje mi odpowiedź jako 401 Unauthorized. Nie jestem w stanie zrozumieć, dlaczego dostaję tego błędu. Użyłem właściwego klucza serwera. Czy w strategii, którą stosuję, jest jakikolwiek błąd składniowy lub coś złego.Firebase (fcm) mówi 401 nieautoryzowane

Śledzę dokumentację https://firebase.google.com/docs/cloud-messaging/server#implementing-http-connection-server-protocol

Odpowiedz

8

Spróbuj wymienić:

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

z:

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

Dziękuję ... To zadziałało !!! –

+1

zadziałał teraz, thanx –

9

Wystarczy rozwiązać problem dla mnie, zmieniłem klucz Server API, który jest podany na karcie przesyłania komunikatów w chmurze, w konsoli FCM. W Przeglądzie projektu, Zarządzaj, znajduje się zakładka Cloud Messaging, która pokazuje, że może to być KLUCZ SERWERA API. W pliku json klucz client_api i SERVER_API_KEY inny !!

+0

Dziękuję bardzo! – DmitryKanunnikoff

3

Na podstawie odpowiedzi Harco w konsoli Firebase spójrz na "Ustawienia projektu" (kliknij ikonę koła zębatego) i wybierz zakładkę "Chmura". "Klucz serwera" jest tym, czego potrzebujesz.

enter image description here

Rzeczywista na 2017.06.28.