Мы находимся под Android (Jellybean и выше), и у нас есть приложение, которое должно использовать OAuth2 с Google для аутентификации.
Я упростил активность входа, но выглядит так:
AccountManager mAccountManager;
// [...]
Account account = new Account("[email protected]", "com.google");
// same with professional email managed by Google as [email protected]
// real code recovers accounts with mAccountManager.getAccountsByType("com.google")
mAccountManager = AccountManager.get(getBaseContext());
mAccountManager.getAuthToken(account, "oauth2:https://www.googleapis.com/auth/userinfo.email", null, MyActivity.this, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> accountManagerFuture) {
try {
String token = accountManagerFuture.getResult().getString(AccountManager.KEY_AUTHTOKEN);
// exception occurs here
// [...]
} catch (Exception e) {
Log.e("account", "exception occurs", e);
}
}
}, null);
Когда мы вызываем accountManagerFuture.getResult()
, он вызывает это исключение:
android.accounts.AuthenticatorException: UNREGISTERED_ON_API_CONSOLE
at android.accounts.AccountManager.convertErrorToException(AccountManager.java:2024)
at android.accounts.AccountManager.access$400(AccountManager.java:144)
at android.accounts.AccountManager$AmsTask$Response.onError(AccountManager.java:1867)
at android.accounts.IAccountManagerResponse$Stub.onTransact(IAccountManagerResponse.java:69)
at android.os.Binder.execTransact(Binder.java:446)
Я не могу найти ни документа об этом, ни других людей с тем же исключением, и я довольно смущен: вызов AccountManager.getAuthToken
предоставляет только учетную запись (имя и тип), область действия и метод обратного вызова нет параметра для указания приложения или чего-то, что я мог бы настроить в консоли API-интерфейса dev.
Я уверен, что я что-то упустил, но что?