如何在iOS中使用Pubnub Swift将消息发布到频道

问题描述

当前,我正在开发一个iOS项目,该项目需要使用Pubnub信号实现WebRTC。我将PubNubSwift CocoaPods添加到了我的项目中。当我尝试发布消息时,publish方法期望消息类型为JSONCodable。所以我按如下方式创建结构,

struct sdpPacket: Codable {
    var type: String?
    var sdp: String?
}

struct sdpDataPacket: Codable {
    var id: String?
    var packet: sdpPacket?
    var number: String?
}

在发布方法中,我添加了以下几行

let sdpPacketVal = sdpPacket(type: "offer",sdp: sdp.description)
let packet = sdpDataPacket(id: uuid,packet: sdpPacketVal,number: self.PubnubChannel)
let jsonData = try! JSONEncoder().encode(packet)
let jsonString = String(data: jsonData,encoding: .utf8)!
print(jsonString)
        
self.appDelegate.pubnub.publish(channel: channelName,message: jsonString) { result in
   print(result.map { "Publish Response at \($0.timetoken.timetokenDate)" })
}

但是在回应中,我得到的结果是

failure(The request contained a malformed JSON payload)

我将显示jsonString

{
   "id":"userUUID","packet":{
      "type":"offer","sdp":"RTCSessionDescription:\noffer\nv=0\r\no=- 7871361170753072042 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS RTCmS\r\nm=audio 9 UDP\/TLS\/RTP\/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:PYqe\r\na=ice-"
   },"number":"userPubnubName"
}

我不知道我的代码中有什么错误。 请帮助我。

解决方法

看起来像是对对象进行基本编码。

您需要传递Swift对象。

let sdpPacketVal = sdpPacket(type: "offer",sdp: sdp.description)
let packet = sdpDataPacket(id: uuid,packet: sdpPacketVal,number: self.PubnubChannel)
self.appDelegate.pubnub.publish(channel: channelName,message: jsonString) { result in
   print(result.map { "Publish Response at \($0.timetoken.timetokenDate)" })
}

然后使两个有效负载对象实现JSONCodable

struct sdpPacket: JSONCodable {
    var type: String?
    var sdp: String?
}
struct sdpDataPacket: JSONCodable {
    var id: String?
    var packet: sdpPacket?
    var number: String?
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...