用于 GCM 推送通知的服务器 在 C# 中

本文关键字:服务器 通知 GCM 用于 | 更新日期: 2023-09-27 18:34:16

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

什夏普 - https://github.com/Redth/PushSharp

但是到目前为止,我是创建服务器的新手,不知道如何开始。服务器实际上是否是一个不断侦听请求并在收到请求后将其定向到 GCM 的 Web 服务,GCM 将通知推送到客户端电话?

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

用于 GCM 推送通知的服务器 在 C# 中

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

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

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

我已经

在另一个线程上回答了这个问题,在这里我重复一遍。代码看起来有点长,但它有效。在挣扎了 2 天后,通过在 C# 项目中实现以下代码,我刚刚向我的手机发送了推送通知。我提到了有关此实现的链接,但找不到要在此处发布的链接。所以会和你分享我的代码。如果您想在线测试通知,请访问此链接。

注意:我有硬线apiKey,设备ID和postData,请通过 请求中的 apiKey、设备 ID 和 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
What & Why :这是向GCM服务器发送请求时将使用的键。
如何创建 : 参考这篇文章

deviceId
What & Why : 此 ID 也称为 RegistrationId。这是用于标识设备的唯一 ID。当您想发送 通知特定设备您需要此 ID。
如何 创建:这取决于您实现应用程序的方式。对于科尔多瓦 我使用了一个简单的推送通知插件,您可以简单地创建一个 设备ID/注册ID使用此插件。要做到这一点,你需要有 发件人 ID。谷歌如何创建一个发件人ID真的很简单=(

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

快乐编码。
-查里塔-