2014-10-27 63 views
0

我在我的應用程序中使用了同步適配器。該應用應每3小時執行一次同步。這可以通過ContentResolver.addPeriodicSync完成。但是,在此之前,我需要發送每個同步請求來發送用戶的訪問令牌。令牌的到期時間爲2小時。所以,在任何同步請求之前,它需要有一個有效的訪問令牌。如果訪問令牌已過期,則需要爲該用戶更新新令牌。Android:與同步適配器定期同步的設計考慮因素

我提出的一個解決方案是使用AlarmManager設置重複鬧鐘。當警報觸發時,IntentService將啓動。並刷新用戶的訪問令牌。獲得新令牌後,同步請求將使用ContentResolver.requestSync發送到SyncAdapter。我不確定這是否是一種好的方法或者其他有效的方法。

+0

您如何讓用戶在同步時手動請求訪問令牌? – LightYearsBehind 2014-10-27 04:45:20

+0

該應用程序會每隔3小時在後臺自動同步數據。如何檢查用戶是否正在使用應用程序,定期同步會觸發。 gmail,facebook或twitter等應用程序絕不會要求用戶一次又一次同步輸入數據。他們遵循什麼樣的方法來做到這一點? – Nitish 2014-10-27 04:54:22

+0

大多數訪問令牌都帶有刷新令牌,可以讓您獲得新的令牌。 – ianhanniballake 2014-10-27 05:05:23

回答

2

您應該可以使用AccountManager在OnPerformSync中刷新您的令牌。

檢出此演示應用程序,該應用程序使用自定義同步適配器將使用自定義內容提供者綁定到Google帳戶的Google任務數據同步。

https://github.com/sschendel/SyncManagerAndroid-DemoGoogleTasks

演示應用程序使用GoogleAuthUtil.getTokenWithNotification在OnPerformSync,但(理論上),你應該能夠做到對傳入OnPerformSync帳戶使用AccountManager.getAuthToken同樣的事情。

從Android電子文檔AccountManager.getAuthToken

獲取指定類型的身份驗證令牌特定帳戶,可選提高的通知,如果用戶必須輸入憑據。此方法適用於不應立即用密碼提示中斷用戶的後臺任務和服務。

如果先前生成的身份驗證令牌針對此帳戶和類型進行了緩存,則會返回該令牌。否則,如果保存的密碼可用,則將其發送到服務器以生成新的身份驗證令牌。否則,將返回一個Intent,它在啓動時會提示用戶輸入密碼。如果設置了notifyAuthFailure參數,則還會使用相同的Intent創建狀態欄通知,提醒用戶他們需要在某個時間輸入密碼。

0

我建議你只嘗試檢索一個新的令牌,如果你發現你有的令牌不能再使用。這種方法應該是首選的,因爲那樣你並沒有對應用程序中令牌的有效期進行硬編碼。

它還處理服務器端可能會因爲任何原因在有效期結束前不時無效所有人令牌的情況。