1. ホーム
  2. android

[解決済み] Firebase NotificationをCURL経由で全デバイスに送信するには?

2022-12-15 19:12:32

質問

私は、すべてのアプリのユーザー(Android上)に通知を送信しようとしています。以下は、私が開始した CURL コマンドです。

curl --insecure --header "Authorization: key=AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Content-Type.Application/json" --header "Content-Type: application/json" -d "{ { {"title":\"note-Title",\"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 の通知処理の驚くべき制限のため、quot;data only" JSON パッケージを試したいのですが、アプリがフォアグラウンドにある場合、通知はあなたのハンドラによって処理されますが、アプリがバックグラウンドにある場合、それは Firebase サービスによって内部的に処理されてあなたの通知ハンドラに渡らないということです。API経由で通知リクエストを送信する場合、明らかにこれを回避することができますが、データのみで行う場合のみです。(その場合、iOSとAndroidを同じメッセージで処理する能力が失われます)。私のJSONの中で "notification" を "data" に置き換えても、何の効果もありません。

OK、それから私はここで解決策を試みました。 Firebase Java Server を使用して、すべてのデバイスにプッシュ通知を送信します。 これは、「OK、管理者コンソールから全員に通知することは可能だけど、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で来る。OK...によると https://firebase.google.com/docs/cloud-messaging/http-server-ref 200コードと"InvalidRegistration"は、登録トークンに問題があることを意味します。多分?なぜなら、ドキュメントのその部分はメッセージングサーバーのためのものだからです。通知サーバも同じなのでしょうか?不明です。トピックがアクティブになるまでに何時間もかかるかもしれないと他のところで見ましたが。それは新しいチャットルームを作成するためにそれを無駄にするように思えるので、それもオフのように思えます。

Firebaseを使ったことがないのに、わずか数時間で通知が来るアプリを一からコーディングできたときは、かなり興奮しました。

Firebaseを使ったことがないときに、わずか数時間で通知を受けるアプリをゼロからコーディングできたときは、かなり興奮しました。Stripe.comのドキュメントのようなレベルに達するまでには、まだ長い道のりがあるように思えます。

結論: 管理コンソールの機能をミラーリングするために、アプリを実行しているすべてのデバイスにメッセージを送信するには、どのような JSON を提供すればよいか、誰かご存知でしょうか?

どのように解決するのですか?

EDIT: この方法はもうサポートされていないようです (@FernandoZamperin に感謝します)。他の回答を参照してください。

トピックを購読するかわりに condition キーを使用し、グループに属していないインスタンスにメッセージを送信することができます。データはこのような感じになります。

{
    "data": {
        "foo": "bar"
    },
    "condition": "!('anytopicyoudontwanttouse' in topics)"
}

参照 https://firebase.google.com/docs/cloud-messaging/send-message#send_messages_to_topics_2