0

我使用了 RealmTask 教程 ( https://realm.io/docs/tutorials/realmtasks/ ) 中的技术来演示与 Realm Object Server 工作的同步。但是,正如realm移动平台中提到的,离线时如何连接?,很难找到在存在间歇性网络连接的情况下实现强大应用程序的设计指南。例如,第一次运行应用程序时网络可能不可用,在教程示例中,我认为登录尝试会在 30 秒后超时。

从各种来源,我试图在客户端概述一种实现方法,并提出了以下内容:

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

在应用程序启动时

创建登录凭据

SyncCredentials.usernamePassword()

检查用户凭据是否已经存在使用

SyncUser.all

如果是这样,请使用适当的密钥 (UserId) 获取正确的用户

如果获得用户,则使用以下方式获取领域配置

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

尝试登录

SyncUser.logIn 与 SyncCredentials

完成后,将以下内容放在主 DispatchQueue(异步)上

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

如果未登录,每隔 N 分钟重复一次登录尝试,直到成功?例如,当应用程序启动时网络不可用,但随后变为可用的情况?

启动应用程序的其余部分,使 realmConfiguration 可用。

但是,只有在设置了 realmConfiguration 后才能访问 Realm。设计应用程序,使其处理未设置领域配置的情况。

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

上述方法是否明智,还是有更好的解决方案?

4

1 回答 1

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)
}

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

如果用户之前已经登录过,您可以使用user之前缓存的对象。(SyncUser.currentSyncUser.all

如果没有缓存的用户对象(用户是第一次使用应用程序,或者用户重新安装应用程序),显示登录视图以注册/登录。

前一种情况(使用缓存的用户对象)不需要网络访问,所以你不需要关心离线情况。

后一种情况(用户应该注册/登录)需要网络访问,在这种情况下,最佳实践取决于应用程序的规范。仅显示一个警报视图就足够了,表明某些应用程序需要网络,或者使用独立领域,然后在应用程序上线后迁移同步领域。

于 2017-06-15T22:01:59.107 回答