我已经使用了 RealmTask 教程 (https://realm.io/docs/tutorials/realmtasks/) 中的技术来演示与 Realm 对象服务器同步的工作。但是,正如 realm 移动平台中提到的,离线时如何连接?,很难找到在存在间歇性网络连接的情况下实现可靠应用的设计指南。例如,首次运行应用程序时网络可能不可用,在教程示例中,我认为登录尝试会在 30 秒后超时。
从各种来源,我试图在客户端上概述一种实现方法,并提出了以下内容:
====
====================================================================在应用程序启动时
创建登录凭据
SyncCredentials.usernamePassword()
使用 检查用户凭据是否已存在
SyncUser.all
如果是这样,请使用适当的密钥 (UserId) 获取正确的用户
如果获得了用户,请使用以下命令获取 Realm 配置
realmConfiguration = Realm.Configuration(SyncConfiguration(user, realmURL))
尝试登录方式
SyncUser.logIn with SyncCredentials
完成后,将以下内容放在主调度队列(异步)上
realmConfiguration = Realm.Configuration(SyncConfiguration(user, realmURL))
如果未登录,则每 N 分钟重复一次登录尝试,直到成功? 例如,处理应用程序启动时网络不可用但随后变得可用的情况?
启动应用程序的其余部分,使领域配置可用。
但是,只有在设置了领域配置的情况下,才能访问 Realm 数据库。设计应用程序,使其能够处理未设置领域配置的情况。
====
====================================================================上述方法是否明智,或者是否有更好的解决方案?
来自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)
}
https://github.com/realm-demos/realm-tasks/blob/master/RealmTasks%20Apple/RealmTasks%20iOS/AppDelegate.swift#L35
如果用户以前登录过,则可以使用之前缓存user
对象。(SyncUser.current
或SyncUser.all
)
如果没有缓存的用户对象(用户是首次使用应用,或者用户重新安装应用),请显示登录视图以注册/登录。
前一种情况(使用缓存的用户对象)不需要网络访问,因此您无需关心脱机情况。
后一种情况(用户应注册/登录)需要网络访问,在这种情况下,最佳做法取决于应用的规范。只要显示一个仅显示警报视图就足够了,该视图指示某些应用程序需要网络,或者使用独立的 Realm 数据库,然后在应用程序上线后迁移同步的领域。