【发布时间】:2021-02-11 01:40:00
【问题描述】:
SendBird 将每个频道都视为他们的GroupChannel。 1:1 聊天在技术上也是一个只有两个用户的GroupChannel(使用isDistinct = true,所以当您再次尝试创建它时它会返回个人聊天)。
我的问题是,我如何通过他们的名字搜索GroupChannels,包括群组和 1:1 聊天?群聊将有一个通用名称,该名称将显示给该组中的所有用户。但是对于 1:1 聊天,GroupChannel 不会有名字,如果有,也不会显示给用户。对于 1:1 聊天,我们总是显示对方的名字(几乎所有聊天系统工作)。
通常,主 UI 列表包含群聊和 1:1 聊天的混合(所有 GroupChannels)。
--------------------------------
| Search Chat TextField |
|--------------------------------|
|1 John (1:1) |
|2 John's Birthday Plan (group) |
|3 Johnney Eve (1:1) |
|4 Johansson Fans (group) |
| ... |
--------------------------------
所有项目在技术上都是GroupChannel。请注意,所有 1:1 聊天都没有实际的 name,如列表中所示。列表中显示的名字是对方的nickname。
预期:
现在,如果用户搜索“joh”之类的内容,那么它应该返回名称包含“joh”的所有群聊或对方名称包含“joh”的所有 1:1 聊天。 (基本上就是上面例子中展示的所有项目。)
我的尝试:
我最初的解决方案是将 1:1 频道名称保留为 <user1 nickname> & <user2 nickname>,因此当用户按姓名搜索其他用户时,1:1 频道会显示为群组频道。
示例代码:
query = SBDGroupChannel.createMyGroupChannelListQuery()
query?.order = .latestLastMessage
query?.limit = 30
query?.channelNameContainsFilter = "joh"
query.loadNextPage(...)
问题:
这个问题是:
- 如果用户搜索自己的姓名(或仅搜索分隔符
&或仅空格),那么所有个人聊天都将可见,这无关紧要。 - 我的系统允许用户更改昵称,因此每次用户更改昵称时,都必须更新所有 1:1 频道名称(这很痛苦)。
【问题讨论】:
-
您可以为 sendbird 返回的搜索结果添加本地过滤器,并使用您的用户名等删除频道。
-
这也可能行不通,因为有时我可能没有本地所有频道(由于分页功能)。
标签: ios swift sendbird sendbird-ios sendbird-syncmanager