2017-06-14 26 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

相关问题