ios - 将应用程序设置与网络服务器同步

标签 ios objective-c inappsettingskit inappsettings

我正在使用 InAppSettingKit 来保存我的应用程序设置。一些设置项与网络服务器有关,它们必须保存在网络服务器中。如何同步它们并保证它们相同?

提前致谢。

最佳答案

InAppSettingKit 似乎没有任何对客户端/服务器交互的内置支持,因此您需要实现自己的自定义同步系统。

您的问题涉及一个非常广泛的主题,有多种可能的解决方案,且复杂程度各异,因此我将仅解释如果我处于您的情况下我会如何做。

  1. 客户端

首先,我将集成 AFNetworking 之类的东西来简化向服务器保存数据和从服务器检索数据的过程。这将允许您轻松地将您的设置“发布”到服务器,并在您希望检索它们时“获取”它们。 AFNetworking 非常强大,文档齐全且免费。您可以在此处了解更多信息:

http://www.afnetworking.com/

每当用户进行更改时,使用 AFNetworking 的方法将更改发布到保存它的服务器上的脚本。当您希望检索它时,执行 GET 操作。您需要在应用程序中生成某种唯一 key 来引用每个用户。如果您在您的应用程序中使用任何类型的登录系统,您可以将它与它联系起来。如果您希望用户想要从多个设备检索这些设置,则您可能需要执行后者。

您还需要决定如何处理冲突的策略。如果本地保存的设置与您从服务器中提取的设置不同,您会怎么做?如果您的用户无法访问网络,您会使用什么后备方案?

通常的解决方案是只采用最近的内容(这意味着您需要存储更新的时间戳) - 这可能最适合简单的需求 - 但逻辑可能会根据您的需求而有所不同。

  1. 服务器端

您将需要一个服务器端组件来处理将这些更改保存到服务器。这可能是 Node.js、Ruby、PHP 等脚本,它接受服务器发送给它的输入并将其保存在数据库或文件中的某个位置。这也是一个广泛的主题,实际上取决于您在服务器端的编程背景。

注意:您应该考虑此类设置的安全需求,尽管如果保存的设置根本不敏感,则安全需求可能很小。否则,您将需要采取适当的措施来保护数据(SSL/TLS、加盐/散列密码等)。

  1. 你需要这个吗?

您在问题中特别提到了“网络服务器”,所以我假设您拥有自己的服务器并且愿意为其编写代码(或者愿意学习如何编写代码)。这就是我编写自己的客户端/服务器代码的方式,它有很多优点,但如果您所做的只是保存一些设置,则可能会超出您的需求。

在 iOS 8 中,Apple 推出了一个名为 CloudKit 的简化 iCloud 系统。它将所有内容与用户的 iCloud 帐户相关联,并且设置简单。如果您所做的只是同步一些简单的设置,您可以使用 CloudKit 的键/值存储来为您处理。

CloudKit 有一些缺点。存储的数据是不透明的(例如,您无法从网络应用程序或 Android 应用程序访问它),仅限于 iOS 8 及更高版本,如果您的应用程序非常,可能会花费您象征性的费用。很受欢迎。不过,对于简单的设置同步,这可能完全适合您的需要。

CloudKit 定价(可能对您免费):

https://developer.apple.com/icloud/documentation/cloudkit-storage/

关于 CloudKit 的 WWDC 视频:

https://developer.apple.com/videos/wwdc/2014/?id=208

https://developer.apple.com/videos/wwdc/2014/?id=231

CloudKit 设计指南:

https://developer.apple.com/library/ios/documentation/General/Conceptual/iCloudDesignGuide/Chapters/Introduction.html

CloudKit 框架引用:

https://developer.apple.com/library/ios/documentation/CloudKit/Reference/CloudKit_Framework_Reference/index.html

希望对您有所帮助。

关于ios - 将应用程序设置与网络服务器同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25922154/

相关文章:

ios - 指针在函数接口(interface)上缺少可空性类型说明符

android - 如何将 Android 应用程序添加到已在 iOS 应用程序中使用的现有 Firebase 项目?

ios - 创建用于在 Objective-C 中单击文本字段时显示错误消息的工具提示

objective-c - 迁移到 Xcode 4.5 后与 Reachability 相关的 undefined symbol

ios - 如何在 Settings.bundle 中的 xCode 中添加额外的 plists 以便与 InAppSettingsKit iPhone 库一起使用?

ios - 在 View 外部触发时如何绑定(bind) SwiftUI.Alert 的呈现?

iphone - 当 iPhone 在 iOS5 上被锁定时,如何防止应用程序被发送终止信号?

ios - 如何在 objective-c 中使用+符号验证电话号码?

ios - InAppSettingsKit 和核心数据

ios - 在没有子类化的情况下为 InAppSettingsKit View Controller 设置委托(delegate)的正确方法是什么