1

我遇到了两种创建 Google 登录意图的方法:

1.

private void signIn() {
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        handleSignInResult(result);
    }
}

private void handleSignInResult(GoogleSignInResult result) {
    Log.d(TAG, "handleSignInResult: " + result.isSuccess());
    if (result.isSuccess()) {
        // Signed in successfully, show authenticated UI.
        GoogleSignInAccount acct = result.getSignInAccount();
        String googleAccessToken = acct.getServerAuthCode();
        Uri thumbnailUrl = acct.getPhotoUrl();
        String firstName = acct.getGivenName();
        String lastName = acct.getFamilyName();
        ...
    }
}

2.

private void signIn() {
    Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[]{"com.google"},
            false, null, null, null, null);
    startActivityForResult(intent, RC_SIGN_IN);
}

@Override
protected void onActivityResult(final int requestCode, final int resultCode,
                                final Intent data) {
    if (requestCode == RC_SIGN_IN && resultCode == RESULT_OK) {
        String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
        Log.d(TAG, "onActivityResult: " + accountName);
        String mEmail = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
        String mType = data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE);
        Log.d(TAG, "onActivityResult: " + mType);
    }
}

使用第一种方式,我可以得到用户的账号图片: Uri thumbnailUrl = acct.getPhotoUrl();

使用第二种方式,我可以得到用户的账户类型: String mType = data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE);

我需要帐户类型来获取访问令牌:

Account account = new Account(mEmail, mType);
token = GoogleAuthUtil.getToken(SignInActivity.this, account, mScope);

我一直在为 mType (“com.google”)传递一个硬编码变量,该变量有效但感觉不合适。使用 Auth.GoogleSignInApi.getSignInIntent 版本的意图时,有没有办法获取帐户类型?

另外,有没有办法在使用 AccountPicker.newChooseAccountIntent 版本的意图时获取帐户图片?

4

0 回答 0