2012-07-31 100 views
3

我開發了一個應用程序。我的應用程序需要用戶的反饋。當網絡不可用時,那麼該數據將保存在本地數據庫中。但是,一旦網絡可用,它將自動與中央數據庫同步。與中央數據庫自動同步

但是,我在這裏有一些問題。如果我保存數據庫&將我的應用程序發送到後臺,一旦網絡可用,它必須自動執行與中央數據庫的同步。怎麼做?

我正在使用Reachability類來檢查網絡可用性。

回答

1

目前沒有辦法讓您的應用在網絡可用時「喚醒」。如果用戶在沒有網絡連接的情況下退出應用程序,則只有在他們自願打開您的應用程序之前,您才能做任何事情。

但是,您可以使用UILocalNotification提示他們這樣做。如果您的應用程序正在退出,並且您有一些數據等待上傳,您可以安排通知在4小時內觸發(或無論何時有意義)。

如果用戶在通知時間之前打開應用程序,並且您可以上傳數據,則可以取消通知,並且沒有人會知道它已安排。

如果用戶沒有打開該應用程序,則會顯示通知,並說出如下內容:「您手機上的數據尚未上傳,連接到Internet並啓動MyAwesomeApp以同步數據「。

+0

@benzado ..如果我使用UILocalNotification,每當網絡狀態發生變化時,這些通知就會被解僱,並且應用程序會因爲很多本地通知而受到干擾。無論如何,我喜歡這個主意。 Incase如果該特定用戶忽略通知,那麼此通知將被一次又一次觸發,因爲可達性類'kReachabilityChangedNotification'在可達性更改時被多次觸發。 – Bharath 2012-08-01 09:48:00

+1

@taruninima你誤解了。只有當您的應用正在退出時,您纔會安排一次通知;當你的應用程序打開時,你取消它。除非他們一天內未打開您的應用程序,否則用戶將看不到通知。 – benzado 2012-08-01 19:28:13

1

你不能在iPhone上做到這一點。您的應用在幾秒鐘內停止存在(一旦應用移動到後臺)。

我相信它對所有應用程序來說都是5秒,對於一些需要更多背景時間的應用程序來說,10分鐘。 PS:除非你將應用程序標記爲導航或音樂應用程序,它可以在理論上永久保留在後臺。但我懷疑反饋應用程序是否可以通過此類權限獲得appstore的批准。

0

在保存的數據庫中保留一個額外的列,標記將數據成功上傳到服務器。數據寫入時設置,但尚未上傳。成功上傳時,清除該值。您可以在應用程序進入前臺時檢查此值,並讓其上傳任何未清除此列的數據。在您的應用程序正在運行時,您可以設置適當時間間隔的計時器以重新檢查可達性,如果成功,請嘗試上傳。只有在數據寫入成功後才能清除標誌,並確保服務器不會嘗試處理部分上載(想想有人試圖在地鐵或火車上執行此操作,移入和移出連接)。

+0

@Owen ..我知道如何處理數據是否與中央數據庫同步或不。但我的問題不是這個。請再次參考問題。 – Bharath 2012-08-01 09:42:45

+0

如果沒有時間限制來確定數據何時到達,那麼您可以真正等待,直到再次激活。當然,如果用戶從不重新激活您的應用,則無法保證交付。 – 2012-08-01 13:53:00