GCM - 尽管返回令牌

时间:2016-04-04 09:08:33

标签: android xamarin google-cloud-messaging

在我的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会说令牌没有注册? (当我进行测试时,应用程序当然是开放的)。我是否需要调用某种方法来实际注册令牌?

1 个答案:

答案 0 :(得分:1)

在Xamarin论坛中发现了关于GCM的类似thread,讨论了相同的问题。在线程中提到 "问题似乎是部署到VM可能会触发卸载方案。" 。还包括一个解决方法/解决方案:

"我提出的解决方案是跟踪令牌,我在服务器上收到InstanceId响应,如果设备显示他们想要使用该令牌我会用send-a-new回复 - 回应。完成此操作的方法是删除{{1}},然后触发注册服务

Google cloud message 'Not Registered' failure and unsubscribe best practices?"

小心尝试。如果有效,请告诉我。