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 = "someone@somedamain.com"
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;
}
}
//...
Спасибо!
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);