如何在XCode 7、Swift 2环境下访问PKPushPayload中的数据?
如何在Swift 2中访问PKPushPayload的数据
嘿,既然已经确认设备能正常接收VOIP推送了,那咱们直接来搞定读取Payload内容的问题!
在Xcode 7 + Swift 2的环境下,你需要通过PKPushRegistryDelegate的回调方法来获取并解析推送Payload,具体步骤如下:
确保你的类遵循
PKPushRegistryDelegate协议
首先要在你的类声明里加上协议,比如:class YourPushHandlerClass: NSObject, PKPushRegistryDelegate { // 你的类相关代码 }实现推送接收的回调方法
当设备收到VOIP推送时,系统会触发pushRegistry(_:didReceiveIncomingPushWithPayload:forType:)方法,你可以在这里解析Payload里的自定义数据:func pushRegistry(registry: PKPushRegistry!, didReceiveIncomingPushWithPayload payload: PKPushPayload!, forType type: String!) { // 先校验推送类型是否为VOIP guard type == PKPushTypeVoIP else { return } // 获取Payload的字典结构 let payloadDictionary = payload.dictionaryPayload // 读取服务器端设置的message字段 if let receivedMessage = payloadDictionary["message"] as? String { print("收到的消息内容:\(receivedMessage)") // 这里可以根据需求处理消息,比如触发通话逻辑、显示提示等 } // 读取somethingElse字段 if let otherContent = payloadDictionary["somethingElse"] as? String { print("其他自定义内容:\(otherContent)") } }
关键说明:
- 你在node-apn里设置的
note.payload = { message: 'text', somethingElse: 'this other one ...' },这些自定义字段会直接作为顶层键值对出现在PKPushPayload的dictionaryPayload中,所以直接用键名就能读取。 - Swift 2中建议用
as?进行可选类型转换,避免因为服务器端未传某个字段导致崩溃;如果确定字段一定存在,也可以用as!强制转换,但风险较高。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

