2017-06-14 50 views
0

我已經使用RealmTask教程(https://realm.io/docs/tutorials/realmtasks/)中的技術來演示與Realm對象服務器工作的同步。但是,如realm mobile platform, how to connect while offline?中所述,在存在間歇性網絡連接的情況下很難找到有關實現強大應用程序的設計指南。例如,當應用程序第一次運行時,網絡可能不可用,並且在教程示例中,我認爲在30秒後登錄嘗試會超時。移動客戶端(iOS,Swift)與領域對象服務器的可靠同步指南

從各種來源,我試圖勾勒出客戶端上的實現方法,並提出了以下幾點:

=================== ==========================================

在啓動時應用

SyncCredentials.usernamePassword()創建的登錄憑據

檢查是否獲得了用戶的用戶證書是否已經存在使用

SyncUser.all

如果是這樣,得到使用適當的鍵正確的用戶(用戶ID)

,得到領域配置使用

realmConfiguration = Realm.Configuration(SyncConfiguration(user,realmURL))

嘗試的登錄與

SyncUser.logIn與SyncCredentials

在完成時,把下面的主DispatchQueue(異步)

realmConfiguration = Realm.Configuration(SyncConfiguration(user,realmURL))

如果未登錄,請每隔N分鐘重複一次登錄嘗試,直至成功?例如。處理當應用程序啓動時網絡不可用的情況,但隨後變得可用?

啓動應用程序的其餘部分,使realmConfiguration可用。

但是,如果realmConfiguration已設置,則只能訪問Realm。設計應用程序,以便它可以處理未設置realmConfiguration的場景。

============================================== ===============

上述方法是否合理,還是有更好的解決方案?

回答

0

Katsumi from Realm here。我們的RealmTasks演示應用程序可能會對您有所幫助。 https://github.com/realm-demos/realm-tasks/tree/master/RealmTasks%20Apple

首先,檢查用戶是否已登錄或未啓動應用程序。

if configureDefaultRealm() { 
    window?.rootViewController = ContainerViewController() 
    window?.makeKeyAndVisible() 
} else { 
    window?.rootViewController = UIViewController() 
    window?.makeKeyAndVisible() 
    logIn(animated: false) 
} 

https://github.com/realm-demos/realm-tasks/blob/master/RealmTasks%20Apple/RealmTasks%20iOS/AppDelegate.swift#L35

如果用戶已經在之前被記錄,您可以使用之前被緩存user對象。 (SyncUser.currentSyncUser.all

如果沒有緩存的用戶對象(用戶是第一次使用應用程序,或者用戶重新安裝應用程序),請顯示登錄視圖以註冊/登入。

前一種情況(使用緩存的用戶對象)不需要網絡訪問,因此您無需關心脫機情況。

後一種情況(用戶應該註冊/進入)需要網絡訪問,在這種情況下,最佳實踐取決於應用程序的規範。只需顯示一個正確的警報視圖即可顯示某些應用程序需要網絡,或者在應用程序聯機後使用獨立Realm然後遷移同步領域。

+0

謝謝Kasumi,我在演示中錯過了configureDefaultRealm()的意義。 – gimbal

相關問題