Android 基于UUID取消订阅用户

Android 基于UUID取消订阅用户,android,pubnub,Android,Pubnub,我是PubNub的初学者,我的问题是当多个用户订阅了一个频道时,我可以基于uuid从服务器端取消订阅其中一个用户吗?如果没有,你能帮我做这件事吗 我的项目取决于多个用户订阅了一个频道,其中服务器端订阅了状态频道并收听所有状态,我需要服务器端随时取消订阅任何用户?PubNub Remote Control Client取消订阅 有几种方法可以实现这一点。一个提供向客户端发送取消订阅信号的能力,另一个允许完全的服务器端控制。使用聊天室示例,我将描述如何实现这一点。所有指向的链接,但您可以根据需要进行

我是PubNub的初学者,我的问题是当多个用户订阅了一个频道时,我可以基于uuid从服务器端取消订阅其中一个用户吗?如果没有,你能帮我做这件事吗

我的项目取决于多个用户订阅了一个频道,其中服务器端订阅了状态频道并收听所有状态,我需要服务器端随时取消订阅任何用户?

PubNub Remote Control Client取消订阅 有几种方法可以实现这一点。一个提供向客户端发送取消订阅信号的能力,另一个允许完全的服务器端控制。使用聊天室示例,我将描述如何实现这一点。所有指向的链接,但您可以根据需要进行检查

客户端取消订阅 您可以使用信号消息使客户端自动执行操作

首先,您应该让每个客户机订阅一个对该客户机唯一的通道。频道名称可以包括用户的UUID,如
ch-1234-5678-9ABC
。只要您有办法将客户机映射到该通道,您选择的任何命名约定都足够了

当您的服务器确定客户端应取消订阅某个频道时,您可以在该客户端的专用频道上发送命令信号以执行该操作。消息可能如下所示:

{'command':'leave', 'channel':'chat-abc'}
当客户端收到这样的消息时,您的客户端逻辑将在频道
聊天abc
上执行
取消订阅
。最终用户(人员)无需执行任何操作。某种远程控制取消订阅,或者任何您需要让客户端执行的操作

您可以同样轻松地在希望客户端取消订阅的频道上发送命令信号,但是所有订阅该频道的客户端都会收到消息,并且您的客户端代码必须根据UUID进行过滤。这不是最有效的方法,但绝对是另一种选择。如果您需要在频道上有多个或所有客户端,请取消订阅。您可以传递一个UUID列表,每个客户端只需检查其UUID是否在列表中,如果在列表中,则执行操作。您的消息负载可能如下所示:

{'command':'leave', 'uuids':['1234-5678-9ABC','DEFG-HIJK-LMNO','9876-5432-1ZYX']}
不需要指定任何频道,因为它将应用于服务器发布消息的频道

从通道组中删除通道 上面的方法很简单,但需要服务器和客户机上的代码才能实现。使用,服务器可以享受所有乐趣,而不需要客户端参与,除了最初订阅有问题的频道组

每个客户端都将订阅自己的频道组(就像上面的私有频道一样),而不是直接订阅频道。让我们调用频道组
cg-1234-5678-9ABC
。同样,我们需要一种将通道组映射到特定用户的方法,因此我们使用UUID作为名称的一部分

对于每一个需要成为聊天室一部分的客户机,如以前一样,聊天室位于
chat abc
。从服务器执行此操作的效果是将客户端订阅到该频道以及添加到这些频道组的任何其他频道

当您的服务器确定某个用户需要取消某个频道的订阅时,它可以简单地执行以下操作。这就是全部

访问管理器的安全控制 现在所有这些都很酷,但不是很安全。因为如果好奇的用户想要,他们可以编写一些代码来订阅频道(任何频道或频道组),或者将频道添加到他们的频道组,甚至发布到他们想要的任何频道(甚至是无人收听的频道)

为了防止出现这种情况,您需要并让服务器向客户端需要订阅的频道或频道组授予
read
权限,并向客户端需要发布的频道授予
write
权限

对于频道组,您的客户端只需要
read
访问频道组。添加到这些频道组的所有频道都将继承
读取
权限,但不会继承任何
写入
发布权限-必须为每个频道的每个用户授予该权限

您的服务器必须具有添加和删除频道所需的频道组的
manage
权限(当它需要每个频道组的权限时,可以将该权限授予自己)。当客户端被迫离开某个频道时(通过您从上面选择的任何方式:频道取消订阅或频道组删除频道),您还将删除该用户身份验证密钥的
读取
写入
权限


我故意省略了Access Manager授予和撤销的细节,因为我们的文档或其他SO线程和PubNub博客中已经充分介绍了这一点。但是,如果您在Access Manager实施方面需要更多帮助,请联系。

到目前为止,您做了哪些类型的研究?实际上,我的大部分研究都是在pubnub.com上的API文档上进行的,我发现unsubscribe函数只使用了channel_name参数。我需要的是根据uuid取消用户订阅。谢谢Craig,实际上我们将使用uuid发布留言并从用户端处理取消订阅的解决方案,但当用户处于超时状态,用户无法接收消息时,我们面临一个问题。您能否建议其他解决方案来处理超时状态下的退订?为了清楚起见,我们取消订阅的主要目的是停止接收状态频道上的用户状态。如果用户状态超时,则不会订阅(您可能知道)。只有当他们再次在线并订阅该频道时,你才能加入。这就是Access Manager提供的阻止客户端订阅或发布频道的功能。否则,您将检测到他们已加入,然后强制他们取消订阅