2012-10-16 185 views
2

一切正常播放服務:身份驗證谷歌硬碟SDK

String token = GoogleAuthUtil.getToken(mActivity, mEmail, "oauth2:" + DriveScopes.Drive); 

與令牌我現在可以創建我的驅動實例,並訪問谷歌驅動器。但我意識到,這隻支持Android 2.2及以上。我需要支持android 2.1。

我曾嘗試使用此代碼來獲取令牌:

AccountManager am = AccountManager.get(this); 
Bundle options = new Bundle(); 
am.getAuthToken (
     account, 
     "oauth2:" + DriveScopes.Drive, 
     options, 
     this, 
     new OnTokenAcquired(this), 
     null); 

使用此代碼時,我得到一個令牌,但使用它時,創建我的硬盤比如我不會得到訪問谷歌驅動器。舉例而言,當執行此代碼:

drive.files().list().setQ(trashed=false and title="'someTitle'").execute(); 

我會得到這個錯誤:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized 
{ 
    "code" : 401, 
    "errors" : [ { 
     "domain" : "global", 
     "location" : "Authorization", 
     "locationType" : "header", 
     "message" : "Invalid Credentials", 
     "reason" : "authError" 
    } ], 
    "message" : "Invalid Credentials" 
} 

這是如何創建我的驅動器實例:

HttpTransport httpTransport = new NetHttpTransport(); 
    JacksonFactory jsonFactory = new JacksonFactory(); 
    Drive.Builder b = new Drive.Builder(httpTransport, jsonFactory, null); 
    b.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() { 
     public void initialize(JsonHttpRequest request) throws IOException { 
      DriveRequest driveRequest = (DriveRequest) request; 
      driveRequest.setPrettyPrint(true); 
      driveRequest.setKey(CLIENT_ID); 
      driveRequest.setOauthToken(token); 
      driveRequest.setEnableGZipContent(true); 
     } 
    }); 

    drive = b.build(); 
+0

您使用的是JacksonFactory的庫/ jar文件夾?我得到了NoClassDef發現錯誤 – drulabs

+1

@KKD我用[google插件](https://developers.google.com/eclipse/docs/getting_started)添加了所需的所有jar文件。根據Eclipse com.google.api.client.json.jackson2.JacksonFactory' – iixi

回答

0

好吧,我已經解決了它。問題實際上是我使用了錯誤的客戶端ID。在使用Google Play服務時,我使用客戶端ID來查找Google API控制檯中已安裝的應用程序。當使用AccountManager這個ID不起作用,而不得不使用API​​密鑰進行簡單API訪問。

編輯

發現,這是不完全正確的。看起來不同的設備使用的客戶端ID是不同的。

0

這似乎是正確的,但問題AccountManager OAuth2支持取決於平臺版本(Google Services庫等)。它可能適用於某些設備,可能不適用於其他庫略有不同的其他設備。確保它在2.1上始終如一地工作的唯一方法是使用WebView來獲取令牌。如果AccountManager在某些設備上損壞或出現故障,您無法做任何事情。

+0

,這是JacksonFactory的路徑我是否需要在Google Drive SDK中使用OAuth2,還是可以使用另一種與AccountManager一起使用的身份驗證? – iixi

+0

我*事*它只支持OAuth2,但在參考等查詢它。在任何情況下ClientLogin已被棄用,不提供罰款控制,我不認爲AccountManager支持OAuth 1.0,所以真的沒有其他可行的選擇。 –

+0

所以我解決了我的問題。我添加了一個答案。即使我的問題解決了,我也有點擔心你所說的話。當身份驗證不起作用時,不要爲某些用戶問題。 – iixi