3

GCMを使用して、登録済みの多数のデバイスに一度に複数の通知を送信したいのですが、一度に1つのデバイスの通知を送信するためにしか使用できないため、プレーンテキストでは送信できないことを知っています。そこで、代わりにJSONを使用してHTTPボディコンテンツを作成することにし、JSONオブジェクトを表す次の文字列を作成することができました。

{ collapse_key : my_CollapseKey, data.message : myMessage,  registration_ids : ["regid1","regid2",...] }

しかし、リクエストを送信するたびに、Bad Requestを示す400の応答が返されます。また、GCM Architectural Overviewのドキュメントを参照すると、次のように表示されます。

応答400はJSONリクエストにのみ適用されます。リクエストをJSONとして解析できなかったか、無効なフィールドが含まれていたことを示します(たとえば、数値が期待される場所に文字列を渡す)

これは、リクエストの送信に使用したASP.Netで開発されたWebアプリのスナップショットです。

request.ContentType = "application/json"
        request.Headers.Add("Authorization: key=My_Server_Key")
        request.Headers.Add("Sender: id=myProject_ID")
        Dim collapsKey = Guid.NewGuid.ToString("n")
        Dim data As String = "{ collapse_key : " + collapsKey + "," + " data.message : " + HttpUtility.UrlEncode(TextBox1.Text) + "}" + ", registration_ids : " + jsonids1 + "}"
        Dim byteArray As Byte() = Encoding.UTF8.GetBytes(data)
        request.ContentLength = byteArray.Length
        Dim dataStream As Stream = request.GetRequestStream
        dataStream.Write(byteArray, 0, byteArray.Length)
        dataStream.Close()

JSONオブジェクトを正しく解析して複数の通知を送信する方法はありますか?どんな助けでも完全に感謝されます。

よろしく

4

1 に答える 1

6

JSONは次のようになります。

{
  "registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",...],
  "data" : {
    "Team" : "Portugal",
    "Score" : "3",
    "Player" : "Varela",
  },
}

データの辞書を作成するのを忘れました。

GCMドキュメントから:

データ
フィールドがメッセージのペイロードデータのキーと値のペアを表すJSONオブジェクト。存在する場合、ペイロードデータはアプリケーションデータとしてインテントに含まれ、キーはエクストラの名前になります。たとえば、 "data":{"score": "3x1"}は、値が文字列3x1である意図的な追加の名前付きスコアになります。メッセージの合計サイズ(4kb)には制限がありますが、キーと値のペアの数に制限はありません。値は任意のJSONオブジェクトにすることができますが、値はGCMサーバーで文字列に変換されるため、文字列を使用することをお勧めします。オブジェクトまたはその他の非文字列データ型(整数やブール値など)を含める場合は、自分で文字列に変換する必要があります。また、キーを予​​約語(fromまたはgoogleで始まる単語)にすることはできないことに注意してください。少し複雑にするために、ペイロードデータで技術的に許可されている予約語(collapse_keyなど)がいくつかあります。ただし、リクエストに単語が含まれている場合、リクエストの値はペイロードデータの値を上書きします。したがって、技術的に許可されている場合でも、この表でフィールド名として定義されている単語を使用することはお勧めしません。オプション。技術的に許可されている場合でも。オプション。技術的に許可されている場合でも。オプション。

于 2013-02-15T16:11:48.917 に答える