OAuth2 認証トークンを取得してサーバーに渡し、ユーザーの Google リーダー フィードのリストを取得できるようにする必要があります。サーバーは .NET です - 私はそれにもそのコードにもアクセスできませんが、非公式の 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 アプリに送信すると正常に動作します。アプリはリーダー フィードのリストを取得できます。
問題は、これが「Google 内部」デバイスでのみ機能することです。Nook では、Google アカウントをアカウント マネージャーに追加する方法を見つけることができなかったため、そのような運はありませんでした。ここで説明されているように、OAuth 2プロトコルを使用して試みています
トークンを取得する限りは正常に機能します。ユーザーはモバイル ページからアプリを承認し、コード トークンを返します。コード トークンは、モバイル アプリが Auth トークンと交換します。ただし、このトークンはサーバー プロセスでは機能しません。この URL で間違ったスコープを使用している可能性があります。
さまざまな組み合わせで試したスコープ:
- https://www.google.com/reader/api
- https://www.google.com/reader/api/0
- https://www.google.com/reader/api/0/subscription/list
- https://www.google.com/reader/api+https://www.google.com/reader/atom
get token POST から返される JSON の例を次に示します。
{"expires_in":3600,
"token_type":"Bearer",
"access_token":"ya29.AHES6ZSEvuUb6Bvd2DNoMnnN_UnfxirZmf_RQjn7LptFLfI",
"refresh_token":"1\/bUwa5MyOtP6VyWqaIEKgfPh08LNdawJ5Qxz6-qZrHg0"}
スコープやトークンの種類を台無しにしていませんか? トークンの種類を変更する方法がわかりません。他のアイデアはありますか?
PS Google アカウントのログイン ページで次Manage your data in Google Reader
のように尋ねられます: