2012-09-10 4 views
2

안녕하세요 저는 Google 문서 도구에 액세스해야하는 프로젝트 작업을하고 있습니다. 예를 들어 나는 현재 내가 "401 위해 AuthSub 토큰을 구문 분석 할 수 없습니다"얻고 here 에서 시작했습니다 내가 살펴본 :Android : AcountManager를 사용하여 Google 문서 도구에 액세스

https://developers.google.com/google-apps/documents-list/

http://code.google.com/p/google-api-java-client/

Using Android AccountManager to get authtoken for gdata

그리고 나는 안드로이드는 잘못된 유형의 액세스 토큰을 반환합니다. AccountManager를 사용하여 안드로이드에 대한 유효한 액세스 토큰을 만들 수있는 방법이 있거나 아니면 다른 인증 방법을 사용해야합니까?

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 
    } 
} 
+0

우리에게 당신이 실제로 (물론 제거 자격 증명을 사용)를 사용하는 코드를 보여주십시오 사용합니다뿐만 아니라, 자습서를 따라 갔다가 오류가 발생한 정확한 행을 가리 킵니다. –

+0

내 게시물을 수정하여 코드를 포함 시켰습니다. – user1660016

답변

0

이 작업을 성공적으로 수행했습니다. , 구글 API 클라이언트의 버전 1.7으로 전환했고,

com.google.api.client.googleapis.auth.clientlogin.ClientLogin.Response

대신

com.google.api.client.googleapis.auth.oauth2.GoogleCredential

관련 문제