Я добавил аутентификацию Google в своем приложении для Android.Его логин работает нормально и возвращает данные типа name
, email
, id
и т. Д., Но когда я регистрируюсь из своего приложения, используя другую учетную запись, то есть я перехожу на почтовую страницу Google, затем перехожу к созданию новой страницы учетной записи для себя икогда я завершаю процесс регистрации и возвращаюсь обратно в свое приложение, в нем говорится, что я вошел в систему, но я получаю только электронную почту и не идентифицирую информацию об имени пользователя, например username
, display Name
, last Name
(это пустые значения).Так что нужна эта информация и при регистрации.
Я использую последнюю версию Google Auth
"implementation 'com.google.android.gms:play-services-auth:17.0.0"
Я также попробовал способ тихого входа в GoogleAPI-клиент дает тот же результат.
Тем не менее, я протестировал тот же вариант использования с клиентским приложением UBER, и он там работает нормально.
private lateinit var googleSignInClient: GoogleSignInClient
private var googleSignInAccount: GoogleSignInAccount? = null
private lateinit var googleApiClient: GoogleApiClient
private var signedIn = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestProfile()
.build()
googleSignInClient = GoogleSignIn.getClient(this, gso)
sign_in_button.setOnClickListener {
if (signedIn) {
googleSignInClient.revokeAccess().addOnCompleteListener {
Toast.makeText(this, "Logged Out", Toast.LENGTH_LONG).show()
signedIn = false
}
} else {
val signInIntent = googleSignInClient.signInIntent
startActivityForResult(signInIntent, 3)
}
}
googleApiClient = GoogleApiClient.Builder(this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.addConnectionCallbacks(object : GoogleApiClient.ConnectionCallbacks {
override fun onConnected(p0: Bundle?) {
Log.d("GoogleApiClient", "Connected")
}
override fun onConnectionSuspended(p0: Int) {
}
})
.build()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == 3) {
// The Task returned from this call is always completed, no need to attach
// a listener.
val task = GoogleSignIn.getSignedInAccountFromIntent(data) // also tried googleSignInClient.silentSignIn()
try {
val account = task.getResult(ApiException::class.java)
if (account?.displayName.isNullOrBlank()) { // user returned after sign up and name is null
val pendingResult =
Auth.GoogleSignInApi.silentSignIn(googleApiClient)
if (pendingResult.isDone) {
signedIn = true
Toast.makeText(
this,
pendingResult.get().signInAccount?.displayName,
Toast.LENGTH_LONG
).show()
} else {
pendingResult.setResultCallback {
signedIn = true
Toast.makeText(
this,
it.signInAccount?.displayName,
Toast.LENGTH_LONG
).show()
}
}
} else {
Toast.makeText(this, account?.displayName, Toast.LENGTH_LONG).show()
signedIn = true
}
// Signed in successfully, show authenticated UI.
// updateUI(account)
} catch (e: ApiException) {
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information.
Log.w("MainUI", "signInResult:failed code=" + e.statusCode)
// updateUI(null)
}
}
}
override fun onStart() {
super.onStart()
googleApiClient.connect()
googleSignInAccount = GoogleSignIn.getLastSignedInAccount(this)
signedIn = googleSignInAccount != null
if (signedIn) {
Toast.makeText(this, googleSignInAccount?.displayName, Toast.LENGTH_LONG).show()
}
}
Я ожидаю вывод отображаемого имени, электронной почты, нофактический результат равен нулю, электронная почта.