Swift中如何判断PubNub的频道是否成功完成订阅与取消订阅操作
print("Abhay4")对应的是.subscriptionChanged事件,该事件触发仅能说明客户端本地的订阅/取消订阅状态更新操作已执行完成,不能100%代表服务端已成功接收并处理你的订阅请求,也不能直接作为presence事件正常上报的依据。
具体说明和排查建议如下:
.subscriptionChanged是PubNub SDK的本地回调:只要你调用subscribe/unsubscribe方法,SDK完成了本地订阅列表的状态变更,就会触发该回调,所以你每次操作都能触发该打印,首先可以确认你调用订阅、取消订阅的代码逻辑本身没有语法错误,客户端已经响应了你的操作请求。- 要确认操作是否真正同步到服务端,你需要把该回调的
change参数内容打印出来,检查以下信息:- 订阅操作完成后,当前已订阅的频道列表是否包含目标
ch:callroom:${roomId}频道,且presence属性为开启状态 - 取消订阅操作完成后,目标频道是否已从已订阅列表中移除
- 订阅操作完成后,当前已订阅的频道列表是否包含目标
- 你当前的代码存在逻辑冗余问题:
listener全局只需要初始化1次,闭包赋值1次、调用pubnub.add(listener)1次即可,不需要每次订阅、取消订阅时重复给didReceiveSubscription赋值,也不要重复添加同一个监听器,重复操作可能会导致回调触发异常。 - 如果确认
change参数里的订阅信息符合预期,但服务端还是收不到presence事件,可以检查.connectionStatusChanged回调的status参数,确认客户端和PubNub服务端的连接是否正常,是否存在鉴权失败、网络断开等问题,如果连接异常,本地的订阅状态变更不会同步到服务端,自然不会触发对应服务端事件。
内容的提问来源于stack exchange,提问作者user10469417
相关产品推荐
相关产品推荐

