我需要获取OAuth2身份验证令牌才能将其传递给服务器,以便为用户提取Google阅读器源列表。服务器是.NET - 我无法访问它或代码但很可能是使用unofficial Reader API
我能够使用Android帐户管理器为此目的获取有效令牌,并使用以下代码(请注意authTokenType =“reader”)
Account account = accounts[0];
manager.getAuthToken(account, "reader", null, this, new AccountManagerCallback<Bundle>() {
public void run(AccountManagerFuture<Bundle> future) {
try {
// If the user has authorized your application to use the tasks API
// a token is available.
String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
// Now you can send the token to API...
cacheManager.putString(GOOGLE_AUTH, token);
GoogleReaderManager.startAddFeedActivity(AddGoogleReaderSourcesActivity.this);
finish();
} catch (OperationCanceledException e) {
Log.e(TAG, "User cancelled", e);
finish();
} catch (Exception e) {
Log.e(TAG, "Failed to obtain Google reader API_KEY", e);
}
}
}, null);
当我将令牌发送到服务器端时,上面的代码工作正常.Net app:该应用程序能够检索Reader源列表。
问题是这只适用于“Google inside”设备。在Nook我没有这样的运气,因为我无法找到将Google帐户添加到客户经理。所以我尝试使用OAuth 2协议作为described here
就获取令牌而言,它工作正常:用户从移动页面批准应用程序,该移动页面返回代码令牌,然后移动应用程序为Auth令牌交换。但是,此令牌不适用于服务器进程。我有一种感觉,也许我在这个URL中使用了错误的范围:
我尝试过各种组合的范围:
以下是从get token POST返回的JSON示例
{"expires_in":3600,
"token_type":"Bearer",
"access_token":"ya29.AHES6ZSEvuUb6Bvd2DNoMnnN_UnfxirZmf_RQjn7LptFLfI",
"refresh_token":"1\/bUwa5MyOtP6VyWqaIEKgfPh08LNdawJ5Qxz6-qZrHg0"}
我是否搞乱了范围或令牌类型?不确定如何更改令牌类型。还有其他想法吗?
P.S。 Google帐户登录页面询问:Manage your data in Google Reader
,这就是我怀疑范围错误的原因
答案 0 :(得分:0)
我让它为https://www.google.com/reader/api/0/subscription/list工作。所以想与你分享。
我有效access_token
:
这是我试图解决的问题(部分):
使用这个,我在下面调整了我的api调用并且它有效:)
public static String getReaderContent(String accessToken){
String url = "https://www.google.com/reader/api/0/subscription/list" ;
HttpClient client = new HttpClient();
GetMethod method = new GetMethod(url);
String response="";
method.setRequestHeader("Authorization", "OAuth "+accessToken);
try {
int statusCode = client.executeMethod(method);
String response= method.getResponseBodyAsString();
System.out.println("response " + responseStr);
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
所以这适用于获取订阅列表;但是你无法让你在你的问题中提到的读者api工作。
如果您已经解决了谷歌阅读器API问题,请告诉我。