Когда я регистрируюсь из своего приложения для Android с помощью входа в Google, оно не возвращает имя пользователя, только адрес электронной почты и идентификатор - PullRequest
0 голосов
/ 19 сентября 2019

Я добавил аутентификацию 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()
    }

}

Я ожидаю вывод отображаемого имени, электронной почты, нофактический результат равен нулю, электронная почта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...