本文介绍声网频道管理 RESTful API 中封禁用户权限 API 的使用说明,包括使用原则,适用场景,不适用场景以及接口调用异常处理的最佳实践。
在使用封禁用户权限 API 时请遵循以下原则:
根据 UID 封禁该用户的加入频道权限,即:将 privileges
设为 join_channel
,填写 uid
,不填写 cname
和 ip
,time
设置为 0
以外的值。
发现有违规用户,无法通过你的业务信令彻底封禁该用户时,通过封禁接口禁止该 UID 进入频道。
在业务信令无法完全封禁非法用户的情况下,可以将使用服务端封禁接口作为一种兜底手段,但需要考虑是否有解封需求。对非法用户的解封通常不应集成进业务主流程,以防解封失败对业务产生影响。
根据 UID 封禁该用户的音视频发流权限,即:将 privileges
设为 publish_audio
或 publish_video
,填写 uid
,不填写 cname
和 ip
,time
设置为 0
以外的值。
当业务上发现用户已经下麦或者没有发流权限的用户可以发音视频流,即可调用封禁接口封禁该 UID 的发流权限。
根据频道名和 UID 将该用户一次性踢出频道(不封禁,只是对用户进行下线一次的操作,用户可以重新登录进入频道),即:将 privileges
设为 join_channel
,填写 cname
和 uid
,不填写 ip
,time
设为 0
。
uid
发流导致异常。在这种情况下,可以用本方法将设备 1 和设备 2 一次性踢出频道,此时设备 1 不会重连,设备 2 重新加入频道即可。time
设置为 0
的一次性踢人是一种较为安全的使用方式。当踢人请求到达边缘节点的时刻,SDK 正好和边缘节点断连的情况下会导致一次性踢人失效。如果发现在踢人后 SDK 又重连上了边缘节点,可以再次调用踢人接口。
频道结束后,根据频道名将所有用户一次性踢出频道,即:将 privileges
设为 join_channel
,填写 cname
,不填写 uid
和 ip
,time
设为 0
。
该方法用于一次性解散结束的频道,快速将所有用户踢出频道。 如果频道确认短时间内不会再开启,也可以将 time
设为 1 分钟或其他时间。
cname
作为封禁规则相当于销毁该频道,请确认符合你的业务要求。在该场景中,请先使用自己的信令在频道结束后通知 SDK 调用 leave channel
。在业务信令无法满足需求的情况下,可将强制解散频道作为兜底手段。如完全依赖 RESTful 请求,会导致请求失败引起的影响被扩大。
根据 IP 封禁用户的加入频道权限,即:将 privileges
设为 join_channel
,填写 ip
,不填写 cname
和 uid
,time
设置为 0
以外的值。
当业务上被攻击并且识别出攻击来源的 IP 时,可以使用 ip
字段对该 IP 进行封禁。
使用 IP 作为封禁规则时可能会误伤他人,如多人共享一个 IP 出口的情况。
操作:用户下麦时封禁发流权限,用户上麦时解封。
不适用原因:RTC 业务逻辑依赖踢人接口的可用性,如解封失败则用户无法发流。
操作:用户离开频道时封禁用户加入频道权限,重新申请加入时解封。
不适用原因:RTC 业务逻辑依赖踢人接口的可用性,如解封失败则用户无法再次加入频道。离开频道时推荐使用一次性踢人以确保用户离开频道。
请求的客户端超时时间建议设置为 20s 以上的值(最低不低于 5s)以对抗网络波动。并在重试超时的请求时,适当增大超时时间以提高网络波动情况下的请求成功率。
可以基于自己的业务逻辑来决定是否需要失败后重试请求以及重试次数。
当请求返回大于等于 500
的错误码或者请求超时时,可以继续重试请求,并在多次重试之间以退避的方式增加等待间隔。