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

} 

Lorsque j'appelle le code ci-dessus, il me donne la réponse 401 Unauthorized. Je ne suis pas capable de comprendre pourquoi je reçois cette erreur. J'ai utilisé la bonne clé de serveur. Y at-il une erreur de syntaxe ou quoi que ce soit de mal dans la stratégie utilisée par moi.firebase (fcm) dit 401 non autorisé

J'ai suivi la documentation https://firebase.google.com/docs/cloud-messaging/server#implementing-http-connection-server-protocol

Répondre

8

Essayez de remplacer:

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

avec:

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

Merci ... Ça a marché !!! –

+1

travaillé maintenant, merci –

9

Juste résolu le problème pour moi, je l'ai changé l'API Server Key, qui est donné dans l'onglet Messagerie cloud, dans la console FCM. Dans la vue d'ensemble du projet, Gérer, il y a l'onglet Cloud Messaging, qui indique une utilisation de l'API SERVEUR. Dans le fichier json touche client_api et SERVER_API_KEY différent !!

+0

Merci beaucoup! – DmitryKanunnikoff

-1

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

« Assurez-vous que c'est la clé du serveur, dont la valeur est disponible dans l'onglet Nuage de messagerie de la sous-fenêtre Paramètres de la console Firebase. Android, iOS, et les clés du navigateur sont rejetés par la FCM. »

3

Selon la réponse de Harco, dans la console Firebase, regardez "Paramètres du projet" (cliquez sur l'icône d'engrenage) et choisissez l'onglet "Cloud Messaging". La "clé du serveur" est ce dont vous avez besoin.

enter image description here

Actual sur 28.06.2017.