SendBird 将每个频道视为他们的GroupChannel
. 1:1 聊天在技术上也GroupChannel
只有两个用户(isDistinct = true
因此当您尝试再次创建它时,它会返回个人聊天)。
我的问题是,我如何GroupChannel
按他们的名字搜索包括群组和 1:1 聊天的 s?群聊将有一个通用名称,该名称将显示给该组中的所有用户。但是对于 1:1 聊天,GroupChannel
不会有名字,如果有,就不会显示给用户,对于 1:1 聊天,我们总是显示对方的名字(就像几乎所有的聊天系统一样工作)。
通常,主 UI 列表包含群聊和 1:1 聊天(所有GroupChannel
s)的混合。
--------------------------------
| 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 的频道名称(这很痛苦)。