簡體   English   中英

用於GCM的服務器將通知推送到C#中的android

[英]Server for GCM push notification to android in C#

我正在開發一個使用GCM推送通知服務的Android應用程序。 目前我被困在創建服務器。 GCM文檔提供的指南在java中,我不知道如何實現。 經過一段時間的研究,我在github上找到了使用C#的GCMSharp

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

但截至目前,我是創建服務器的新手,並不知道如何開始。 服務器實際上是一個持續監聽請求的Web服務,並在收到請求后將其指向GCM,將GCM通知客戶端電話嗎?

如果是的話,我是否可以在WCF等Web服務中實現它?

你可以按照這個教程。

服務器實際上是一個持續監聽請求的Web服務,並在收到請求后將其指向GCM,將GCM通知客戶端電話嗎?

您無需收聽請求。 GCM Push直接將任何消息推送到設備,無需任何請求。 有關更多詳細信息,請閱讀此文檔

我在另一個帖子上回答了這個問題,我在這里重復一遍。 代碼看起來有點長,但它有效。 通過在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-

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM