用于Google Fit身份验证的其他帐户选择

时间:2018-07-04 11:35:42

标签: android google-signin google-fit

我的应用程序中集成了Google登录功能。现在,我正在集成Google Fit以从中读取数据。但是问题出在健身数据的权限请求期间,它没有提供从Device上存在的Google帐户中进行选择的选项。这是我用于请求许可的代码:

FitnessOptions fitnessOptions = FitnessOptions.builder()
             .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
             .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
             .build();
GoogleSignIn.requestPermissions(
                            MyActivity.this, // your activity
                            GOOGLE_FIT_PERMISSIONS_REQUEST_CODE,
                            null, // passing null specifically to ask for account selection
                            fitnessOptions);

此代码将使用用于Google登录的帐户直接移至权限页面。 当我使用其他登录选项时没有调用Google SignIn的Facebook,上面的代码完美地显示了帐户选择对话框。

当用户需要用于Google登录和Fitbit的不同电子邮件帐户时,这会造成问题。

是否有解决方案为Google Fit和Google Sign In拥有单独的帐户? 附注:我的Google登录电子邮件与Firebase和后端逻辑相关联,因此,在我的情况下,要求用户使用与Google Fit关联的Google帐户无济于事

1 个答案:

答案 0 :(得分:0)

尽管我没有找到在我的应用中使用两个Google帐户的解决方案,但我使用以下设置解决了用例:

由于我将Google Login与Firebase一起使用,并且在我的应用中Firebase是用户身份验证的来源,因此我在通过firebase进行身份验证后,只需在Goolge Auth上调用注销即可删除Google身份验证,因此可以选择Google Fit的Google帐户连接。

AuthCredential credential = 
           GoogleAuthProvider.getCredential(googleSignInAccount.getIdToken(), null);
firebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if (App.getGoogleApiHelper().isConnected()) {
            // after checking if google client is available to signout from google auth
            Auth.GoogleSignInApi.signOut(App.getGoogleApiHelper().getGoogleApiClient());
        }
        if (task.isSuccessful()) {
            // Sign in success, update UI with the signed-in user's information
            Timber.tag(TAG).d("signInWithCredential: success");
        } else {
            // If sign in fails, display a message to the user.
            Timber.tag(TAG).d(task.getException(), "signInWithCredential:failure");
        }

    }
});