6

Potete aiutarmi (e altri che sono frustrati quanto me) a capire come funziona Google Firebase? La documentazione è così confusa che mi fa sentire completamente un idiota.Cosa devo specificare per la chiave di autorizzazione in Firebase Cloud Messaging

Ecco la cosa. Sto semplicemente cercando di inviare un messaggio push agli utenti della mia app Cordova, notandoli su un aggiornamento o qualcosa del genere. Nei bei vecchi tempi (forse qualche settimana fa) veniva semplicemente chiamato un messaggio push. Ora c'è questa cosa di Firebase, loro hanno cambiato e ribattezzato tutto. Immagino che quello di cui ho bisogno si chiami attualmente Notifiche, eppure c'è anche Cloud Messaging e non vedo davvero quale sia la differenza esatta.

Quindi c'è una totale confusione di terminologia. Apparentemente c'è un'API https per inviare notifiche, ma è scarsamente documentata. Ci sono un paio di siti che lo spiegano, ma non sembrano raggiungere un consenso sulla terminologia. Alcuni citano una "chiave API", altri una "chiave di autenticazione", Google stessa la chiama "chiave di autorizzazione", ma quando guardo le mie impostazioni di progetto sulla console vedo una "chiave del server" e un "ID app" mentre il file google_services.json contiene un "private_key_id". Quindi c'è una buona quantità di WTF.

Qualcuno può chiarire cosa diavolo dovrei fornire qui? Ecco come deve essere formulata una richiesta POST all'API Firebase:

https://fcm.googleapis.com/fcm/send 
Content-Type:application/json 
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA <-- WHAT IS THIS? 

{ "data": { 
    "score": "5x1", 
    "time": "15:10" 
}, 
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..." <-- AND THIS? 
} 

Cosa va a "Autorizzazione"? Che cosa va al valore "to" se voglio inviare la mia notifica a tutti gli utenti e cosa succede se desidero scegliere come target un gruppo specifico? (Per i principianti sarei felice se arrivasse semplicemente ad ogni dispositivo.) C'è una buona documentazione per questi parametri?

Inoltre apparentemente Google presuppone che tutti lavorino in Java e fornisce solo esempi Java. Almeno non ho trovato nulla di utile per PHP, Node.js o semplice JavaScript. Ci sono molti esempi per tutte le funzioni che non mi servono.

AGGIORNAMENTO: ho appena scoperto che "Autorizzazione" deve essere la "Chiave server" trovata nella console Firebase nella scheda Cloud Messaging del mio progetto. (Buona cosa non l'hanno nascosto troppo.) Comunque, se invio un POST da PHP con cURL, restituisce una risposta vuota con il codice HTTP 0.

risposta

16

OK, l'ho capito da solo e mi sento un po ' meno un idiota ora. Spero che qualcuno che lo fa lo troverà utile.

Il valore "Autorizzazione" deve essere la "Chiave server" disponibile nella console Firebase nella scheda Cloud Messaging del mio progetto.

Il parametro "a" è obbligatorio. Se viene omesso, il server risponderà con un semplice "to". Ad ogni modo risponde in un bel JSON.

Se vuoi mandare un messaggio a tutti i dispositivi, è necessario specificare:

"to": "/topics/all" 

di risposta del server è solo questo se hai successo:

{"message_id":4988221490411655075} 

Ecco come sembra in caso di errore:

{"multicast_id":5691752204334485119, 
"success":0, 
"failure":1, 
"canonical_ids":0, 
"results":[{ 
       "error":"MissingRegistration" 
      }] 
} 

parametri ei valori restituiti sono spiegati qui:

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

La console Firebase conserva solo i messaggi inviati dalla console stessa.

Per Cordova Sto usando questo semplice plugin e funziona benissimo:

https://www.npmjs.com/package/cordova-plugin-fcm

Ecco una richiesta ben formato JSON da inviare con cURL in PHP (incluso anche):

$json_data = '{ "data": { 
        "price": "1000", 
        "currency": "USD" 
       }, 
       "notification": { 
        "title": "Hey you got a message", 
        "body": "Your mother stil loves you", 
        "sound": "default", 
        "click_action": "FCM_PLUGIN_ACTIVITY", 
        "icon": "icon_name" 
       }, 
       "to": "/topics/all", 
       "priority": "high" 
       }'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
              'Content-Type: application/json',                     
              'Content-Length: '.strlen($json_data), 
              'Authorization:key=AIzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 
             ));   
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$output = curl_exec($ch); 
curl_close($ch); 
+0

sei un risparmiatore di vita :) – Kushan

+0

Questo è di grande aiuto. Grazie mille. Ho qualche dubbio su come dovrei recuperare la chiave del server. Quindi è una buona idea inserire la chiave nell'app o crearne il valore in modo programmatico? –

+0

È solo una stringa. Puoi ottenerlo da dove vuoi. Ovviamente questo qui è solo un esempio, in realtà lo metto in una variabile globale. –

Problemi correlati