すべてのアプリ ユーザー (Android) に通知を送信しようとしていますが、基本的に、Firebase 管理コンソール経由で通知が送信されたときに何が起こるかを複製しています。これが私が始めるCURLコマンドです:
curl --insecure --header "Authorization: key=AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Content-Type:application/json" -d "{\"notification\":{\"title\":\"note -Title\",\"body\":\"note-Body\"}}" https://fcm.googleapis.com/fcm/send
見やすいように解析された JSON は次のとおりです。
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
返される応答は、次の 2 文字だけです。
に
それは、「に」という言葉です。(ヘッダーは 400 を報告します) これは、JSON に "to" がないことに関係していると思われます。「to」には何を入れますか?トピックが定義されておらず、デバイスが何にも登録されていません。それでも、Firebase 管理パネルから通知を受け取ることができます。
アプリがフォアグラウンドにある場合、通知はあなたのハンドラーによって処理されますが、アプリがバックグラウンドにある場合は、Firebase 通知処理の驚くべき制限により、「データのみ」の JSON パッケージを試してみたいと思います。 Firebase サービスによって内部的に処理され、通知ハンドラに渡されることはありません。明らかに、API 経由で通知リクエストを送信すると、これを回避できますが、データのみで行う場合に限ります。(これにより、同じメッセージで iOS と Android を処理する機能が壊れます。) JSON のいずれかで「通知」を「データ」に置き換えても効果はありません。
わかりました、それから私はここで解決策を試みました:Firebase Java Server to send push notifications to all devices これは、「わかりました、管理コンソールを介して全員に通知することは可能ですが... 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 を指定すればよいか知っている人はいますか?