0

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

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 = “应用程序/ x WWW的形式进行了urlencoded”

数据I是在纯文本发送

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

错误消息IM从GCM获得:MissingRegistration 根据谷歌:

注册ID

检查reques t包含注册ID(在纯文本消息的registration_id参数中或JSON中的registration_ids字段中)。 错误代码为MissingRegistration时会发生。

安妮的帮助非常感谢。

亲切的问候。

回答

0

这是错误的:

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

将其更改为:

request.ContentType = "application/json"

的简短解释:

既然你发送的内容类型是无效的,谷歌使用默认的内容类型,即application/x-www-form-urlencoded;charset=UTF-8。并期待这种内容类型,他们没有找到注册ID,导致MissingRegistration

+0

天啊......谢谢! – Christophe

+0

不客气! – Eran

相关问题