4

这似乎是一项基本功能,但在遵循登录教程之后,它仅在我选择已在设备上注册的帐户时才有效。

选择“使用另一个帐户”并完成一些步骤进行身份验证后,它会丢失回调结果,(onActivityResult调用)。

我使用GoogleSignInOptions:没有发生异常,我无法添加任何侦听器来检测异常。

但是,GoogleApiClient工作正常,但有一些已弃用的方法,因此我决定切换到GoogleSignInOptions以避免弃用问题。
初始化:

googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();

googleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions);

点击时:

signInButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                signIn();
            }
        });

private void signIn() {
        googleSignInClient.signOut();
        Intent signInIntent = googleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, 123);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 123 && data != null) {
            handleSignInResult(data);
        }
    }

    private void handleSignInResult(Intent data) {
        Task<GoogleSignInAccount> signInTask = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            GoogleSignInAccount googleSignInAccount = signInTask.getResult(ApiException.class);
            if (googleSignInAccount != null) {
                updateUI(googleSignInAccount);
            }
        } catch (ApiException e) {
            e.printStackTrace();
        }
    }

在此处输入图像描述


任何人都可以帮忙吗?

4

1 回答 1

0

更新:此错误现已在 Oauth2 库中修复


所以我也遇到了同样的问题。我发现这是 3 月份报告的一个未解决问题。所以这可能不是您的代码的问题。

我发现另一个关于Oauth2 和 googleAuthUtil 之间区别的stackoverflow问题,使用提到的其他库,我发现这个错误不存在。

我将此包导入我的gradle

implementation('com.google.api-client:google-api-client-android:1.23.0') {
    exclude group: 'org.apache.httpcomponents'
}

并对GoogleAccountCredential对象进行身份验证。

    GoogleAccountCredential credential = new GoogleAccountCredential(context, scope);
    startActivityForResult(credential.newChooseAccountIntent(), resultCode);

您需要GET_ACCOUNTS此方法的权限。

于 2018-06-27T21:29:32.880 回答