【发布时间】:2014-07-04 08:18:52
【问题描述】:
我是 GCM 新手,不知道如何从响应中获取 Cannonical Id。这是我读到的:
GCM 提供了一种称为“规范注册 ID”的工具,可以轻松地 从这些情况中恢复过来。定义了一个规范的注册 ID 作为您的应用程序请求的最后一次注册的 ID。 这是服务器在向服务器发送消息时应使用的 ID 设备。
如果您稍后尝试使用其他注册方式发送消息 ID,GCM 将照常处理请求,但它将包含 的registration_id字段中的规范注册ID 回应。确保替换存储在您的注册 ID 具有此规范 ID 的服务器,因为最终您使用的 ID 将 停止工作。
这是我从服务器向设备发送 GCM 消息的功能:
private string SendMessageUsingGCM(String sGCMRegistration, string sMessage, string sCollapseKey)
{
String GCM_URL = @"https://android.googleapis.com/gcm/send";
bool flag = false;
string sError = "";
StringBuilder sb = new StringBuilder();
sb.AppendFormat("registration_id={0}&collapse_key={1}", sGCMRegistration, sCollapseKey);
sb.AppendFormat("&time_to_live=30&delay_while_idle=0"); //Para que se reciba cuanto antes
sb.AppendFormat("&data.msg=" + sMessage);
string msg = sb.ToString();
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(GCM_URL);
req.Method = "POST";
req.ContentLength = msg.Length;
req.ContentType = "application/x-www-form-urlencoded";
req.Headers.Add("Authorization:key=" + sGcmApiKey); //Here goes my Api Key
using (StreamWriter oWriter = new StreamWriter(req.GetRequestStream()))
{
oWriter.Write(msg);
}
using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
{
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
string respData = sr.ReadToEnd();
if (resp.StatusCode == HttpStatusCode.OK) // OK = 200
{
if (respData.StartsWith("id="))
flag = true;
else
sError = respData;
}
else if (resp.StatusCode == HttpStatusCode.InternalServerError) // 500
sError = "Internal server error. Try later.";
else if (resp.StatusCode == HttpStatusCode.ServiceUnavailable) // 503
sError = "Server not available temnporatily. Try later.";
else if (resp.StatusCode == HttpStatusCode.Unauthorized) // 401
sError = "The API Key is not valid.";
else
sError = "Error: " + resp.StatusCode;
}
}
if (flag == true)
return "1";
return "0 " + sError;
}
那么,如何在响应的 registration_id 字段中获取规范注册 ID?
谢谢
【问题讨论】:
标签: java android push-notification google-cloud-messaging