在 IOS 中存储聊天消息和对话的最佳方式是啥
Posted
技术标签:
【中文标题】在 IOS 中存储聊天消息和对话的最佳方式是啥【英文标题】:What the best way for storing chat messages and dialogs in IOS在 IOS 中存储聊天消息和对话的最佳方式是什么 【发布时间】:2016-12-14 18:25:45 【问题描述】:我正在编写一个包含聊天的应用程序。存储消息(有时由图像和对话框组成)的最佳做法是什么?一方面,最好将它们保存在 Core Data 中,但用户可以从服务器获取消息。另一方面,我可以使用缓存,但没有人知道消息应该存储多长时间。我无效地试图了解 vk.com 应用程序如何与此配合使用。 你会怎么处理这个?欢迎提供任何 Objective-C 代码示例。
【问题讨论】:
【参考方案1】:我有一个社交应用。我在 Core Data 中将聊天消息与它们所属的聊天室保持联系,因此通过聊天室的托管对象获取一组消息非常容易。如果收到通知,我会在后台更新消息,并且在启动聊天室时,我会 ping 服务器以获取比我最近的消息更新的消息。
对于图像等媒体,您可以将它们作为二进制数据存储在消息实体中,最大不超过 1MB。之后,您应该将它们存储在目录中,并将 URL 作为属性保留在您的消息实体中。
核心数据的另一个真正优势是它可以轻松管理您的内存。您可以获取任何早于特定时间的消息/相关媒体,然后将它们全部删除。由于您的服务器是消息的主要存储库,如果用户碰巧再次打开该聊天室,您可以在需要时下载最后一批消息(并将它们再次存储到 Core Data)。但是你的对象的实际访问都是基于 NSPredicate 的,这使得查询非常容易。
【讨论】:
为什么不在核心数据中使用外部存储选项? @JoeDaniels 好点。只需在属性检查器中检查该选项,让核心数据为您管理更大的数据块。绝对是要走的路。【参考方案2】:如果您没有网络服务,您可以使用Firebase from Google
。 Here 是一个很好的关于云消息传递的示例项目,它还具有发送图像功能。还有免费的Notification
服务也由谷歌提供。示例代码和项目可以在here 找到。它通过Realtime Database
存储消息
【讨论】:
以上是关于在 IOS 中存储聊天消息和对话的最佳方式是啥的主要内容,如果未能解决你的问题,请参考以下文章