【问题标题】:Guidelines for robust synchronisation of mobile client (iOS, Swift) with Realm Object Server移动客户端(iOS、Swift)与 Realm Object Server 的稳健同步指南
【发布时间】:2017-06-14 08:19:00
【问题描述】:

我已经使用 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))

尝试登录

带有 SyncCredentials 的 SyncUser.logIn

完成后,将以下内容放在主 DispatchQueue (async)

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

如果没有登录,每N分钟重复一次登录尝试直到成功?例如。如何处理应用启动时网络不可用,然后变为可用的情况?

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

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

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

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

【问题讨论】:

    标签: realm realm-mobile-platform realm-object-server


    【解决方案1】:

    来自 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

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

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

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

    【讨论】:

    • 感谢 Kasumi,我错过了演示中 configureDefaultRealm() 的意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 2014-08-20
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    相关资源
    最近更新 更多