Twilio Conversations iOS客户端如何获取及重载对话参与者数组
Twilio Conversations iOS 单个对话参与者获取与刷新指南
很多开发者上手SDK时都会遇到和你一样的困惑:知道TCHConversation对象自带participants数组属性,但直接读取拿到的永远是本地旧缓存,找不到和消息列表拉取方法对等的接口来刷新最新数据。
常见误区:直接读取
TCHConversation自带的participants数组拿到的永远是本地缓存的旧快照,不是实时服务端数据——这个属性本身不具备自动更新能力,必须通过专属接口触发同步才能拿到最新值。
核心操作方法
- 主动刷新服务端最新参与者的官方接口为
getParticipantsWithCompletion:,因为对话参与者的总量远低于消息量,这个接口不设分页参数,一次请求即可拉取当前对话的全量最新参与者数据 - 接口请求成功后,SDK会自动将拉取到的最新数据覆盖到本地缓存的
participants数组,之后你直接读取该属性拿到的就是同步后的最新值,不需要重复发起拉取 - 增量同步的场景不需要手动刷新:当对话的参与者发生变动(新成员加入、成员退出、成员属性修改)时,SDK会通过代理通道主动推送事件,自动把增量变更同步到本地
participants数组,对应触发的代理方法包括conversation:participantJoined:、conversation:participantLeft:、conversation:participantUpdated:
正确调用示例
替代你之前直接读self.client.myConversations.firstObject.participants的写法,和现有初始化逻辑适配的正确流程如下:
[TwilioConversationsClient conversationsClientWithToken:token properties:nil delegate:self completion:^(TCHResult *result, TwilioConversationsClient *convoClient) { if (!result.isSuccessful) return; // 拿到目标对话对象 TCHConversation *targetConversation = convoClient.myConversations.firstObject; // 主动向服务端拉取最新参与者列表,替代直接读本地缓存 [targetConversation getParticipantsWithCompletion:^(TCHResult *fetchResult, NSArray<TCHParticipant *> *latestParticipants) { if (fetchResult.isSuccessful) { // 此处latestParticipants为服务端返回的全量最新参与者数据 // 此时targetConversation.participants本地缓存也已完成同步更新 NSLog(@"对话最新参与者数量: %lu", (unsigned long)latestParticipants.count); } }]; }];
和消息列表拉取逻辑的差异
消息列表因为体量大、存在历史翻页需求,所以提供了getMessagesAfter:withCount:completion:这类带分页参数的拉取接口;但参与者列表默认全量拉取,不需要传索引、条数这类参数,接口设计更简单,一次调用即可完成全量刷新。
内容的提问来源于stack exchange,提问作者Berry Blue
相关产品推荐
相关产品推荐

