我有一个在本地使用Realm的iOS应用程序,它运行良好,我的目的是使用Realm Object Server来启用:
-
跨设备的数据同步
-
应用程序重新安装数据恢复
我在最后一个问题上遇到了很多麻烦 . 我的应用程序中的流程如下:
-
首先,它试图在我的Realm Sync中找到
User
. 如果存在User
,请转到步骤4.否则,转到步骤2; -
询问用户的姓名,收入和发薪日;
-
获取用户的iCloud的userRecordID和
logIn
到Realm Object Server . -
使用SyncUser的
identity
作为User
实体标识符 . 将我刚才提到的数据(姓名,收入和发薪日)保存到Realm; -
转到主应用程序屏幕,让用户享受应用程序 .
ROS正在使用基于cloudkit的身份验证 . 如果我按照上面的步骤1-4,然后重新安装该应用程序,则会出现此问题 . 我期望在步骤1中检索先前创建的 User
,但是主键旁边的所有字段都设置为空值(名称变为空字符串,收入和发薪日变为0) . 这种行为有望吗?我想在Realm的目的下做什么?
编辑
在@ AustinZ的回答之后让流程更加清晰 .
1 回答
“应用程序安装上的数据恢复”绝对是Realm Sync的有效用例 . 但是,您描述的流程存在问题 .
同步的Realm由两条信息标识:同步用户和Realm对象服务器上的Realm路径(例如
/~/my/realm
) . 如果您有相同的同步用户登录到多个设备,并且每个设备都在同一路径上打开一个Realm的副本,则它们将打开相同的同步Realm并保持彼此同步 .但是,要获得相同的同步用户,用户需要从其设备登录Realm Object Server . 您可以通过使用
SyncCredentials.cloudKit(token:)
创建CloudKitSyncCredentials
值并将该凭据传递给SyncUser.logIn()
来执行此操作 . 然后,设备将与Realm Object Server通信,如果登录成功,则将调用logIn()
方法的回调块并为您提供SyncUser
. 这是您需要用来打开Realms的同步用户 .所以:
您不应手动将用户或用户信息保存到Realms . 我们会自动保留相关信息 .
如果用户删除并重新安装了他们的应用程序,应用程序's documents and files are deleted as well, which means you shouldn' t假定您可以在重新安装创建它的应用程序后访问Realm的数据 .
您应该在步骤3中使用用户的CloudKit凭据并登录到Realm对象服务器,如上所述 .
请查看我们的documentation了解更多信息 .