Realm Sync数据重置应用程序重新安装

时间:2017-10-29 19:39:04

标签: ios realm

我有一个在本地使用Realm的iOS应用程序,它运行良好,我的目的是使用Realm Object Server来启用:

  • 跨设备的数据同步
  • 重新安装应用的数据恢复

我最后一次遇到了很多麻烦。我的应用程序中的流程如下:

  1. 首先,它尝试在我的Realm Sync中找到 "dependencies": { "babel-core": "^6.26.0", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-object-rest-spread": "^6.26.0", "react": "^16.0.0", "react-dom": "^16.0.0", "react-router": "^4.2.0", "react-router-dom": "^4.2.2" }, "devDependencies": { "babel-loader": "^7.1.2", "babel-preset-es2015": "^6.24.1", "babel-preset-react": "^6.24.1", "css-loader": "^0.28.7", "file-loader": "^1.1.5", "html-webpack-plugin": "^2.30.1", "node-sass": "^4.5.3", "sass-loader": "^6.0.6", "style-loader": "^0.19.0", "webpack": "^3.8.1", "webpack-dev-server": "^2.9.3" } 。如果存在User,请转到步骤4.否则,请转到步骤2;
  2. 询问用户的姓名,收入和发薪日;
  3. 获取用户对iCloud的userRecordID和User到Realm对象服务器。
  4. 使用SyncUser的logIn作为identity实体标识符。将我刚才提到的数据(姓名,收入和发薪日)保存到Realm;
  5. 转到主应用程序屏幕,让用户享受应用程序。
  6. ROS正在使用基于cloudkit的身份验证。如果我按照上面的步骤1-4,然后重新安装该应用程序,则会出现此问题。我期望在步骤1中检索先前创建的User,但是主键旁边的所有字段都设置为空值(名称变为空字符串,收入和发薪日变为0)。这种行为有望吗?我想在Realm的目的下做什么?

    修改

    在@ AustinZ回答之后让流程更加清晰。

1 个答案:

答案 0 :(得分:2)

"应用安装上的数据恢复"绝对是Realm Sync的有效用例。但是,您描述的流程存在问题。

同步Realm由两条信息标识:同步用户和Realm对象服务器上的Realm路径(例如/~/my/realm)。如果您有相同的同步用户登录到多个设备,并且他们每个都在相同的路径上打开一个Realm的副本,他们将打开相同的同步Realm并保持彼此同步。

但是,要获得相同的同步用户,用户需要从其设备登录到Realm Object Server。您可以使用SyncCredentials创建CloudKit SyncCredentials.cloudKit(token:)值并将该凭据传递给SyncUser.logIn()来执行此操作。然后,设备将与Realm Object Server通信,如果登录成功,则将调用logIn()方法的回调块,并为您提供SyncUser。这是您需要用来打开Realms的同步用户。

所以:

  • 您不应该手动将用户或用户信息保存到Realms。我们会自动保留相关信息。
  • 如果用户删除并重新安装了他们的应用,该应用的文档和文件也会被删除,这意味着您不应该假设您可以在应用后访问Realm的数据创建它的是重新安装的。
  • 您应该在步骤3中使用用户的CloudKit凭据并登录Realm对象服务器,如上所述。

请查看我们的documentation了解详情。