TL;ДР; Клиент GoogleFit Api не подключается, если выполнен вход в Google+
Итак... У меня возникла проблема при совместном использовании API GoogleFit и Google+. Я использую Google+ для входа пользователя и использую GoogleFit для получения данных о физической форме.
Помимо Google+ у меня есть несколько других вариантов входа, таких как Facebook и Twitter. Моя проблема в том, что если пользователь вошел в систему с помощью Google+, он больше не может подключиться к клиенту Google Fit. В основном, когда нажимается кнопка для подключения к GoogleFit, ничего не происходит. ЕСЛИ пользователь аутентифицируется через Facebook или Twitter, клиент GoogleFit может нормально подключиться...
Вот некоторый соответствующий код из этого действия:
Google+ клиент:
private GoogleApiClient buildGoogleApiClient() {
return new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Plus.API)
.addScope(Plus.SCOPE_PLUS_LOGIN)
.addScope(Plus.SCOPE_PLUS_PROFILE)
.build();
}
Клиент Google Fit, этот метод вызывается всякий раз, когда пользователь нажимает кнопку, чтобы связать GoogleFit с приложением:
public void buildFitnessClient(Button b) {
// Create the Google API Client
fitConnectButton = b;
mClient = new GoogleApiClient.Builder(this)
.addApi(Fitness.API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mClient.connect();
}
Материалы жизненного цикла:
@Override
public void onConnected(Bundle bundle) {
mSignInClicked = false;
if(mGoogleServices != null) {
Plus.PeopleApi.loadVisible(mGoogleServices, null).setResultCallback(this);
userData = getProfileInformation();
}
if (hasWearDevice) mClient.connect();
}
@Override
protected void onStart() {
super.onStart();
// Connect to G+ api
if(mGoogleServices != null) mGoogleServices.connect();
// Connect to the Fitness API
if (hasWearDevice) mClient.connect();
}
@Override
public void onStop() {
super.onStop();
if(mGoogleServices != null) {
if(mGoogleServices.isConnected()) mGoogleServices.disconnect();
}
if(hasWearDevice) {
if(mClient.isConnected()) mClient.disconnect();
}
}
Какие-либо предложения?