【问题标题】:Sending data to GCM Android application over .NET通过 .NET 向 GCM Android 应用程序发送数据
【发布时间】:2013-07-09 17:20:40
【问题描述】:

我正在通过 POST 从我的 .NET 应用程序向 GCM 发送数据。 第一个我的 android 设备得到一个 ID,它 POST 到我的 ASP.NET 应用程序。 然后我的网站上有一个简单的按钮“发送消息”,它以 JSON 格式将数据发布到 GCM。

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

JsonData byval 包含:

{ "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"]
   }"

当我检查谷歌开发页面时,这似乎是正确的。 http://developer.android.com/google/gcm/gcm.html

我之前可以使用相同的功能发送到 GCM,但当时我使用的是纯文本。 这是第一次尝试Json。 我更改了帖子的标题。 request.ContentType = "内容类型:应用程序/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 根据谷歌:

注册 ID

检查请求是否包含注册 ID(在纯文本消息中的 registration_id 参数中,或在 JSON 中的 registration_ids 字段中)。 当错误代码为 MissingRegistration 时发生。

非常感谢您的帮助。

亲切的问候。

【问题讨论】:

    标签: android asp.net push-notification google-cloud-messaging


    【解决方案1】:

    这是错误的:

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

    改成:

    request.ContentType = "application/json"

    简短说明:

    由于您发送的内容类型无效,Google 使用了默认的内容类型,即application/x-www-form-urlencoded;charset=UTF-8。并且期待这种内容类型,他们没有找到注册ID,导致MissingRegistration

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多