こんにちは私はGoogleドキュメントにアクセスする必要があるプロジェクトに取り組んでいます。例として、ここから始めました。 現在、「401AuthSubトークンを解析できません」というメッセージが表示されています。
https://developers.google.com/google-apps/documents-list/
http://code.google.com/p/google-api-java-client/
AndroidAccountManagerを使用してgdataのauthtokenを取得する
そして私が理解しているように、androidは間違ったタイプのアクセストークンを返します。AccountManagerを使用してAndroidの有効なアクセストークンを作成する方法がある場合、または他の認証方法を使用する必要がある場合はどうなりますか?
import com.google.api.client.googleapis.extensions.android.accounts.GoogleAccountManager;
import com.google.api.services.docs.DocsClient;
import com.google.api.services.docs.DocsUrl;
import com.google.api.services.docs.model.DocumentListEntry;
import com.google.api.services.docs.model.DocumentListFeed;
public class Main extends ListActivity{
private static final String AUTH_TOKEN_TYPE = "writely";
private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
protected DocsClient client;
String accountName;
GoogleAccountManager accountManager;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
client = new DocsClient(HTTP_TRANSPORT.createRequestFactory(credential));
accountManager = new GoogleAccountManager(this);
gotAccount();
}
void gotAccount() {
accountManager.getAccountManager().getAuthToken(account, AUTH_TOKEN_TYPE, true, new AccountManagerCallback<Bundle>() {
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, REQUEST_AUTHENTICATE);
} else if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) {
setAuthToken(bundle.getString(AccountManager.KEY_AUTHTOKEN));
onAuthToken();
}
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
}
}, null);
}
void setAuthToken(String authToken) {
credential.setAccessToken(authToken);
}
void onAuthToken() {
List<String> result = new ArrayList<String>();
DocumentListFeed feed = client.executeGetDocumentListFeed(DocsUrl.forDefaultPrivateFull());
for (DocumentListEntry doc : feed.docs) {
result.add(doc.title);
}
//DO something with list
}
}