2016-04-17 5 views
0

Когда я отправляю сообщение с использованием iOS на канал PubNub, я могу использовать функцию didReceiveMessage, чтобы получить это сообщение и поместить его в свой tableView. Однако, если я отправляю сообщение через клиента в Dev Dashboard, message.data.message возвращает nil после того, как я попытаюсь передать его как String. Вот функция вопрос:PubNub текст сообщения, возвращающий нуль?

func client(client: PubNub, didReceiveMessage message: PNMessageResult) { 
     print("Received: %", message.data.message) 

     let newMessage:String? = message.data.message as? String 
     print(newMessage) // returns nil 
     self.messagesArray.append(newMessage!) 

     dispatch_async(dispatch_get_main_queue()) { 
      self.messageTableView.reloadData() 
     } 
    } 

я получаю следующий ответ в консоли от print("Received: %", message.data.message):

Received: % Optional({ 
    text = test; 
}) 

Однако print(newMessage) возвращается ноль. Что я делаю не так?

Спасибо!

EDIT: Я получаю то же самое, когда пытаюсь получить сообщения из функции historyForChannel.

//get history 
     pubNub.historyForChannel("channelname" as String, withCompletion: { (result, status) -> Void in 
      print(status) 
      if status == nil { 
       if result!.data.messages.count > 0 { 
        let historyMessages = result!.data.messages.description as? [String] 
        print(result) 
        for item in historyMessages!{ 
         self.messagesArray.append(item) 
        } 
       } 
      } 
     }) 

historyMessages равна нулю, даже если результат принтами:

Optional({ 
    Operation = History; 
    Request =  { 
     Authorization = "not set"; 
     Method = GET; 
     Origin = "pubsub.pubnub.com"; 
     "POST Body size" = 0; 
     Secure = YES; 
     URL = "...redacted"; 
     UUID = "...redacted"; 
    }; 
    Response =  { 
     "Processed data" =   { 
      end = 14609023551682481; 
      messages =    (
       "technically ", 
           { 
        text = "Well..ok then"; 
       }, 
       hi, 
       "really ", 
           { 
        text = "Well..ok then"; 
       }, 

Как получить текст из возвращенных сообщений?

ответ

1

От поведения и факта того, что история выборки распечатанных статуса объекта означает, что вы, вероятно, настроили клиент с cipherKey. Это статус Объект, который вы получаете, вероятно, имеет категорию, установленную для ошибки дешифрования.
Если вы хотите использовать шифрование - вы должны использовать тот же ключ для всех клиентов, иначе они не смогут расшифровать отправленные сообщения. Если установлено cipherKey, клиент автоматически пытается расшифровать данные, и он будет терпеть неудачу, если будет получен обычный текст.

Убедитесь, что оба (консоль и клиент iOS) настроены с одинаковым cipherKey, или если вам это не нужно, убедитесь, что он не установлен ни на одном из клиентов.

С уважением, Sergey.