如何在 Quickblox 群聊中禁用特定用户的聊天推送

How to disable chat push for specific user in Group chat of Quickblox

我想禁用向仍未接受组请求的用户推送通知。

备注

根据我使用 quickblox 框架 2.7 及更低版本的经验,此答案有效。由于 quickblox 非常频繁地发布更新版本的框架,您将来可能会找到更好的 API。到那时你就可以使用这种方法了。

回答

我认为您不能使用 Quickblox 为群组中的特定用户禁用推送通知 api。

当您向群组发送消息 (QBChat) 时,QBChatDialog 中的每个人都会收到消息,包括发送消息的人 him/her 本人。

有一个隐私列表可以防止用户接收来自特定用户的消息,但这需要从用户端启动。所以我认为这对你没有多大帮助。此功能可用于阻止 person/group 向用户发送消息。

解决方案

最好的办法是,在用户接受组请求之前不要将用户添加到组中。实现您自己的逻辑,向组中的每个用户发送请求,并在 he/she 接受请求后继续添加用户。

1> 发送带有特定自定义对象的 QBChat 消息,其中包含群组 ID、群组类型、群组名称等数据和所有其他必要数据,这将与群组中所有用户的其他 QBChat 消息区分开来。

2> 收到此特殊消息后,显示一个 UI 专门用于处理它,例如带有 "would you like to join the group??" 和按钮接受或拒绝的警报

3> 点击接受后,向您自己的服务器发出 WS 调用,并在您的服务器中 api 将用户添加到他已同意加入的特定组。 因为您已经使用包含对话框信息的对象填充了 QBChat 消息,您应该能够轻松地通知您的服务器用户加入了哪个组。

一旦用户加入群组,他将继续接收群组中的所有消息

编辑

这里是对你的问题的详细回答在评论:)

我很确定你会问这个问题:)

为了将乘员 ID 添加到现有的 QBChatDialog 组,我们使用了 Quickblox 的其余部分 api。记得我告诉过你不要一开始就将所有参与者都添加到组中,而是在他们接受加入组后逐一添加??当用户同意加入组时,我们调用我们的 rest api,它又调用 quickblox api 并将当前用户 ID 添加到组 :)

您可以在 quickblox 的 API 部分轻松找到 api。 如果你发现它给我时间到星期一让我问我的 API 开发人员并更新你相同的

这种方法有 CATACH

QB 文档明确表示只有群组的所有者才能将成员添加到群组中。这意味着仅仅因为你有一个 REST API,你就不能将用户添加到组中。您将需要拥有组所有者的有效会话 ID。登陆的时候会得到session id,相信大家已经很清楚了:)

现在我到底要怎样才能得到群主的会话 ID??

这是我们遵循的方法。在我们开始该项目之前,我们已经预见到此类问题可能会出现很长时间:)

当用户使用我们的应用程序注册时,我们将他的用户名和密码保存在我们的服务器数据库中,并生成一个随机的用户名和密码,并使用该用户名和密码为用户创建一个 Quickblox 帐户,我们保存这个 quick blox 用户名,该用户的 quickblox 密码和 quickblox 用户 ID :)

因此,尽管注册实际上是在处理两台服务器,但用户总是会觉得他在处理一台服务器,并且他继续认为他正在使用他的用户名和密码登录聊天。

但实际上,当用户在登录响应中使用他的用户名和密码登录应用程序时,我们会得到服务器用来创建帐户的 quickblox 用户名和 quickblox 密码。收到它后,应用程序使用 QB 框架使用该用户名和密码登录到 quickblox 帐户:)

这样用户永远不会知道他的 quickblox 用户名和密码以及用户 ID :) 也给了我们很多控制权 :)

话虽这么说 :) 现在,当用户创建一个群组并发送包含自定义对象的特殊 QBChat 消息时,在该自定义对象中连同对话的详细信息,他还会发送他的 quickbloxuserid :)

现在当收到特殊 QBChat 的用户接受请求时,我们提取对话 ID(他打算加入)group_owner_id(创建对话并发送此特殊消息的用户的 ID)并将其连同他自己的 id 一起发送给我们 api :)

一旦 API 收到组所有者 ID,它会从其数据库中提取 QB 用户名和密码并使用它登录并获得有效的会话 ID,最后将用户添加到具有该会话 ID 的组中。

注意:Quickblox 允许用户一次登录多个设备,这意味着它为用户提供多个有效会话 ID。

希望我表达清楚了:)编码愉快。