我遇到了两种创建 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 版本的意图时获取帐户图片?