com.google.android.gms.common.api.ApiException: 10: - PullRequest
0 голосов
/ 24 апреля 2018

Я хочу выполнить вход в Google, используя приведенную ниже ссылку.

implementation 'com.google.android.gms:play-services-auth:15.0.0'

Ниже код для инициализации:

private fun initGooglePlus() {
        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.server_client_id))
                .requestEmail()
                .build()
        mGoogleSignInClient = GoogleSignIn.getClient(this.activity!!, gso)
    }

Я звоню по приведенному ниже коду при нажатии кнопки

private fun googlePlusLogin() {
        val signInIntent = mGoogleSignInClient!!.signInIntent
        startActivityForResult(signInIntent, SIGN_IN_CODE)
    }

OnActivityForResult

override
    fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == SIGN_IN_CODE) {
            val task = GoogleSignIn.getSignedInAccountFromIntent(data)
            handleSignInResult(task)
        }  
    }

Я получаю ниже исключения в onActivityForResult:

com.google.android.gms.common.api.ApiException: 10: 
at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source)
at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)

Я пробовал и ключ Android Auth, и ключ Web Auth.Я всегда получаю выше исключения.

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 17 мая 2018

Этот код исключения означает проблемы конфигурации с вашим приложением. У меня возникла та же проблема, и она была решена для меня таким образом (в моем случае я хотел аутентификацию с помощью firebase с механизмом входа в Google):
- Я использовал автоматически созданный Google идентификатор веб-клиента вместо того, который я создал (я даже не просил Google сгенерировать его - он был действительно автоматическим)
- Я обновил свой файл JSON Firebase в своем проекте Android (возможно, в этом нет необходимости, но у меня закончились варианты)
Замечание, которое может быть полезным:
- Если у вас есть такая строка ...

Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        handleSignInResult(task);

... возможно, вам нужна Android-аутентификация

Я скопирую важную часть своего кода (он работает и написан на Java), но я думаю, что, согласно вашему сообщению об исключении, в вашем коде нет ничего плохого.

...
void onCreate (...) {

    firebaseAuth = FirebaseAuth.getInstance();
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.web_server_client_id))
            .requestEmail()
            .build();

    FirebaseUser currentUser = firebaseAuth.getCurrentUser();
    firebaseAuthUpdateUI(currentUser);

    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

    findViewById(getLoginButtonId()).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            signIn();
        }
    });

}



protected void signIn(){
    Intent signInIntent = mGoogleSignInClient.getSignInIntent();
    startActivityForResult(signInIntent, RC_SIGN_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);
        if (result.isSuccess()) {
            // Google Sign In was successful, authenticate with Firebase
            GoogleSignInAccount account = result.getSignInAccount();
            firebaseAuthWithGoogle(account);
        } else {
            // Google Sign In failed, update UI appropriately
            // ...
            firebaseAuthUpdateUI(null);
        }


    }
}


private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    //Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());

    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    firebaseAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        //Log.d(TAG, "signInWithCredential:success");
                        user = firebaseAuth.getCurrentUser();
                        firebaseAuthUpdateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        //Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(SignInActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        user = null;
                        //firebaseAuthUpdateUI(null);
                    }

                    // ...
                }
            });
} ...
...