当我使用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";
},
如何从这些返回的消息中获取文本?
答案 0 :(得分:1)
从行为和事实来看,历史记录提取打印出的状态对象意味着您可能使用 cipherKey 配置客户端。您收到的 status 对象可能将类别设置为解密错误 如果您想使用加密 - 您应该为所有客户端使用相同的密钥,否则他们将无法解密已发送的邮件。如果设置了 cipherKey ,则客户端会自动尝试解密数据,如果收到常规文本,则会失败。
确保(控制台和iOS客户端)配置了相同的 cipherKey ,或者如果您不需要它,请确保它没有在任何客户端上设置。
祝你好运, 塞吉。