C# C语言中向android发送GCM推送通知的服务器#

C# C语言中向android发送GCM推送通知的服务器#,c#,android,wcf,google-cloud-messaging,C#,Android,Wcf,Google Cloud Messaging,我正在开发一个android应用程序,它使用GCM提供的推送通知服务。目前我一直在创建服务器。GCM文档提供的指南是用java编写的,我不知道如何实现。经过一段时间的研究,我在github上发现了使用C#的GCMSharp 普什夏普- 但到目前为止,我还不熟悉创建服务器,不知道如何开始。服务器实际上是一个web服务,它一直在侦听请求并在收到请求时将其定向到GCM,后者将通知推送到客户端电话 如果是,我是否在WCF这样的Web服务中实现它?您可以按照本教程进行操作 服务器实际上是一个不断侦听请求的

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

普什夏普-

但到目前为止,我还不熟悉创建服务器,不知道如何开始。服务器实际上是一个web服务,它一直在侦听请求并在收到请求时将其定向到GCM,后者将通知推送到客户端电话

如果是,我是否在WCF这样的Web服务中实现它?

您可以按照本教程进行操作

服务器实际上是一个不断侦听请求的web服务吗 收到请求后,将其定向到GCM,由GCM推送 通知客户端电话


你不需要听别人的请求。GCM Push直接将任何消息推送到设备,无需任何请求。欲知更多详情,请阅读此文。

我已在另一个帖子上回答了此问题,在此我重复。代码看起来有点长,但它可以工作。我刚刚通过在C#project中实现以下代码向我的手机发送了一个推送通知。我引用了一个关于这个实现的链接,但是在这里找不到它。因此,我将与您共享我的代码。如果您想在线测试通知,可以访问此

注意:我有硬记录的apiKey、deviceId和postData,请通过 请求中的apiKey、deviceId和postData,并将其从 方法主体。如果您还想传递消息字符串

您可能不熟悉apiKey、deviceId等词。别担心,我会解释它们是什么以及如何创建它们

apiKey
什么和为什么:这是向GCM服务器发送请求时使用的密钥。
如何创建:

设备id
什么和为什么:此id也称为注册id。这是用于标识设备的唯一id。当您想发送 通知您需要此id的特定设备。
如何 创建:这取决于您如何实现应用程序。科尔多瓦 我用了一个简单的你可以简单的创建一个 使用此插件的deviceId/RegistrationId。要做到这一点,你需要 仙人掌。Google如何创建senderId非常简单=)

如果有人需要帮助,请留言。

快乐编码。

-Charitha-

如果是这样,那么实现服务器有什么用?它在文档中写道:您必须实现的第三方应用程序服务器。此应用程序服务器通过所选的GCM连接服务器向启用GCM的Android应用程序发送数据。我们实现的服务器不是发送消息的服务器吗?在后端,您需要做的就是在用户注册到GCM服务器时从android设备收集设备令牌,并将它们保存在您的数据库中。当你想要推送一条消息时,你可以要求谷歌服务器使用设备令牌和你的Api密钥发送你的消息。哦!服务器也只是为了注册deviceID和检索deviceID。对于从设备A发送到设备B,设备A将从服务器获取设备B的ID,并使用GCM将通知推送到设备B?GCM不用于将消息从设备A发送到设备B。它用于将消息从服务器推送到设备。但是,您可以使用GCM构建消息传递系统。但它不是有效的。您可以使用XMPP服务器将消息从设备A发送到设备B。
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;
}