Доступ к учетной записи на YouTube с помощью аккаунт-менеджера
Я пытаюсь получить доступ к учетной записи YouTube с помощью диспетчера учетных записей, что означает, что я хочу получить доступ к YouTube с помощью учетной записи, связанной с моим устройством, и с этим получить токен YouTube для доступа к плейлисту пользователя и так далее. Приложение Freedi для Android делает что-то подобное.
Я использовал этот код для получения токена
am.getAuthToken(accounts[0], "youtube", true, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bundle = future.getResult();
if (bundle.containsKey(AccountManager.KEY_INTENT)) {
Intent intent = bundle.getParcelable(AccountManager.KEY_INTENT);
intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, 0);
} else if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) {
my_access_token = bundle.getString(AccountManager.KEY_AUTHTOKEN);
onActivityResult(0,1,null);
}
} catch (Exception e) {
Log.e("TEST", e.getMessage(), e);
}
}
}, null);
но переменная my_access_token заполнена токеном, который YouTube не может распознать... как я могу получить из него токен YouTube? а как получить плейлист пользователя?
3 ответа
Вам повезло, так как я только что закончил решение этой проблемы в приложении, которое я разрабатываю.
AccountManager.get(getApplicationContext()).getAuthTokenByFeatures("com.google", "oauth2:https://gdata.youtube.com", null, this,
null, null, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bundle = future.getResult();
String acc_name = bundle.getString(AccountManager.KEY_ACCOUNT_NAME);
String auth_token = bundle.getString(AccountManager.KEY_AUTHTOKEN);
Log.d(DEBUG_TAG, "name: " + acc_name + "; token: " + auth_token);
} catch (Exception e) {
Log.e(DEBUG_TAG, e.getClass().getSimpleName() + ": " + e.getMessage());
}
}
}, null);
Я еще не использовал его в приложении, и оно может быть доступно не на всех устройствах Android, но, насколько я понимаю, сервисы Google Play в настоящее время обеспечивают лучший подход к получению токенов OAuth 2 (включая те, которые доступны для https://gdata.youtube.com/). Там больше информации на
http://android-developers.blogspot.com/2012/09/google-play-services-and-oauth-identity.html
Вы можете использовать подход AccountManager для большей совместимости.
Запутывающей частью является параметр authTokenType, он должен быть в комплекте со спецификацией для доступа OAuth2, например
"oauth2: https://gdata.youtube.com/"
или же
"oauth2: https://www.googleapis.com/auth/tasks"