android - 根据UUID退订用户

标签 android pubnub

我是pubnub的初学者,我的问题是当多个用户订阅一个频道时,我可以基于uuid从服务器端取消其中一个用户的订阅吗?如果没有,你能帮我做这个吗?
我的项目依赖于多个用户订阅一个频道,其中服务器端在状态频道上订阅并监听所有状态,我需要服务器端随时取消任何用户的订阅?

最佳答案

pubnub远程控制客户端取消订阅
有两种方法可以实现这一点。一个提供向客户端发送取消订阅信号的能力,另一个允许完全的服务器端控制。以聊天室为例,我将描述如何实现这一点。所有指向PubNub docs are to the Node SDK的链接,但您可以根据需要选中the docs for any other SDK
客户端取消订阅
可以使用信号消息使客户端自动执行操作。
首先,您应该让每个客户机订阅一个客户机独有的频道。频道名称可以包括用户的uuid,如ch-1234-5678-9ABC。只要有办法将客户机映射到该通道,您选择的任何命名约定就足够了。
当服务器确定客户端应该从某个通道取消订阅时,可以在该客户端的专用通道上发送命令信号来执行该操作。消息可能如下:

{'command':'leave', 'channel':'chat-abc'}

当客户机收到这样的消息时,您的客户机逻辑将在通道上执行unsubscribe。不需要最终用户(人员)执行任何操作。某种远程控制取消订阅,或执行客户端所需的任何操作。
您可以同样轻松地在希望客户端取消订阅的通道上发送命令信号,但随后订阅该通道的所有客户端都将收到该消息,并且您的客户端代码将不得不在uuid上进行筛选。不完全是最有效的方法,但绝对是另一种选择。如果需要在频道取消订阅上有多个或所有客户端,则此选项非常有用。您可以传递一个uuid列表,每个客户机只检查其uuid是否在列表中,如果在列表中,则执行该操作。您的消息负载可能如下所示:
{'command':'leave', 'uuids':['1234-5678-9ABC','DEFG-HIJK-LMNO','9876-5432-1ZYX']}

不需要指定频道,因为它将应用于服务器发布邮件的频道。
从频道组中删除频道
上面的代码可以工作,而且非常简单,但是需要服务器和客户机上的代码才能使其全部工作。有了Channel Groups,服务器可以在没有客户机参与的情况下获得所有乐趣,除了最初订阅有问题的频道组。
每个客户机都会订阅自己的频道组(就像上面的私有频道一样),而不是直接订阅频道。让我们调用通道组chat-abc。同样,我们需要一种将通道组映射到特定用户的方法,因此我们使用uuid作为名称的一部分。
对于每个需要成为聊天室一部分的客户,聊天室都像以前一样在cg-1234-5678-9ABC上,this channel will be added to each users' private channel group。从服务器执行此操作的效果是将客户端订阅到该频道以及添加到这些频道组的任何其他频道。
当服务器确定用户需要从频道取消订阅时,它可以简单地remove that channel from that user's private channel group。就这些。
使用访问管理器进行安全控制
现在上面这些都很酷,但不是很安全。因为如果好奇的用户想要,他们可以编写一些代码来订阅频道(任何频道或频道组),或者将频道添加到他们的频道组中,甚至发布到他们想要的任何频道(甚至是没有人收听的频道)。
为了防止出现这种情况,您需要Access Manager并让服务器授予客户机需要订阅的频道或频道组的chat-abc权限,以及客户机需要发布到的频道的read权限。
对于频道组,您的客户只需要write访问频道组。添加到这些频道组的所有频道都将继承read权限,但不会继承任何要发布的read权限-必须为每个频道的每个用户授予该权限。
您的服务器必须对其需要向和从中添加和删除频道的频道组具有write权限(当它需要每个频道组的该权限时,它可以将该权限授予自己)。当客户机被迫离开频道时(无论您从上面选择哪种方式:频道取消订阅或频道组删除频道),您还将删除该用户的auth密钥的manageread权限。
我故意省略了access manager的授予和撤销的细节,因为我们的文档或其他so线程和pubnub博客中已经充分介绍了这一点。但是,如果您需要访问管理器实现方面的更多帮助,请联系PubNub Support

关于android - 根据UUID退订用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35630769/

相关文章:

java - 定义要在 java 端点和 android 中使用的 Java 类

android - Analytics sendEvent 不发送数据

android - 如何使用 PathModifier() 创建一个循环?

Android Q : file. mkdirs() 返回 false

mqtt - 将 MQTT 与 PubNub 结合使用

Android:拖放后,被拖动的editText消失

ios - 如何与世界各地的随机人进行匹配并跨设备发送数据?

private - PubNub 最佳实践 : How to manage private rooms?

ios - pubnub显示消息“无法保存转储”是错误吗?如果没有,如何将其静音?

javascript - Pubnub - 从很多 channel 组中删除很多 channel