Próbuję wysłać powiadomienie do wszystkich użytkowników aplikacji (na Androida), zasadniczo kopiując to, co się dzieje, gdy powiadomienie jest wysyłane za pośrednictwem konsoli administratora Firebase. Oto polecenie CURL, od którego zaczynam:
curl --insecure --header "Autoryzacja: key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Content-Type: application / json" -d "{\" notification \ ": {\" title \ ": \" uwaga -Title \ ", \" body \ ": \" note-Body \ "}}" https://fcm.googleapis.com/fcm/send
Oto ten JSON przeanalizowany, aby był mniej męczący dla oczu:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
Odpowiedź, która wraca, to tylko dwa znaki:
do
To wszystko, słowo „do”. (Nagłówki zgłaszają 400) Podejrzewam, że ma to związek z brakiem „to” w moim JSON. Co w ogóle można by nazwać „do”? Nie mam zdefiniowanych tematów, a urządzenia się nie zarejestrowały. Mimo to nadal mogą otrzymywać powiadomienia z panelu administratora Firebase.
Chcę wypróbować pakiet JSON „tylko do danych” ze względu na niesamowite ograniczenie przetwarzania powiadomień Firebase, w którym jeśli Twoja aplikacja jest na pierwszym planie, powiadomienie jest przetwarzane przez TWOJĄ procedurę obsługi, ale jeśli Twoja aplikacja działa w tle, przetwarzane WEWNĘTRZNIE przez usługę Firebase i nigdy nie przekazywane do modułu obsługi powiadomień. NAJBLIŻSZE można to obejść, wysyłając żądanie powiadomienia przez API, ale TYLKO jeśli robisz to tylko z danymi. (Co z kolei uniemożliwia obsługę iOS i Androida tą samą wiadomością). Zastąpienie „powiadomienia” słowem „dane” w którymkolwiek z moich plików JSON nie przynosi żadnego efektu.
Ok, więc spróbowałem rozwiązania tutaj: Firebase Java Server wysyła powiadomienia push do wszystkich urządzeń, które wydają mi się mówić „Ok, mimo że powiadomienia dla wszystkich są możliwe przez konsolę administracyjną… nie jest to tak naprawdę możliwe przez API. " Obejście polega na tym, aby każdy klient zasubskrybował temat, a następnie wysłał powiadomienie do tego tematu. Więc najpierw kod w onCreate:
FirebaseMessaging.getInstance().subscribeToTopic("allDevices");
następnie nowy JSON, który wysyłam:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
},
"to":"allDevices"
}
Teraz przynajmniej otrzymuję prawdziwą odpowiedź z serwera. Odpowiedź JSON:
{
"multicast_id":463numbersnumbers42000,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"InvalidRegistration"
}
]
}
Do tego dołączony jest kod HTTP 200. Ok ... zgodnie z https://firebase.google.com/docs/cloud-messaging/http-server-ref kod 200 z „InvalidRegistration” oznacza problem z tokenem rejestracyjnym . Może? Ponieważ ta część dokumentacji dotyczy serwera wiadomości. Czy serwer powiadomień jest taki sam? Niejasny. Widzę gdzie indziej, że temat może zająć kilka godzin, zanim stanie się aktywny. Wygląda na to, że byłoby to bezużyteczne do tworzenia nowych pokojów rozmów, więc to również wydaje się być wyłączone.
Byłem bardzo podekscytowany, gdy mogłem napisać od podstaw aplikację, która otrzymywała powiadomienia w ciągu zaledwie kilku godzin, podczas gdy nigdy wcześniej nie korzystałem z Firebase. Wygląda na to, że przed osiągnięciem poziomu, powiedzmy, dokumentacji Stripe.com długa droga.
Podsumowując: czy ktoś wie, jaki kod JSON ma dostarczyć, aby wysłać wiadomość do wszystkich urządzeń, na których działa aplikacja, aby odzwierciedlić funkcjonalność konsoli administracyjnej?
FirebaseInstanceIdService