(Androidの)すべてのアプリユーザーに通知を送信しようとしています。基本的に、Firebase管理コンソールを介して通知が送信されたときに何が起こるかを複製しています。これが私が始めたCURLコマンドです:
curl --insecure --header "Authorization:key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Content-Type:application / json" -d "{\" notify \ ":{\" title \ ":\" note -タイトル\ "、\" body \ ":\" note-Body \ ">}}" https://fcm.googleapis.com/fcm/send
これがあなたの目に簡単になるように解析されたJSONです:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
返される応答は2文字だけです。
に
それだけです、「to」という言葉。(ヘッダーは400を報告します)これは私のJSONに「to」がないことと関係があると思います。「to」に何を置くでしょうか?トピックが定義されておらず、デバイスは何も登録していません。それでも、Firebase管理パネルから通知を受け取ることはできます。
Firebaseの通知処理には驚くべき制限があるため、「データのみ」のJSONパッケージを試してみたいと思います。アプリがフォアグラウンドにある場合、通知はハンドラーによって処理されますが、アプリがバックグラウンドにある場合は、 Firebaseサービスによって内部的に処理され、通知ハンドラに渡されることはありません。明らかに、これはAPIを介して通知リクエストを送信する場合に回避できますが、データのみで送信する場合に限ります。(これにより、iOSとAndroidを同じメッセージで処理する機能が失われます。)JSONのいずれかで「通知」を「データ」に置き換えても効果はありません。
わかりました。次に、ここで解決策 を試しました。FirebaseJavaServerは、すべてのデバイスにプッシュ通知を送信します。「わかりました。管理コンソールからすべてのユーザーに通知できますが、APIからは実際にはできません。 「」回避策は、各クライアントにトピックをサブスクライブさせてから、そのトピックに通知をプッシュすることです。したがって、最初にonCreateのコードを作成します。
FirebaseMessaging.getInstance().subscribeToTopic("allDevices");
次に、送信する新しいJSON:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
},
"to":"allDevices"
}
だから今、私は少なくともサーバーから実際の応答を得ています。JSON応答:
{
"multicast_id":463numbersnumbers42000,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"InvalidRegistration"
}
]
}
そして、それはHTTPコード200が付属しています。わかりました... https://firebase.google.com/docs/cloud-messaging/http-server-refによると、「InvalidRegistration」を含む200コードは、登録トークンに問題があることを意味します。多分?ドキュメントのその部分はメッセージングサーバー用であるためです。通知サーバーは同じですか?不明。トピックがアクティブになるまでに数時間かかる場合があることが他の場所でわかります。それは新しいチャットルームを作成するのに役に立たないように思われるので、それもまたオフに思えます。
これまでFirebaseを使用したことがなかったため、わずか数時間で通知を受け取るアプリを最初からコーディングできたときは、とても興奮していました。たとえば、Stripe.comのドキュメントのレベルに達するまでには、まだ長い道のりがあるようです。
結論:管理コンソール機能をミラーリングするためにアプリを実行しているすべてのデバイスにメッセージを送信するために提供するJSONを知っている人はいますか?
FirebaseInstanceIdService