Android Google Войти, продолжает сбой - PullRequest
0 голосов
/ 11 декабря 2018

Итак, есть много вопросов по этому поводу и, казалось бы, много (несколько противоречивой) документации.

Я просто пытаюсь заставить пользователя войти в систему, чтобы отправить счет в таблицу лидеров Google Play Services вмое приложение.

Поэтому они нажимают «Показать таблицу лидеров», и я начинаю процесс проверки входа:

public void displayLeaderboard()
{
    if (checkPlayServices() == true)
    {
        // First, sign in.
        GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);

        if (account == null)
        {
            // Need to get sign-in client?
            if (_googleSignInClient == null)
            {
                // Configure sign-in to request the user's ID, email address, and basic profile. ID and basic profile are included in DEFAULT_SIGN_IN.
                GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).build();
                _googleSignInClient = GoogleSignIn.getClient(this, gso);
            }

            Intent signInIntent = _googleSignInClient.getSignInIntent();
            startActivityForResult(signInIntent, CALLBACK_SIGN_IN_TO_GOOGLE_ACCOUNT);
        }
        else
        {
            actualDisplayLeaderboard(account);
        }
    }
}

Итак, onActivityResult () делает поймать обратный вызов, пока что все хорошо:

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CALLBACK_SIGN_IN_TO_GOOGLE_ACCOUNT)
    {
        // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent()
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try
        {
            GoogleSignInAccount account = task.getResult(ApiException.class);
        // THIS IS WHERE IT FAILS
        // **********************

            // Signed in successfully.
            // ...
        }
        catch (ApiException e)
        {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
            System.out.println("Failed to sign in.");
            String message = e.getMessage();
            System.out.println(message);
            e.printStackTrace();
        }
    }
}

Как указано выше, вот где он терпит неудачу.

12-10 17:24:54.877 12571-12571/*.*.* W/System.err: com.google.android.gms.common.api.ApiException: 12501: 
12-10 17:24:54.877 12571-12571/*.*.* W/System.err:     at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source)
12-10 17:24:54.877 12571-12571/*.*.* W/System.err:     at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
12-10 17:24:54.887 12571-12571/org.fortheloss.sticknodespro W/System.err:     at *.*.*.AndroidLauncher.onActivityResult(AndroidLauncher.java:1013)

Рассматривая примеры для входа в систему и списки лидеров,мой код выглядит идентично.

Мне кажется, что я сбился с пути со всей консолью Firebase и / или консолью Google Play Services (кто знает, что это такой беспорядок) OAUTH и SHA-1, что я не делаюЯ не знаю, что мне нужно, что мне не нужно, это повсеместно и все еще не работает.Некоторые вещи предназначены для «веб-приложения» - это не веб-приложение - у меня там все равно есть учетные данные, они помещаются в приложение и т. Д. - не имеет значения, все еще не работает.

Любойприветствуется правильное направление.

1 Ответ

0 голосов
/ 11 декабря 2018

Обычно ответ приходит после публикации вопроса

Это исправление

            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken(getString(R.string.server_client_id)).requestScopes(Games.SCOPE_GAMES_LITE).build();

Где R.string.server_client_id, как описано здесь https://developers.google.com/identity/sign-in/android/start-integrating#get_your_backend_servers_oauth_20_client_id

(Сначала страница, на которую он меня привел, была для другой версии моего приложения, поэтому, когда я использовал эти учетные данные, она явно не работала. Затем я понял, что мне нужно создать сборку релиза (с моим хранилищем ключей релиза).), чтобы заставить его работать.)

Вещи, которые образцы проектов не показывают / не упоминают ^

Они даже не используют requestIdToken(...)

РЕДАКТИРОВАТЬ: И причина... что он не использует requestIDToken, несмотря на то, что он используется почти во всех аналогичных ответах StackOverflow, потому что вы не должны.Для приложений Android.Это связано с тем, что вы должны иметь это в манифесте Android (app_id взято из раздела связанных приложений консоли Google Play Services)

<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>

Было бы БОЛЬШОЕ, если бы сервисы Google Play кричали на вас, если вы этого не сделали.те, которые включены ...

...