web-dev-qa-db-ja.com

TTLでgoogleのFCMを使用してデータを送信しようとしています

GoogleのFCMを介してデータを送信しようとしていますが、10秒後に有効期限が切れます。つまり、ユーザーが10秒間インターネットに接続していなかった場合、ユーザーはインターネットを受信しません。

これは、FCMにリクエストを送信するためのJavascriptコードです。

var http = new XMLHttpRequest();
http.open("POST", "https://fcm.googleapis.com/fcm/send", true);
http.onreadystatechange = function() {};
http.setRequestHeader("Content-type", "application/json");
http.setRequestHeader("Authorization", "key=*****");
http.send(JSON.stringify({
    "to": "/topics/all",
    "data": {
        "Title": "Test",
        "areas": "Dan, Ayalon",
    },
    "Android": {
      "ttl": "10s" //I've tried also removing the s, and changing the ttl to TTL and time_to_leave
    }
}));

問題は、私のAndroidアプリは、10秒が経過した後も2分後でもデータを受信することです(ここで私が行ったのは、電話をオフにしてネットワークをオフにしてから再びオンにすることです2)。分後)

Firebaseコンソールからリクエストを送信しようとしたところ、正常に機能しました... 1分後にメッセージが届きませんでした。ここで何が悪いのですか?

ありがとうございました!

更新:別の解決策について考えました。たぶん、現在の時刻を手動で送信してから、クライアントに経過時間をチェックさせますか?それは良い解決策のように聞こえますか?

pdate 2:Googleがドキュメントで提供しているすべての例を試しましたが、どれも機能しませんでした。私はまた、リクエストを書くために100万の他の方法を試みましたが、何もうまくいきませんでした。バグかもしれない気がします。私はグーグルを報告しました、そして今私は彼らの反応を待っています。ここで彼らの応答を更新します。

9
morha13

これが私がGoogleのFirebaseサポートから受け取った答えです、彼らは私がここで間違ったことを見つけました:

コードを見ると、リクエストの形式に不規則性があるようです。ヘッダーは レガシーFCM API 用ですが、ペイロードの形式は HTTP v1 FCM API 用です。

レガシーAPIを使用する場合は、Android特定のペイロードを省略し、ttlの代わりに time_to_live を使用する必要があります。ただし、HTTP v1を使用する場合APIでは、前述のようにリクエストを作成する必要があります here およびto-の代わりに tokenパラメータ を使用します。

問題は、リクエストの2つの方法を組み合わせたことです。リクエスト自体はHTTP v1 FCM APIフォーマットでしたが、リクエストされたヘッダーはレガシーAPIのフォーマットと一致しています。

リクエストのこの部分は、HTTP v1 APIフォームに属しています。

"Android": {
  "ttl": "10s" 
}

正しい方法は、"Android"タグを使用せず、time_to_liveタグのみを使用する方法です。

"time_to_live": 10 //The time in seconds

これは私の完全な要求が今のように見える方法です:

var http = new XMLHttpRequest();
http.open("POST", "https://fcm.googleapis.com/fcm/send", true);
http.onreadystatechange = function() {};
http.setRequestHeader("Content-type", "application/json");
http.setRequestHeader("Authorization", "key=*****");
http.send(JSON.stringify({
    "to": "/topics/all",
    "data": {
        "Title": "Test",
        "areas": "Dan, Ayalon",
    },
    "time_to_live": 10
}));       

質問があればコメントしてください

17
morha13