在 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 中存储聊天消息和对话的最佳方式是啥的主要内容,如果未能解决你的问题,请参考以下文章

为聊天应用程序缓存 apollo 客户端的最佳方式是啥?

限制AngularJS聊天室中消息的最佳方法是啥

在 PostgreSQL 中存储一对多或多对多关系的最佳方式是啥?

在 xmpp 聊天中发送贴纸的最佳方式

获取 Firebase 中每条消息的个人资料图片的最佳方法

iOS:使用 CoreData 的聊天应用程序