3

在我看来,PubNub 的 Swift 入门文档不适用于 PubNub 4.0 之前的版本。我无法成功建立回调以注册 PubNub。

我的代码:

class Communicator: NSObject, PNObjectEventListener {

    var pubNubClient: PubNub

    override init(){
        let config = PNConfiguration(
            publishKey: "my_publish_key",
            subscribeKey: "my_subscribe_key"
        )
        pubNubClient = PubNub.clientWithConfiguration(config);
        super.init()
        pubNubClient.addListener(self)
        pubNubClient.subscribeToChannels(["my_channel"], withPresence: false)
    }

    func didReceiveMessage(client: PubNub!, message: PNMessageResult!){
        /* THIS METHOD NEVER GETS REACHED */
    }
}

深入研究 PubNub 源代码,这似乎是有问题的区域:

- (void)addListener:(id <PNObjectEventListener>)listener {

    dispatch_async(self.resourceAccessQueue, ^{

        if ([listener respondsToSelector:@selector(client:didReceiveMessage:)]) {
            /* this block is never reached!!! */
            [self.messageListeners addObject:listener];
        }

    /* Remaining Lines Stripped Away */
    });
}

我对 Swift 和与 Objective C 的集成还比较陌生。我很好奇是否存在问题,respondsToSelector因为 Objective C 代码正在引用 Swift 代码。

消息肯定会通过;PubNub 库中还有另一个较低级别的函数,用于记录收到的所有消息。

任何帮助将非常感激。

4

4 回答 4

4

4.0 之前的版本已被弃用,并且不会像以前那样工作。

我建议完全迁移到最新的 (4.0) SDK,新的 iOS SDK 消除了很多臃肿并且编译速度更快。要开始查看本教程

总而言之,实例化 PubNub 客户端如下所示:

let config = PNConfiguration( 
    publishKey: "Your_Pub_Key", 
    subscribeKey: "Your_Sub_Key")   
client = PubNub.clientWithConfiguration(config) 
client?.addListener(self) 
client?.subscribeToChannels(["Your_Channel"], withPresence: false)       

新的 didReceiveMessage 函数如下所示:

func client(client: PubNub!, didReceiveMessage message: PNMessageResult!, withStatus status: PNErrorStatus!) { 
     //Do Something like
     //println(message) 
}
于 2015-07-06T22:29:25.177 回答
3

通过添加解决:

func client(client: PubNub!, didReceiveMessage message: PNMessageResult!) {

}
于 2015-07-06T21:40:59.483 回答
0

添加_客户端为我工作!

func client(_ client: PubNub, didReceiveMessage message: PNMessageResult) {
    print("Pubnub Message: \(message)")
}
于 2017-07-05T11:36:07.080 回答
0

关于如何解析收到的 PNMessageResult 的文档很少。以下是我的处理方式:

func client(client: PubNub!, didReceiveMessage message: PNMessageResult!) {

  let encodedMessage = message.data.valueForKey("message") as! NSDictionary
  let messageType    = encodedMessage["meta"]! as! String
  let messageString  = encodedMessage["data"]!["msg"]! as! String

  print("PubNub: [\(messageType)] \(messageString)") 
}
于 2015-08-20T16:44:43.650 回答