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.