Android - вход в Google getDisplayName() дает мне E-Mail вместо отображаемого имени при добавлении новой учетной записи
Я пытаюсь интегрировать Google Sign-in
в моем приложении для Android.
Вот мой код:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PrefUtil.setTaskBarColored(this, R.color.treasure_black);
setContentView(R.layout.activity_login);
ButterKnife.bind(this);
loginHandler = new LoginHandler(this);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestProfile()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.addApi(AppIndex.API).build();
}
@OnClick(R.id.btn_login)
public void OnLoginButtonClick() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
DialogClass.showDialog(this, "Signing In");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
} else {
DialogClass.dismissDialog(this);
}
}
private void handleSignInResult(GoogleSignInResult result) {
if (result.isSuccess()) {
GoogleSignInAccount acct = result.getSignInAccount();
userName = acct.getDisplayName();
Log.i("userName",userName);
email = acct.getEmail();
Uri url=null;
if(acct.getPhotoUrl()!=null){
url = acct.getPhotoUrl();
}
String imageUrl=null;
if(url!=null && (!TextUtils.isEmpty(url.toString()))){
imageUrl=url.toString();
PrefUtil.putString(Constant.PreferenceKey.USER_IMAGE,imageUrl);
}
LoginRequestModel loginRequestModel = new LoginRequestModel(email, userName, imageUrl);
loginHandler.getUserDetails(loginRequestModel);
signOut();
} else {
DialogClass.dismissDialog(this);
}
}
Теперь, когда я пытаюсь войти в свое приложение, если я использую предварительно настроенную учетную запись, выбрав ее в AccountChooser
диалог, работает отлично.
Однако, если в AccountChooser
я использую опцию "Добавить аккаунт" Account Chooser
и добавить новую учетную запись, он дает мне E-Mail в userName = acct.getDisplayName()
вместо имени пользователя, и дает мне ноль в url = acct.getPhotoUrl()
Но если я выйду из своего приложения и использую ту же учетную запись, выбрав ту же учетную запись с помощью средства выбора учетной записи, она отлично работает, и я не могу понять, почему.
Любая помощь будет оценена.
1 ответ
Я также получал ту же проблему, после добавления requestIdToken('Идентификатор клиента вашего сервера') в GoogleSignInOptions теперь я получаю все данные, когда мы добавляем новую учетную запись, в то время как логин Google, следующий за обновленным кодом GoogleSignInOptions, замените ваш сервер идентификатор клиента с вашими проектами Google Outh идентификатор клиента, тогда вы получите правильные данные.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestProfile()
.requestIdToken('Your server client id')
.build();
Также обратитесь к этому Google Signin возвращает отображаемое имя как ноль только при добавлении учетной записи в потоке
Благодарю.