PubNub消息文本返回nil?

时间:2016-04-17 03:05:35

标签: ios swift pubnub

当我使用iOS向PubNub频道发送消息时,我可以使用didReceiveMessage函数获取该消息并将其放入我的tableView中。但是,如果我通过Dev Dashboard中的客户端发送消息,则在尝试将其作为String转换后,message.data.message将返回nil。这是有问题的功能:

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)正在返回零。我做错了什么?

谢谢!

编辑:当我尝试从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 个答案:

答案 0 :(得分:1)

从行为和事实来看,历史记录提取打印出的状态对象意味着您可能使用 cipherKey 配置客户端。您收到的 status 对象可能将类别设置为解密错误 如果您想使用加密 - 您应该为所有客户端使用相同的密钥,否则他们将无法解密已发送的邮件。如果设置了 cipherKey ,则客户端会自动尝试解密数据,如果收到常规文本,则会失败。

确保(控制台和iOS客户端)配置了相同的 cipherKey ,或者如果您不需要它,请确保它没有在任何客户端上设置。

祝你好运, 塞吉。