在PubNub for iOS objective C中的didReceiveStatus中获取相关的订阅频道

时间:2016-04-14 20:16:50

标签: ios objective-c pubnub

在订阅频道后调用didReceiveStatus时,我们无法检索刚刚订阅的频道。

PNSubscribeStatus.data.subscribedChannel或PNSubscribeStatus.data.actualChannel始终为null,PNSubscribeStatus.subscribedChannels提供所有当前订阅的频道,而不是触发didReceiveStatus回调的频道。

我们在这里做错了什么?

3 个答案:

答案 0 :(得分:0)

在SDK 4.0中,didReceiveStatus会返回PNStatus,根据类文档,除非出现错误情况,否则不会包含该额外信息。对于我们的应用程序,我们使用该处理程序来监视PubNub服务器的连接状态。

答案 1 :(得分:0)

PubNub消息收到iOS中的频道名称

您应该能够获得收到消息的频道,但取决于您是订阅频道还是订阅频道的频道组。这是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 _

我的评论: 具有异步过程的关键不在于将其视为方法序列......我们无法保证订阅的完成顺序与订阅请求完全相同,除非我们阻止其他订阅请求直到上一个订阅请求完成