我从GCM服务器{"success":1}收到了这个响应,但是通知未到达设备通知通知设备我收到来自GCM服务器的响应{"multicast_id":8594338261894783737,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1355822022916886%8ae6056ef9fd7ecd"}]}但仍然没有通知知识->"成功":1但我认为这里有问题->"canonical_ids":0这是我的代码...privatestringSendGCMNotification(stringapiKey,stringpostData,stringpostDataContentType="application/json"){ServicePointManager.ServerCertificateValidationCallback+=newRemoteCertificateValidationCallback(ValidateServerCertificate);////消息内容byte[]byteArray=Encoding.UTF8.GetBytes(postData);////创建请求Http=(HttpWebRequest)WebRequest.Create("https://android.googleapis.com/gcm/send");Request.Method="POST";Request.KeepAlive=false;Request.ContentType=postDataContentType;Request.Headers.Add(HttpRequestHeader.Authorization,string.Format("key={0}",apiKey));Request.ContentLength=byteArray.Length;StreamdataStream=Request.GetRequestStream();dataStream.Write(byteArray,0,byteArray.Length);dataStream.Close();try{WebResponseResponse=Request.GetResponse();HttpStatusCodeResponseCode=((HttpWebResponse)Response).StatusCode;if(ResponseCode.Equals(HttpStatusCode.Unauthorized)||ResponseCode.Equals(HttpStatusCode.Forbidden)){Label1.Text="未经授权-需要newtoken";}elseif(!ResponseCode.Equals(HttpStatusCode.OK)){Label1.Text="来自网络服务的响应不正常";}StreamReaderReader=newStreamReader(Response.GetResponseStream());stringresponseLine=Reader.ReadToEnd();Reader.Close();returnresponseLine;}catch(Exceptione){return"error";}//return"error";}我用这个方法调用stringdeviceId="APA91bHomX3zb6Y87fb4GAjyj8zIaI-tt1n6ZFmgtmu16nmLW7ntwnOyv4BXMH7RzQWk3JrKdLjttJMxKzvpFd3Kmrid_RzsC3zR46GLJGiZKERXOSIR8fYReBEfz1f0G_FIm5bPttWUBDwz9jPuF2lS8RQh-0DKbw";stringmessage="sometestmessage";stringtickerText="exampletestGCM";stringcontentTitle="contenttitleGCM";stringpostData="{"registration_ids":[""+deviceId+""],"+""data":{"tickerText":""+tickerText+"","+""contentTitle":""+contentTitle+"","+""message":""+message+""}}";Label1.Text=SendGCMNotification("AIzaSyBEvtrtbbfy2-p2zS8Zi8DweZiRy8M-??nZc",postData);提前致谢请检查GCM文档中的响应格式:http://developer.android.com/google/gcm/gcm.html#responsesuccess无错误处理的消息数。我的理解是GCM能够处理消息,但这并不意味着消息已成功发送到设备(例如设备可能处于离线状态,它将被接收稍后,但消息已成功处理。“canonical_ids”:0并不意味着有错误,这意味着没有设备需要更新其ID。您可以在此处阅读有关规范ID的更多信息:http://developer。android.com/google/gcm/adv.html#canonical在服务器端,只要应用运行良好,一切都应该正常。但是,如果应用程序中的错误触发同一设备的多次注册,则可能很难协调状态,最终可能会出现重复消息。GCM提供了一个名为“CanonicalRegistrationID”的工具来轻松地从这些情况中恢复。规范注册ID定义为应用程序请求的最后一次注册的ID。这是服务器请求的最后一次注册的ID。这是当服务器向设备发送消息时应该使用的ID。如果您稍后尝试发送具有不同注册ID的消息,GCM将照常处理该请求,但它会在响应的registration_id字段中包含规范注册ID。确保用这个规范ID替换存储在服务器中的注册ID,因为你使用的那个最终会停止工作。我建议您向客户端添加一些日志记录代码,以确保您不会收到该消息。特别是在您的GCMIntentService类onMessage()方法中。以上是C#学习教程:我从GCM服务器得到这个响应{"success":1}但是通知没有到达设备共享的全部内容。如果对大家有用,需要进一步了解C#学习教程,还望大家多加关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
