Отправка данных в Android-приложение GCM через .NET

Я отправляю данные из своего приложения .NET в GCM через POST. Во-первых, мое устройство Android получает идентификатор, который отправляется в мое приложение ASP.NET. затем у меня есть простая кнопка на моем веб-сайте «Отправить сообщение», которая отправляет данные в GCM в формате JSON.

Private Function SendNotification(ByVal JSonData As String) As String
    ServicePointManager.ServerCertificateValidationCallback = Function(sender As       Object,         certificate As X509Certificate, chain As X509Chain, sslPolicyErrors As SslPolicyErrors) True
    '/// Creating POST.
    Dim request As WebRequest = WebRequest.Create("https://android.googleapis.com/gcm/send")
    request.Method = "POST"
    request.ContentType = "Content-Type: application/json"
    request.Headers.Add(String.Format("Authorization: key={0}", MyAPIKey))

    '/// Converting data to byte array.
    Dim postData As String = JSonData
    Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)

    '/// Post
    request.ContentLength = byteArray.Length
    Dim dataStream As Stream = request.GetRequestStream()
    dataStream.Write(byteArray, 0, byteArray.Length)
    dataStream.Close()

    '/// Response
    Dim response As WebResponse = request.GetResponse()
    dataStream = response.GetResponseStream()
    Dim reader As New StreamReader(dataStream)
    Dim responseFromServer As String = reader.ReadToEnd()

    reader.Close()
    dataStream.Close()
    response.Close()

    Return responseFromServer
End Function

Byval JsonData содержит:

{ "collapse_key":"DitIsEenUniekeIdentifier",
  "time_to_live":108,
  "delay_while_idle":true,
  "data": {
    "MessageId":1,
    "TestInformation":"BlieBloeBlaaaa tadaaa!"
   },
   "registration_ids":["APA91bFYQbSDzQDsoRrR3bnKtH_o72kQ7oiArg79WNz8qeCVoe6Kxu_BdcVftX1pGOfwLCLZbf_D3b7-V2yIaVasHxWXbn35nJO1bIiDzF84ifCHKJTyK3KiZmHZwAJliVIFcZFEVEsKTRiXWgpm9WWmnPrsbKvASy6FZyv4Eyfv-K526Q38Hjs"]
   }"

Что кажется правильным, когда я проверяю страницы Google dev. http://developer.android.com/google/gcm/gcm.html

Раньше я мог отправлять в GCM ту же функцию, за исключением того, что тогда я использовал обычный текст. Это первый раз, когда я пытаюсь использовать Json. Я изменил заголовок поста. request.ContentType = "Content-Type: application/json", который был до request.ContentType = "application/x-www-form-urlencoded"

Данные, которые я отправлял в виде обычного текста:

Dim postData As String = String.Format("registration_id={0}&data.payload={1}&collapse_key={2}", ReceiverKey, Message, collaspeKey)

Сообщение об ошибке, которое я получаю от GCM: MissingRegistration Согласно Google:

Идентификатор регистрации

Убедитесь, что запрос содержит идентификатор регистрации (либо в параметре Registration_id в текстовом сообщении, либо в поле Registration_ids в JSON). Происходит, когда код ошибки MissingRegistration.

Любая помощь приветствуется.

С уважением.


person Christophe    schedule 09.07.2013    source источник


Ответы (1)


Это не верно :

request.ContentType = "Content-Type: application/json"

Измените его на:

request.ContentType = "application/json"

Краткое объяснение:

Поскольку отправленный вами тип контента был недействительным, Google использовал тип контента по умолчанию, то есть application/x-www-form-urlencoded;charset=UTF-8. И, ожидая этот тип контента, они не нашли идентификатор регистрации, что привело к MissingRegistration.

person Eran    schedule 09.07.2013