我尝试使用帐户管理员访问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);
但是var my_access_token填充了youtube无法识别的令牌... 我如何从中获取youtube令牌?以及如何获取用户播放列表?
答案 0 :(得分:7)
你很幸运,因为我刚刚在我正在开发的应用程序上解决了这个问题。
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);
答案 1 :(得分:1)
我还没有在应用中使用它,它可能并非在所有Android设备上都可用,但我的理解是,Google Play服务现在提供了获取OAuth 2令牌的最佳方法(包括那些范围为https://gdata.youtube.com)。
有更多信息http://android-developers.blogspot.com/2012/09/google-play-services-and-oauth-identity.html
但是,您可以使用AccountManager方法获得更广泛的兼容性。
答案 2 :(得分:0)
令人困惑的部分是authTokenType参数,它必须与OAuth2访问规范一起完成,例如
“的oauth2:https://gdata.youtube.com”
或
“的oauth2:https://www.googleapis.com/auth/tasks”