Ich versuche, eine Benachrichtigung an alle App-Benutzer (unter Android) zu senden. Dabei wird im Wesentlichen dupliziert, was passiert, wenn eine Benachrichtigung über die Firebase-Administratorkonsole gesendet wird. Hier ist der CURL-Befehl, mit dem ich beginne:
curl --insecure --header "Autorisierung: key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Inhaltstyp: application / json" -d "{\" Benachrichtigung \ ": {\" title \ ": \" note -Titel "," Körper ":" Notizkörper "}}" https://fcm.googleapis.com/fcm/send
Hier ist, dass JSON analysiert wurde, um Ihre Augen zu schonen:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
Die Antwort, die zurückkommt, besteht nur aus zwei Zeichen:
zu
Das war's, das Wort "zu". (Header melden 400) Ich vermute, dass dies damit zu tun hat, dass mein JSON kein "to" enthält. Was würde man überhaupt für ein "zu" setzen? Ich habe keine Themen definiert und die Geräte haben sich für nichts registriert. Sie können jedoch weiterhin Benachrichtigungen vom Firebase-Administrationsbereich erhalten.
Ich möchte versuchen, ein JSON-Paket "nur Daten" zu erstellen, da die Firebase-Benachrichtigungsverarbeitung erstaunlich eingeschränkt ist. Wenn Ihre App im Vordergrund steht, wird die Benachrichtigung von IHREM Handler verarbeitet, aber wenn sich Ihre App im Hintergrund befindet, wird sie angezeigt wird intern vom Firebase-Dienst verarbeitet und nie an Ihren Benachrichtigungshandler weitergeleitet. Anscheinend kann dies umgangen werden, wenn Sie Ihre Benachrichtigungsanforderung über die API senden, aber NUR, wenn Sie dies nur mit Daten tun. (Dies beeinträchtigt dann die Fähigkeit, iOS und Android mit derselben Nachricht zu verarbeiten.) Das Ersetzen von "Benachrichtigung" durch "Daten" in einem meiner JSONs hat keine Auswirkung.
Ok, dann habe ich hier die Lösung versucht: Firebase Java Server, um Push-Benachrichtigungen an alle Geräte zu senden, die mir zu sagen scheinen: "Ok, obwohl Benachrichtigungen an alle über die Admin-Konsole möglich sind ... ist dies über die API nicht wirklich möglich. "" Die Problemumgehung besteht darin, dass jeder Client ein Thema abonniert und dann die Benachrichtigung an dieses Thema sendet. Also zuerst den Code in onCreate:
FirebaseMessaging.getInstance().subscribeToTopic("allDevices");
dann sende ich den neuen JSON:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
},
"to":"allDevices"
}
Jetzt bekomme ich zumindest eine echte Antwort vom Server. JSON-Antwort:
{
"multicast_id":463numbersnumbers42000,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"InvalidRegistration"
}
]
}
Und das kommt mit einem HTTP-Code 200. Ok ... laut https://firebase.google.com/docs/cloud-messaging/http-server-ref bedeutet ein 200-Code mit "InvalidRegistration" ein Problem mit dem Registrierungstoken . Könnte sein? Weil dieser Teil der Dokumentation für den Messaging-Server bestimmt ist. Ist der Benachrichtigungsserver der gleiche? Unklar. Ich sehe an anderer Stelle, dass das Thema Stunden dauern kann, bis es aktiv ist. Es scheint so, als würde es für die Erstellung neuer Chatrooms unbrauchbar werden, also scheint das auch nicht zu funktionieren.
Ich war ziemlich aufgeregt, als ich eine App von Grund auf neu codieren konnte, die innerhalb weniger Stunden Benachrichtigungen erhielt, als ich Firebase noch nie zuvor verwendet hatte. Es scheint, als ob es noch ein langer Weg ist, bis es beispielsweise das Niveau der Stripe.com-Dokumentation erreicht.
Fazit: Weiß jemand, was JSON bereitzustellen ist, um eine Nachricht an alle Geräte zu senden, auf denen die App ausgeführt wird, um die Admin-Konsolenfunktionalität widerzuspiegeln?
FirebaseInstanceIdService