我已经使用了RealmTask教程(https://realm.io/docs/tutorials/realmtasks/)中的技术来演示与Realm Object Server一起工作的同步。但是,如realm mobile platform, how to connect while offline?中所述,在间歇性网络连接存在的情况下很难找到实现强大应用程序的设计指南。例如,首次运行应用程序时网络可能不可用,在教程示例中,我认为登录尝试只会在30秒后超时。
从各种渠道,我试图在客户端上概述一种实施方法,并提出以下建议:
=============================================== ==============
启动应用
使用
创建登录凭据SyncCredentials.usernamePassword()
使用
检查用户凭据是否已存在SyncUser.all
如果是这样,请使用适当的密钥(UserId)
获取正确的用户如果获得了用户,请使用
获取Realm配置realmConfiguration = Realm.Configuration(SyncConfiguration(user,realmURL))
尝试使用
登录SyncUser.logIn与SyncCredentials
完成后,将以下内容放在主DispatchQueue(异步)
上realmConfiguration = Realm.Configuration(SyncConfiguration(user,realmURL))
如果没有登录,请每隔N分钟重复登录尝试,直到成功为止?例如。处理应用程序启动时网络不可用但随后可用的情况?
启动应用程序的其余部分,使realmConfiguration可用。
但是,如果已设置realmConfiguration,则仅访问Realm。设计应用程序,以便它处理未设置realmConfiguration的场景。
=============================================== ==============
上述方法是否合理,还是有更好的解决方案?
答案 0 :(得分:0)
来自Realm的Katsumi。我们的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)
}
如果用户之前已登录,则可以使用之前缓存的user
对象。 (SyncUser.current
或SyncUser.all
)
如果没有缓存的用户对象(用户是第一次使用该应用程序,或者用户重新安装该应用程序),请显示登录视图以进行注册。
前一种情况(使用缓存的用户对象)不需要网络访问,因此您无需关心脱机情况。
后一种情况(用户应该注册/进入)需要网络访问,在这种情况下,最佳做法取决于应用程序的规范。它足以显示一个警报视图,表明某些应用程序需要网络,或者使用独立的Realm,然后在应用程序联机后迁移同步域。