用于GCM的服务器将通知推送到C#中的android

我正在开发一个使用GCM推送通知服务的Android应用程序。 目前我被困在创建服务器。 GCM文档提供的指南在java中,我不知道如何实现。 经过一段时间的研究,我在github上找到了使用C#的GCMSharp

PushSharp – https://github.com/Redth/PushSharp

但截至目前,我是新手创建一个服务器,不知道如何开始。 服务器实际上是一个持续监听请求的Web服务,并在收到请求后将其指向GCM,将GCM通知客户端电话吗?

如果是,我是否可以在WCF等Web服务中实现它?

你可以按照这个教程。

服务器实际上是一个持续监听请求的Web服务,并在收到请求后将其指向GCM,将GCM通知客户端电话吗?

您不需要听取请求。 GCM Push直接将任何消息推送到设备,无需任何请求。 有关更多详细信息,请阅读此文档 。

我已经在另一个post上回答了这个问题,我在这里重复一遍。 代码看起来有点长,但它有效。 通过在C#项目中实现以下代码,我在努力了2天之后向我的手机发送了推送通知。 我提到了有关此实现的链接,但无法在此处发布。 所以将与您分享我的代码。 如果您想在线测试通知,可以访问此链接 。

注意:我有硬编码的apiKey,deviceId和postData,请在你的请求中传递apiKey,deviceId和postData,并从方法体中删除它们。 如果你想传递消息字符串也

public string SendGCMNotification(string apiKey, string deviceId, string postData) { string postDataContentType = "application/json"; apiKey = "AIzaSyC13...PhtPvBj1Blihv_J4"; // hardcorded deviceId = "da5azdfZ0hc:APA91bGM...t8uH"; // hardcorded string message = "Your text"; string tickerText = "example test GCM"; string contentTitle = "content title GCM"; postData = "{ \"registration_ids\": [ \"" + deviceId + "\" ], " + "\"data\": {\"tickerText\":\"" + tickerText + "\", " + "\"contentTitle\":\"" + contentTitle + "\", " + "\"message\": \"" + message + "\"}}"; ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateServerCertificate); // // MESSAGE CONTENT byte[] byteArray = Encoding.UTF8.GetBytes(postData); // // CREATE REQUEST HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://android.googleapis.com/gcm/send"); Request.Method = "POST"; Request.KeepAlive = false; Request.ContentType = postDataContentType; Request.Headers.Add(string.Format("Authorization: key={0}", apiKey)); Request.ContentLength = byteArray.Length; Stream dataStream = Request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); // // SEND MESSAGE try { WebResponse Response = Request.GetResponse(); HttpStatusCode ResponseCode = ((HttpWebResponse)Response).StatusCode; if (ResponseCode.Equals(HttpStatusCode.Unauthorized) || ResponseCode.Equals(HttpStatusCode.Forbidden)) { var text = "Unauthorized - need new token"; } else if (!ResponseCode.Equals(HttpStatusCode.OK)) { var text = "Response from web service isn't OK"; } StreamReader Reader = new StreamReader(Response.GetResponseStream()); string responseLine = Reader.ReadToEnd(); Reader.Close(); return responseLine; } catch (Exception e) { } return "error"; } public static bool ValidateServerCertificate( object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; } 

你可能不熟悉像apiKey,deviceId这样的词。 别担心,我会解释它们是什么以及如何创建它们。

apiKey
内容和原因:这是在向GCM服务器发送请求时使用的密钥。
如何创建: 参考这篇文章

设备编号
什么和为什么:这个id也称为RegistrationId。 这是识别设备的唯一ID。 如果要向特定设备发送通知,则需要此ID。
如何创建:这取决于您实现应用程序的方式。 对于cordova,我使用了一个简单的pushNotification插件你可以使用这个插件简单地创建一个deviceId / RegistrationId。 要做到这一点,你需要有一个senderId 。 谷歌如何创建senderId它真的很简单=)

如果有人需要帮助,请发表评论。

快乐的编码。
-Charitha-