Com.google.android.gms.auth.GoogleAuthException: исключение getToken (Неизвестный источник)

В моем приложении для Android я пытаюсь получить токен google, чтобы проверить его на моем сервере брандмауэр приложений Google. Но я всегда получаю это исключение:

com.google.android.gms.auth.GoogleAuthException: getToken(Unknown Source) exception

Мой код:

    private Account mAccount = AccountManager.get(this).getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE)[0];
    private static final String SCOPE = "audience:server:client_id:" +Constants.WED_CLIENT_ID;
    String token = GoogleAuthUtil.getToken(LoginActivity.this, mAccount.name, SCOPE);

Я пробовал все предлагаемые решения в Stackoverflow.

Ответы

Ответ 1

Через 2 дня исследования я обнаружил, что в то время, когда вы регистрируете свое приложение Android в Google Cloud Console → ваш проект → API и auth, он просит вас отпечатать пальцем, чтобы генерировать ClientID, и каким-то образом мой отпечаток был неправильным ( Я случайно добавил ~$ до этого cmd keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1), и из-за этого он дал мне неправильный отпечаток пальца и был основной причиной:

com.google.android.gms.auth.GoogleAuthException: getToken(Unknown Source) exception.

Ответ 2

Через несколько часов я обнаружил, что в строке области видимости ("audience:server:client_id:...") вам нужно использовать идентификатор клиента веб-приложения, а не андроид.

Идентификатор клиента приложения Android не используется. Это только здесь, чтобы связать имя пакета вашего приложения Android с вашим веб-приложением.

Ответ 3

После прочтения нескольких сообщений в Интернете я произвел значение отпечатка SHA1 моего хранилища ключей как

keytool -exportcert -alias android_keystore -keystore android_keystore -list -v | openssl sha1

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

keytool -exportcert -alias android_keystore -keystore android_keystore -list -v

i.e Не подключайте вывод к openssl sha1. Не уверен, какая разница, но обе команды дают разные значения.

Вы получите несколько отпечатков пальцев, таких как MD5, SHA1, SHA256 и т.д. Используйте значение SHA1.