Подтвердить что ты не робот

Проблема с Android Google Plus. handleSignInResult возвращает False

У меня возникли некоторые проблемы при интеграции функций Google+ Signin. До сих пор я интегрировал все необходимые модули API и кодов G + Sign In API, которые хорошо работают, генерируют и размещают google-services.json внутри/приложение после генерации SHA1 с помощью keytool debug.keystore и вставляют SHA1 в облаке Google консоль разработчика, но теперь есть только один сбой, с которым я сталкиваюсь, начиная с многих дней/недель, т.е. когда я пытаюсь выполнить отладку устройства, и всякий раз, когда я нажимаю "G + Sign In", я получаю следующую ошибку в LogCat:

E/GMPM: getGoogleAppId не удалось со статусом: 10

E/GMPM: загрузка невозможна. Измерение приложения отключено.

D/SignInActivity: handleSignInResult: false

Этот handleSignInResult возвращает False все время и не может выполнить вход, чтобы получать данные дальше. Если кто-нибудь из вас когда-либо сталкивался с такой ситуацией, пожалуйста, помогите мне здесь. Это небольшое препятствие довольно смущает.

Спасибо всем.

4b9b3361

Ответ 1

Используете ли вы Plus.API или Auth.GOOGLE_SIGN_IN_API? Последний является последним обновленным. Проверьте это здесь: https://developers.google.com/identity/sign-in/android/sign-in


Если вы используете Auth.GOOGLE_SIGN_IN_API:

В onActivityResult используйте код, аналогичный приведенному ниже, и вы можете получить код состояния, который определяется GoogleSignInStatusCodes: https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInStatusCodes p >

@Override
public 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);
        int statusCode = result.getStatus().getStatusCode();
    }
}

Наиболее распространенной проблемой является отсутствие правильной регистрации клиента OAuth2. (К сожалению, на данный момент код состояния - INTERNAL_ERROR 8, что не помогает.) Например. Взгляните на эту тему: Произошел INTERNAL_ERROR, когда requestEmail из GoogleSignInOptions Android

Ответ 2

Пожалуйста, застраховате, что вы применили SHA-1 отладочный ключ в файле google-services.json.

Ответ 3

Как сказал Sudhanshu Gaur в этом сообщении, попробуйте сначала сгенерировать подписанный apk, используя тот же ключ, который вы использовали для создайте конфигурационный файл json. Затем установите его на свое устройство и посмотрите, работает ли он. Причина в том, что Android Studio не подписывает ваш apk, когда вы нажимаете "запустить".
Я застрял на одной и той же проблеме, и это исправление отлично работало для меня.

Ответ 4

Если вы добавляете все отпечатки пальцев SHA-1 в firebase, вы все равно получаете сообщение об ошибке .then(я столкнулся с этой проблемой. после этого шаги он решил.) Попробуйте выполнить следующие действия:

1.Go to учетные данные API Google Консоли.

2.Щелкните учетные данные на вкладке слева.

3. Уже присутствуют два идентификатора клиента Android и Web OAuth по умолчанию. Вы должны создать один клиент Android и один клиент Web 2.0.

4.Go до Firebase. В настройках проекта загрузите google-services.json и вставьте в папку приложения.

(Все в порядке, но все же вы не можете подписаться на Google, возможно, на проблему OAuth, поэтому обязательно создайте идентификатор Android и веб-клиента. Наконец, на странице учетных данных есть два клиента Android и два идентификатора веб-клиента.)

Ответ 5

вам необходимо предоставить хэш SHA-1 вашего сертификата подписи на вашем приложении

пример:

Зарегистрированные SHA-1:

CF: 4A: A1: 0A: БК: 84: F2: 31: 28: С3: BA: A7: А3: A2: 36: 10: 5F: 1D: 3E: CB и загрузите созданный файл конфигурации.. и замените на * Yourproject/приложение/Google-service.json

//Получить учебник по файлу google-service.json https://developers.google.com/identity/sign-in/android/start-integrating

