2010-08-16 69 views
6

我正在嘗試在Android 2.1上爲已安裝的應用程序使用Google Data API。如果用戶已經在設備上配置了帳戶,我不希望用戶輸入憑據。因此,我使用帳戶類型爲「com.google」的AccountManager。有沒有使用AccountManager帳戶在Android上驗證Google Data API的官方方法?

但是從哪裏去? Google沒有關於如何進行Google身份驗證的示例(authTokenType等)。有一個項目試圖通過這種方式來完成(http://code.google.com/p/google-authenticator-for-android),但沒有任何成功。

難道會這麼難嗎?這實際上阻止了像Google Reader客戶端這樣的應用程序,這些客戶端必須要求用戶提供他們的Google憑據(希望沒人給他們)。

任何指針/建議表示讚賞。

回答

1

請查看谷歌數據api中的sample code。認證後要做的重要事情是調用GoogleHeaders.setGoogleLogin(String)。

4

是的,這是可能的。一旦你掌握了谷歌賬戶(如你所描述的),你只需要從AccountManager中爲GData服務申請一個授權令牌。

如果android設備已經有一個認證令牌(對於您試圖訪問的特定GData服務),它將返回給您。如果沒有,AccountManager將請求一個並將其退還給您。無論哪種方式,您不必擔心AccountManager處理它。

在下面的例子中,我使用的是谷歌電子表格API:

ArrayList<Account> googleAccounts = new ArrayList<Account>(); 

// Get all accounts 
Account[] accounts = accountManager.getAccounts(); 
    for(Account account : accounts) { 
    // Filter out the Google accounts 
    if(account.type.compareToIgnoreCase("com.google")) { 
     googleAccounts.add(account); 
    } 
    } 
AccountManager accountManager = AccountManager.get(activity); 

// Just for the example, I am using the first google account returned. 
Account account = googleAccounts.get(0); 

// "wise" = Google Spreadheets 
AccountManagerFuture<Bundle> amf = accountManager.getAuthToken(account, "wise", null, activity, null, null); 

try { 
    Bundle authTokenBundle = amf.getResult(); 
    String authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN); 

    // do something with the token 
    InputStream response = sgc.getFeedAsStream(feedUrl, authToken, null, "2.1"); 

} 

我希望這有助於。

1

請確保您在認證後致電GoogleHeaders.setGoogleLogin。那麼你可以看看這個sample code如果需要進一步的幫助。

相關問題