Android AccountManager getAuthToken для области lh2 не выполняет обратный вызов для Lollipop

Вызов AccountManager.getAuthToken() с authTokenType = "lh2" для веб-службы Picasa теперь не возвращает результат на Android 5.x; getAuthToken с «lh2» по-прежнему отлично работает с Android 4.4.x и 6.x, но не с 5.x. Все это отлично работало для Lollipop где-то до августа-сентября 2016 года, и за это время ничего не изменилось в коде или приложении.

Кто-нибудь еще испытывает эту проблему с getAuthToken для «lh2» на устройствах Lollipop? Есть ли другой способ передать токен авторизации учетной записи в PicasaWebService?

Вот соответствующий код для getAuthToken:

//...

String accountName = "[email protected]"
Account selectedAccount = null;
AccountManager accountManager = (AccountManager)activity.getSystemService(Context.ACCOUNT_SERVICE);
Account[] list = accountManager.getAccounts();
for (android.accounts.Account a:list) {
    if (a.name.equals(accountName)) {
        selectedAccount = a;
        break;
    }
}

accountManager.invalidateAuthToken("com.google", null);

AccountManagerFuture<Bundle> tokenFuture = getAccountManager().getAuthToken(
    selectedAccount,
    "lh2",
    null,
    activity,
    new OnTokenAcquired(),
    new Handler(new OnTokenError()));   

//...

private class OnTokenAcquired implements AccountManagerCallback<Bundle> {
    @Override
    public void run(AccountManagerFuture<Bundle> result) {
        try {
            Bundle b = result.getResult();
            if (b.containsKey(AccountManager.KEY_INTENT)) {
                Intent intent = b.getParcelable(AccountManager.KEY_INTENT);
                int flags = intent.getFlags();
                flags &= ~Intent.FLAG_ACTIVITY_NEW_TASK;
                intent.setFlags(flags);
                activity.startActivityForResult(intent, REQUEST_AUTHENTICATE);
                return;
            }
            if (b.containsKey(AccountManager.KEY_AUTHTOKEN)) {
                String authToken = b.getString(AccountManager.KEY_AUTHTOKEN);

                // set authtoken to Picasa Web Service
                _picasaService = new PicasawebService("myApp");
                _picasaService.setUserToken(authToken);

                return;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

private class OnTokenError implements Handler.Callback {
    @Override
    public boolean handleMessage(Message msg) {
        Log.e("onError","ERROR");

        return false;
    }
}

//...

Спасибо!


person Wyatt Wong    schedule 16.09.2016    source источник


Ответы (1)


Похоже, что authTokenType должен быть «областями OAuth», как указано на https://developers.google.com/oauthplayground/ с префиксом "oauth2:".

Для Picasa Web это https://picasaweb.google.com/data/.


accountManager.getAuthToken(account, "oauth2:https://picasaweb.google.com/data/",
               options, false, new GetAuthTokenCallback(), null);
person Erik Arvidsson    schedule 25.10.2016