2017-03-01 10 views
11

Otrzymałem niezarejestrowany token rejestracyjny, nawet jeśli jestem pewien, że mój token jest poprawny i sprawdzam go w logu używam tokena master FirebaseInstanceId.Instance.Token.Niezarejestrowany token rejestracyjny w Firebase

Oto moja metoda:

private void ConfigureFireBase() 
     { 

      Task.Run(() => { 
       var instanceId = FirebaseInstanceId.Instance; 
       Android.Util.Log.Debug("TAG", "{0} {1}", instanceId?.Token?.ToString(), instanceId.GetToken(GetString(Resource.String.gcm_defaultSenderId), Firebase.Messaging.FirebaseMessaging.InstanceIdScope)); 

      }); 

     } 

sprawdzić jak dobrze OnTokenRefresh metody Tym samym

public override void OnTokenRefresh() 
     { 
      var refreshedToken = FirebaseInstanceId.Instance.Token; 
      Log.Debug(TAG, "Refreshed token: " + refreshedToken); 
      SendRegistrationToServer(refreshedToken); 
     } 

ale kiedy próbowałem w Firebase konsoli daje mi ten komunikat o błędzie, gdy próbowałem się http://pushtry.com/ z tym samym tokenem Nie mam Not Registered wiadomość

Uwaga po odinstalowaniu aplikacji i ponownym zainstalowaniu tokena działa, ale po chwili dostałem ten komunikat o błędzie.

+0

Witam. Przepraszam, ale czy mógłbyś sparafrazować tę część "*, ale kiedy spróbowałem w konsoli Firebase, dostałem ten komunikat o błędzie, gdy próbowałem w http://pushtry.com/ z tym samym tokenem, ale nie dostałem niezarejestrowanej wiadomości *". To trochę zagmatwane. Czy masz na myśli, że działa on w Firebase Console, ale nie podczas korzystania z usługi pushtry.com i na odwrót? –

+1

to nie działa w obu, ale wyświetlam komunikat po obu stronach, w konsoli firebase znajduje się niezarejestrowany token rejestracyjny, nawet ten token otrzymałem z metody OnTokenRefresh, więc powinien być odświeżony. –

+0

To samo się ze mną dzieje. Używam też Xamarin. Czy udało Ci się rozwiązać problem? –

Odpowiedz

6

Powodem dlaczego ta kwestia zwolniony powodują, że znak jest niezarejestrowany

The registration token may change when: 

The app deletes Instance ID 
The app is restored on a new device 
The user uninstalls/reinstall the app 
The user clears app data. 

Reference

i tak się stało w trybie debugowania tylko więc nie martw się w trybie zwolnienia każda rzecz będzie w porządku.

Jak rozwiązać problem?

łatwo jest po prostu wymusić odświeżenie tokena wywołać tę metodę w swojej działalności do lądowania (główną działalność, Logowanie), siła ta metoda Firebase zadzwonić OnTokenRefresh()

private void ConfigureFireBase() 
     { 

#if DEBUG 

      Task.Run(() => 
      { 
       var instanceId = FirebaseInstanceId.Instance; 
       instanceId.DeleteInstanceId(); 
       Android.Util.Log.Debug("TAG", "{0} {1}", instanceId?.Token?.ToString(), instanceId.GetToken(GetString(Resource.String.gcm_defaultSenderId), Firebase.Messaging.FirebaseMessaging.InstanceIdScope)); 

      }); 

      // For debug mode only - will accept the HTTPS certificate of Test/Dev server, as the HTTPS certificate is invalid /not trusted 
      ServicePointManager.ServerCertificateValidationCallback += (o, certificate, chain, errors) => true; 


#endif 
     } 

Nadzieja ta pomoc jednego twarz sam problem

+0

Wygląda na to, że wywołanie 'DeleteInstanceId()' spowoduje, że 'FirebaseInstanceId.Instance.Token' zwróci' null' na krótki czas, ale będzie również wyzwalacza 'OnTokenRefresh()' dla 'FirebaseInstanceIdService', która zapełni' FirebaseInstanceId.Instance.Token' z nowym zarejestrowanym tokenem. Dla mnie wywołanie 'FirebaseInstanceId.Instance.GetToken (...)' było nieistotne i zwróciłoby niezarejestrowany token, inny niż 'FirebaseInstanceId.Instance.Token' (używając Firebase v42.1021.1). – tie

0

W moim przypadku użyłem Emulatora i Zapora blokowała go. Użyłem telefonu komórkowego, włączyłem opcje dla programistów i wszystko działało.

Mam nadzieję, że to pomoże.