我已經在另一個線程上回答了這個問題,我在這裏重複。代碼看起來有點長,但它的工作。通過在C#項目中實現以下代碼,我在掙扎了兩天之後,向我的手機發送了推送通知。我提到了一個關於這個實現的鏈接,但是找不到它在這裏發佈。所以將與我分享我的代碼。如果您想在線測試通知,您可以訪問此link。
注:我已經hardcorded apiKey,DEVICEID和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
什麼&原因是:這將請求發送到GCM服務器時將使用的密鑰。
如何創建:Refer this post
DEVICEID
什麼&原因:此ID也被稱爲RegistrationId。這是識別設備的唯一ID。當你想發送一個 通知給特定的設備時,你需要這個ID。
如何創建 :這取決於您如何實現應用程序。對於科爾多瓦 我使用了一個簡單的pushNotification Plugin你可以簡單地使用這個插件創建一個 deviceId/RegistrationId。要做到這一點,你需要有 a senderId。谷歌如何創建一個senderId它真的很簡單=)
如果有人需要一些幫助發表評論。
快樂編碼。
-Charitha-
如果是這樣,那麼實現服務器有什麼用?在它寫的文檔中:您必須實現的第三方應用程序服務器。此應用程序服務器通過所選的GCM連接服務器將數據發送到啓用GCM的Android應用程序。 是不是我們實現發送消息的服務器? – user2857001
您需要在後端執行的所有操作都是在用戶註冊到GCM服務器並將其保存在數據庫中時從Android設備收集設備令牌。當您想推送消息時,您可以要求Google服務器使用設備令牌和您的API密鑰發送消息。 –
哦!服務器也僅用於註冊設備ID並檢索設備ID。爲了從設備A發送到設備B,設備A將從服務器獲取設備B的ID,並使用GCM將通知推送到設備B? – user2857001