在我的Xamarin Android应用中,我致电
var instanceID = InstanceID.GetInstance(this);
string token = instanceID.GetToken("xxx", GoogleCloudMessaging.InstanceIdScope, null);
我以e63498f格式获得一个令牌:oijafa89fjaasi ...
在我的c#程序中,我打电话给
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "key=xxxx");
//Get current connection
string url = "https://gcm-http.googleapis.com/gcm/send";
var message = new JObject();
var data = new JObject();
data.Add("message", "hello from csharp");
message.Add("to", "e63498f:oijafa89fjaasi...");
message.Add("data", data);
HttpResponseMessage response = null;
try
{
response = await client.PostAsync(url, new StringContent(message.ToString(), Encoding.Default, "application/json"));
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
return;
}
//Handle errors
if (!response.IsSuccessStatusCode)
MessageBox.Show("Error: " + response.ToString());
string responseBody = await response.Content.ReadAsStringAsync();
textBox2.Text = responseBody;
我收到回复:
{Text = "{\"multicast_id\":xxxx,\"success\":0,\"failure\":1,\"canonical_ids\":0,\"results\":[{\"error\":\"NotRegistered\"}]}"}
我尝试了很多东西,但是我无法让它发挥作用。如果我使用旧的GCM(gcm.register),则没有错误消息,但我不想使用已弃用的功能。为什么当我从GCM返回令牌时,GCM会说令牌没有注册? (当我进行测试时,应用程序当然是开放的)。我是否需要调用某种方法来实际注册令牌?
答案 0 :(得分:1)
在Xamarin论坛中发现了关于GCM的类似thread,讨论了相同的问题。在线程中提到 "问题似乎是部署到VM可能会触发卸载方案。" 。还包括一个解决方法/解决方案:
"我提出的解决方案是跟踪令牌,我在服务器上收到InstanceId
响应,如果设备显示他们想要使用该令牌我会用send-a-new回复 - 回应。完成此操作的方法是删除{{1}},然后触发注册服务
Google cloud message 'Not Registered' failure and unsubscribe best practices?"
小心尝试。如果有效,请告诉我。