6

Czy możecie mi pomóc (i innym, którzy są tak samo sfrustrowani jak ja), aby dowiedzieć się, jak działa Google Firebase? Dokumentacja jest tak zagmatwana, że ​​sprawia, że ​​czuję się idiotą.Co należy podać w kluczu autoryzacji w Firebase Cloud Messaging

O to chodzi. Po prostu próbuję wysłać wiadomość Push do użytkowników mojej aplikacji Cordova, zauważając im aktualizację lub coś podobnego. W starych dobrych czasach (może kilka tygodni temu) była to po prostu wiadomość push. Teraz jest ta sprawa z Firebase, zmienili się i przemianowali wszystko. Domyślam się, że to, czego potrzebuję, nazywa się obecnie Powiadomieniami, ale jest też Cloud Messaging i naprawdę nie widzę, jaka jest dokładna różnica.

Następnie pojawia się całkowite pomieszanie terminów. Wygląda na to, że istnieje interfejs API https do wysyłania powiadomień, ale jest on słabo udokumentowany. Jest kilka stron wyjaśniających to, ale nie wydają się one osiągać konsensusu co do terminologii. Niektórzy wspominają o "kluczu API", inni "kluczu uwierzytelniania", sam Google nazywa go "kluczem autoryzacyjnym", ale kiedy zaglądam do ustawień mojego projektu na konsoli, widzę "klucz serwera" i "identyfikator aplikacji", podczas gdy plik google_services.json zawiera "private_key_id". Tak więc istnieje duża liczba WTF.

Czy ktoś może wyjaśnić, co powinienem tutaj dostarczyć? W ten sposób należy sformułować żądanie POST do interfejsu 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? 
} 

Co oznacza "autoryzacja"? Co się dzieje z wartością "do", jeśli chcę wysłać powiadomienie do wszystkich użytkowników i co zrobić, jeśli chcę kierować reklamy na określoną grupę? (Na początek byłbym szczęśliwy, gdyby po prostu dotarł do każdego urządzenia.) Czy istnieje dobra dokumentacja dla tych parametrów?

Co więcej Google zakłada, że ​​wszyscy pracują w Javie i dostarcza tylko przykłady Java. Przynajmniej nie znalazłem nic użytecznego dla PHP, Node.js lub zwykłego JavaScript. Istnieje wiele przykładów dla wszystkich funkcji, których nie potrzebuję.

AKTUALIZACJA: Właśnie stwierdziłem, że "Autoryzacja" powinna być "Kluczem serwera" znajdującym się na konsoli Firebase w zakładce Chmura mojego projektu. (Dobrze, że nie ukryli tego zbyt wiele.) Nadal, jeśli wyślę POST z PHP z cURL, to zwraca pustą odpowiedź z kodem HTTP 0.

Odpowiedz

16

OK, sam to wymyśliłem i poczułem trochę mniej teraz idiota. Mam nadzieję, że niektórzy, którzy nadal będą uważali to za przydatne.

Wartość "Autoryzacja" powinna być "Kluczem serwera" znajdującym się w konsoli Firebase na karcie Cloud Messaging mojego projektu.

Parametr "to" jest obowiązkowy. Jeśli zostanie pominięty, serwer odpowie prostym "do". W każdym razie odpowiada w miłym JSON.

Jeśli chcesz wysłać wiadomość do wszystkich urządzeń, należy podać:

"to": "/topics/all" 

Odpowiedź serwera jest tylko to, jeśli się uda:

{"message_id":4988221490411655075} 

Oto jak to wygląda w przypadku jakiegokolwiek błędu:

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

Parametry i zwracane wartości są wyjaśnione tutaj:

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

Konsola Firebase zachowuje tylko wiadomości wysłane z samej konsoli.

Dla Cordova Używam tej prostej wtyczki i działa prawidłowo:

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

Tutaj jest dobrze uformowane żądanie JSON zostać wysłane z cURL w PHP (również włączone):

$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

jesteś sir ratownikem życia :) – Kushan

+0

To jest świetna pomoc. Dziękuję bardzo. Mam pewne wątpliwości dotyczące tego, jak powinienem pobrać klucz serwera. Więc czy to jest dobry pomysł, aby zakodować klucz w aplikacji lub możemy jakoś uzyskać wartość programowo? –

+0

To tylko ciąg. Możesz dostać to z dowolnego miejsca. Oczywiście to tutaj jest tylko przykład, właściwie umieszczam go w zmiennej globalnej. –