2013-03-26 151 views
6

我使用谷歌登錄通過客戶經理在我的Android應用程序。我可以得到accesstoken,我發送到服務器和服務器可以創建/登錄新用戶。 Accesstoken只有3600秒有效。問題是服務器在此時間過期後無法更新用戶的信息。 Web應用程序需要定期檢查用戶的信息。accountmanager刷新令牌(離線訪問)

如何從android帳戶管理器獲取身份驗證令牌和刷新令牌,以便服務器可以使用刷新令牌定期更新數據?我不想通過android應用程序中的webview使用登錄。

感謝

回答

3

目前你不能,我敢肯定不是你希望的答案,我們對此深感抱歉!如果您有網絡登錄,則可以使用混合流在服務器上獲取刷新令牌(請參閱https://developers.google.com/+/web/signin/server-side-flow),但無法將代碼作爲Android或iOS流的一部分進行檢索。

如果這是你需要的東西,你可以在這裏提交一個功能請求:https://code.google.com/p/google-plus-platform/issues - 我們正在積極尋找明星的數量來衡量對各種功能的需求。

+0

我剛聽說 – 2013-05-14 17:44:42

0

通過客戶經理谷歌授權的過程:

電子郵件ID可以從

AccountManager accountManager = AccountManager.get(getApplicationContext()); 
Account[] accounts = accountManager.getAccountsByType("com.google"); 
String emailID = accounts[0].name; // you can retrieve using google account chooser way also 

這兩根線應在單獨的令牌運行(不是UI線程)來獲得。

String scope = "oauth2:https://www.googleapis.com/auth/userinfo.profile https://gdata.youtube.com"; 
String accessToken = GoogleAuthUtil.getToken(mContext, emailID, scope); 

保存accessToken並用於您的api訪問。

經過一小時(即3600秒)後,我們需要刷新訪問令牌。但現在谷歌在一小時後不支持訪問。我們必須重新啓動應用程序並使用以下行來獲取訪問令牌。

String scope = "oauth2:https://www.googleapis.com/auth/userinfo.profile https://gdata.youtube.com"; 
String accessToken = GoogleAuthUtil.getToken(mContext, emailID, scope); 

這個後臺線程會一直在後臺運行,同時循環

+1

無論如何,您不應該在Android上的後臺線程上使用Thread.sleep()。線程是一個昂貴的資源。 在由AlarmManager觸發的處理程序或後臺服務上安排您的代碼。 – Renascienza 2014-12-13 15:39:48