//как получить SHA-1 https://developers.google.com/android/guides/client-auth

Ответ 6

Пожалуйста, проверьте, что добавленный вами ключ SHA-1 является отладочным или выпущенным, в зависимости от того, работает ли ваш ключ относительно него. У меня та же проблема, что и у латте. Я понимаю, что я использовал релиз SHA-1, и я тестирую на отладке, тогда он получит ложный результат. Спасибо

Ответ 7

Сначала сгенерируйте ключ отладки:

keytool -exportcert -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore

Затем вставьте SHA1 в настройки проекта Firebase или Google в разделе отпечатков пальцев.

Ответ 8

package com.google.samples.quickstart.signin;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;

/**
 * Activity to demonstrate basic retrieval of the Google user ID, email address, and basic
 * profile.
 */
public class SignInActivity extends AppCompatActivity implements
        View.OnClickListener {

    private static final String TAG = "SignInActivity";
    private static final int RC_SIGN_IN = 9001;

    private GoogleSignInClient mGoogleSignInClient;
    private TextView mStatusTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_DEMO);

        // Views
        mStatusTextView = findViewById(R.id.status);

        // Button listeners
        findViewById(R.id.sign_in_button).setOnClickListener(this);
        findViewById(R.id.sign_out_button).setOnClickListener(this);
        findViewById(R.id.disconnect_button).setOnClickListener(this);

        // [START configure_signin]
        // Configure sign-in to request the user ID, email address, and basic
        // profile. ID and basic profile are included in DEFAULT_SIGN_IN.
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();
        // [END configure_signin]
        // [START build_client]
        // Build a GoogleSignInClient with the options specified by gso.
        mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
        // [END build_client]

        // [START customize_button]
        // Set the dimensions of the sign-in button.
        SignInButton signInButton = findViewById(R.id.sign_in_button);
        signInButton.setSize(SignInButton.SIZE_STANDARD);
        signInButton.setColorScheme(SignInButton.COLOR_LIGHT);
        // [END customize_button]
    }

    @Override
    public void onStart() {
        super.onStart();

        // [START on_start_sign_in]
        // Check for existing Google Sign In account, if the user is already signed in
        // the GoogleSignInAccount will be non-null.
        GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
        updateUI(account);
        // [END on_start_sign_in]
    }

    // [START onActivityResult]
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            // The Task returned from this call is always completed, no need to attach
            // a listener.
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
    }
    // [END onActivityResult]

    // [START handleSignInResult]
    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);

            // Signed in successfully, show authenticated UI.
            updateUI(account);
        } catch (ApiException e) {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
            Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
            updateUI(null);
        }
    }
    // [END handleSignInResult]

    // [START signIn]
    private void signIn() {

        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN);

       /* Intent sign = mGoogleSignInClient.getSignInIntent ();
        startActivityForResult ( sign, RC_SIGN_IN );*/

    }
    // [END signIn]

    // [START signOut]
    private void signOut() {
        mGoogleSignInClient.signOut()
                .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        // [START_EXCLUDE]
                        updateUI(null);
                        // [END_EXCLUDE]
                    }
                });
    }
    // [END signOut]

    // [START revokeAccess]
    private void revokeAccess() {
        mGoogleSignInClient.revokeAccess()
                .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        // [START_EXCLUDE]
                        updateUI(null);
                        // [END_EXCLUDE]
                    }
                });
    }
    // [END revokeAccess]

    private void updateUI(@Nullable GoogleSignInAccount account) {
        if (account != null) {
            mStatusTextView.setText(getString(R.string.signed_in_fmt, account.getDisplayName()));

            findViewById(R.id.sign_in_button).setVisibility(View.GONE);
            findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE);
        } else {
            mStatusTextView.setText(R.string.signed_out);

            findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
            findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE);
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.sign_in_button:
                signIn();
                break;
            case R.id.sign_out_button:
                signOut();
                break;
            case R.id.disconnect_button:
                revokeAccess();
                break;
        }
    }
 }