2014-11-25 16 views
8

Mam program instalacyjny, który łączy się z Google Fit, czyta i zapisuje niektóre dane o ciele użytkowników. Gdy użytkownik wyłączy Google Fit w ustawieniach aplikacji, próbuję cofnąć uprawnienia Moje aplikacje dla wywołując:Jak wyłączyć Google Fit i odebrać uprawnienia samej aplikacji

public void disableGoogleFit(){ 
    if(!mClient.isConnected()){ 
     Log.e(TAG, "Google Fit wasn't connected"); 
     return; 
    } 
    PendingResult<Status> pendingResult = Fitness.ConfigApi.disableFit(mClient); 

    pendingResult.setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(Status status) { 
      if(status.isSuccess()) { 
       Log.i(TAG, "Google Fit disabled"); 
      }else{ 
       Log.e(TAG, "Google Fit wasn't disabled " + status); 
      } 
     } 
    }); 
} 

Chociaż mógłbym z powodzeniem czytać/zapisu danych, wyłączenie Fit zwraca mi błąd:

Google Fit wasn't disabled Status 
{statusCode=unknown status code: 5010, resolution=null} 

Edit1: Dodano całą metodę, w której widać, że klient jest podłączony w chwili, gdy próbuję wyłączyć Fit.

+0

został podłączony klient w momencie wezwania do wyłączenia? – SimpleGuy

+0

Tak, jest podłączony – Jaroslav

+0

Po uzyskaniu autoryzacji dostępu do Fit widzisz swoją aplikację na liście w aplikacji Ustawienia Google w obszarze Google Fit> Połączone aplikacje i urządzenia? Jeśli nie, spróbuj wykonać kolejne kroki, aby włączyć interfejs API fitness pod adresem: https://developers.google.com/fit/android/get-started#step_3_enable_the_fitness_api – saxman

Odpowiedz

0

Jak na forum

https://developer.android.com/reference/com/google/android/gms/fitness/ConfigApi.html

public static final int APP_NOT_FIT_ENABLED

Status code denotes that an app was not found in the list of connected apps in Google Fit. Signifies that either access to the app was already revoked, or the app is not registered on the developer's console.

Constant Value: 5010 (0x00001392)

i wezwać disableFit, klient musi być podłączony w momencie wywołania

public abstract PendingResult<Status> disableFit (GoogleApiClient client) 

wyłącza Google Android developer Dopasowany do aplikacji. Można go użyć do unieważnienia wszystkich przyznanych uprawnień dostępu do OAuth z aplikacji, a w konsekwencji do usunięcia wszystkich istniejących subskrypcji i rejestracji aplikacji.

Parametry

client an existing GoogleApiClient. Must be connected at the time of this call.

+0

Jak napisałem w moim pytaniu - klient jest podłączony, gdy próbuję się rozłączyć. – Jaroslav

+0

Do debugowania, możesz spróbować tego 'if (mClient.isConnected()) -> spróbuj wyłączyćFIT tylko wtedy wydrukuj" Klient nie podłączony ". – SimpleGuy

+0

OK, zaktualizowałem moje pytanie. – Jaroslav

2

I również w obliczu podobnego problemu.

This issue occurs if app is not registered properly in google developer console.

myślę zarejestrowałeś aplikację w konsoli programisty Google przy użyciu odcisku palca certyfikatu kluczy produkcja (SHA1), gdzie jak są testy na aplikację, która ma debugowania kluczy.

wykonać następujące czynności:

  1. Tworzenie jeden identyfikator klienta za pomocą odcisku palca certyfikatu debug kluczy (SHA1).
  2. Odinstaluj istniejącą aplikację.
  3. Zainstalować aplikację & połączyć się z Google fit.
  4. Sprawdź w aplikacji google fit & upewnij się, że aplikacja jest wymieniona jako podłączona aplikacja (...> Ustawienia> Połączone aplikacje> Urządzenia połączone & urządzenia).
  5. Teraz uruchom powyższy kod & to zadziała !!!
2

Wpadłem na ten problem, jeśli odwołałem dostęp po stronie Google Fit operacji, zamiast wywoływania metody disableFit(). Podczas korzystania z metody disableFit() rzeczy się rozłączały, a ponowne łączenie było chodzeniem z ciastem. Ale gdy Google Fit odwołuje dostęp, nie eliminuje istniejącej autoryzacji OAuth, więc utkniesz w zawieszeniu. Limbo będąc rozłączonym, ale nie zostało wydane wyzwanie OAuth, więc nadal otrzymujesz błąd 5010.

Jedynym rozwiązaniem, które wymyśliłem, było wyzwanie związane z OAuth po połączeniu się z innym kontem. Wtedy wszystko w porządku. To brzmi jednak jak problem w Google Fit i nic po stronie klienta.

0

Po wyłączeniu połączenia

mClient.disconnect(); 

Który pracował dla mnie