2016-04-04 14 views
0

In meiner Xamarin Android App nenne ichGCM - Gerät nicht registrierter trotz zurück Token

var instanceID = InstanceID.GetInstance(this); 
string token = instanceID.GetToken("xxx", GoogleCloudMessaging.InstanceIdScope, null); 

und ich bekomme ein Token im Gegenzug im Format e63498f: oijafa89fjaasi ...

In meinem C# Programm, das ich rufen

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; 

ich die Antwort erhalten:

{Text = "{\"multicast_id\":xxxx,\"success\":0,\"failure\":1,\"canonical_ids\":0,\"results\":[{\"error\":\"NotRegistered\"}]}"} 

Ich habe viele Dinge versucht, aber ich kann es nicht funktionieren. Wenn ich das alte GCM (gcm.register) verwende, gibt es keine Fehlermeldung, aber ich möchte keine veraltete Funktionalität verwenden. Warum sagt GCM, dass der Token nicht registriert ist, als ich gerade ein Token von GCM zurückerhalten habe? (Die App ist natürlich offen, während ich den Test mache). Muss ich irgendeine Art von Methode aufrufen, um das Token tatsächlich zu registrieren?

+0

Ok, ich habe diesen Fehler oft gefunden, es gibt zwei Fälle: 1-Sie haben die ID zu schnell verwendet, geben Sie mindestens 5-10 Sekunden von dem Moment an, als Sie das Token erhalten haben es. 2-Token werden mit Debug-Builds "beschädigt" (invalidiert? Deprecated?) Mit Debug-Builds (überprüft es die Signatur? Keine Ahnung), löscht das aktuelle Token, wartet 10 Sekunden, registriert ein neues und benutzt es, es funktioniert. – Gusman

+0

Gusman: Danke für deine Antwort. – MortenGR

Antwort

1

Dieses ähnliche thread bezüglich GCM in den Xamarin-Foren gefunden, das das gleiche Problem behandelt. Erwähnte im Thread "Das Problem scheint zu sein, dass Bereitstellungen auf der VM möglicherweise das Deinstallationsszenario auslösen.". Eine Problemumgehung/Lösung ist ebenfalls enthalten:

"Die Lösung, die ich fand, war Tokens zu verfolgen, wo ich eine Not Registered Antwort auf dem Server erhalte, wenn ein Gerät angibt, dass Sie dieses Token verwenden möchten, antworte ich mit einem Senden-a -neue-Token-Antwort. die Art und Weise, dies zu erreichen ist die InstanceId zu löschen und dann auslösen den Registrierungsdienst

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

Pflege, um es auszuprobieren. Lass mich wissen ob es funktioniert.

+0

Danke. Dies war in der Tat der Fall. – MortenGR

Verwandte Themen