我已经在另一个帖子上回答了这个问题,我在这里重复一遍。代码看起来有点长,但它可以工作。通过在 C# 项目中实现以下代码,我在挣扎 2 天后刚刚向我的手机发送了推送通知。我提到了一个关于这个实现的链接,但找不到它在这里发布。所以将与您分享我的代码。如果您想在线测试通知,您可以访问此link。
注意:我有硬编码的 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服务器发送请求时使用的密钥。
如何创建:Refer this post
deviceId
什么&为什么:这个ID也称为RegistrationId。这是用于识别设备的唯一 ID。当你想发送一个
通知您需要此 ID 的特定设备。
如何
create:这取决于您如何实现应用程序。对于科尔多瓦
我用了一个简单的pushNotification Plugin 你可以简单地创建一个
deviceId/RegistrationId 使用这个插件。为此,您需要拥有
一个 senderId。 Google 如何创建 senderId 真的很简单 =)
如果有人需要帮助,请发表评论。
快乐编码。
-Charitha-