在订阅频道后调用didReceiveStatus时,我们无法检索刚刚订阅的频道。
PNSubscribeStatus.data.subscribedChannel或PNSubscribeStatus.data.actualChannel始终为null,PNSubscribeStatus.subscribedChannels提供所有当前订阅的频道,而不是触发didReceiveStatus回调的频道。
我们在这里做错了什么?
答案 0 :(得分:0)
在SDK 4.0中,didReceiveStatus
会返回PNStatus
,根据类文档,除非出现错误情况,否则不会包含该额外信息。对于我们的应用程序,我们使用该处理程序来监视PubNub服务器的连接状态。
答案 1 :(得分:0)
您应该能够获得收到消息的频道,但取决于您是订阅频道还是订阅频道的频道组。这是PubNub Objective-C for iOS SDK subscribe
API Reference:
- (void)client:(PubNub *)client didReceiveMessage:(PNMessageResult *)message {
// Handle new message stored in message.data.message
if (message.data.actualChannel) {
// Message has been received on channel group stored in
// message.data.subscribedChannel
}
else {
// Message has been received on channel stored in
// message.data.subscribedChannel
}
NSLog(@"Received message: %@ on channel %@ at %@", message.data.message,
message.data.subscribedChannel, message.data.timetoken);
}
如果您需要客户订阅的其他频道,您可以拨打where-now
API。
如果您需要更加动态地了解回复频道应该是什么,那么只要在发布时将该频道名称包含在消息中,假设发布者事先知道哪个频道这是。或者,您可以在服务器上执行及时查询,以查找要回复的频道。
答案 2 :(得分:0)
这是PubNub支持的答案:
实际上是status.data.subscribedChannel和status.data.actualChannel 致力于存在事件和接收回调的消息 有关事件来源的信息很重要。
In -client:didReceiveStatus:客户端不提供有关的信息 客户已订阅的特定渠道。如果客户愿意 开始跟踪这些信息,不能保证它会是什么 返回预期值(因为开发人员期望某些渠道存在)。 在以前的版本(3.x)中,所有这些信息都已被跟踪,但是 因为它可以随时修改 - 结果有时是 不可预测的。
订阅可以按顺序完成(一个接一个),如: 订阅A1,订阅C1,订阅B1和B2,取消订阅C1和B1 - 结果将导致单次调用 -client:didReceiveStatus:带有一组通道。
最好只检查您的频道是否在 s_tatus.subscribedChannels _
我的评论: 具有异步过程的关键不在于将其视为方法序列......我们无法保证订阅的完成顺序与订阅请求完全相同,除非我们阻止其他订阅请求直到上一个订阅请求完成的