2015-07-06 1 views
3

Мне кажется, что документация PubNub для начала работы в Swift не применяется к версиям ранее PubNub 4.0. Я не могу успешно установить обратный вызов для регистрации в PubNub.Установите обратный вызов в Swift для PubNub 4.0 для получения сообщений

Мой код:

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 есть еще одна функция нижнего уровня, которая регистрирует все полученные сообщения.

Любая помощь будет высоко оценена.

ответ

3

Решено, добавив:

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

} 
+0

Привет Скотт это хорошая новость, дайте нам знать, если есть что-то мы можем предоставить детали с [email protected] – PubNub

+0

В настоящее время я могу получить к нему доступ только, message.data => { message = "{}"; signededChannel = 123; timetoken = 14392105288780634; } – Nigilan

+0

Как я могу получить доступ к «сообщению» внутри него? – Nigilan

4

Версии до 4.0 являются устаревшими и не будут работать точно, как они привыкли.

Я бы рекомендовал полностью перейти на новейший (4.0) SDK, новый SDK для iOS удалил много раздутий и компиляции намного быстрее. Чтобы начать просмотр this tutorial.

Резюмируя, инстанцировании клиента взгляд 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) 
} 
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)") 
} 
0

добавить _ клиента работает для меня!

func client(_ client: PubNub, didReceiveMessage message: PNMessageResult) { 
    print("Pubnub Message: \(message)") 
} 
Смежные вопросы