SwiftUI 问题之如何解析inbound 字符串为json

实战问题

我们有一个很长的链,向用户手机发送通知。

用于显示推送的远程通知负载:

{
  "aps": {
    "alert" : {
         "title" : "Test Title" ,
         "subtitle" : "Sub Title,
         "body" : "Sample Body"
      },
    "sound": "Push.aiff",
    "badge": 1,
    "mutable-content": 1,
    "link_url": "https://google.com",
    "category": "NEWS_CATEGORY"
  }
}

不幸的是,我们得到了推送,但是是文本/字符串格式

关闭。这个问题需要细节或清晰。它目前不接受答案。
想改善这个问题吗?通过编辑此帖子添加详细信息并澄清问题。

3 小时前关闭。

我们有一个很长的链,向用户手机发送通知。

用于显示推送的远程通知负载:

{
"aps": {
"alert" : {
"title" : "Test Title" ,
"subtitle" : "Sub Title,
"body" : "Sample Body"
},
"sound": "Push.aiff",
"badge": 1,
"mutable-content": 1,
"link_url": "https://google.com",
"category": "NEWS_CATEGORY"
}
}
不幸的是,我们得到了推送,但是是文本/字符串格式:

在此处输入图片说明

我们的承包商无法将通知负载转换为普通的 JSON,因此我们必须在前端进行。

也许您可以建议任何有助于在接收推送通知之前正确解析推送通知的方法/过程/功能?

解决方案

您可以使用这种类型的代码来获取字符串通知负载以解码 JSON:

struct Notification: Codable {
    let aps: Aps
}

struct Aps: Codable {
    let alert: Alert
    let sound: String
    let badge, mutableContent: Int
    let linkURL: String
    let category: String

    enum CodingKeys: String, CodingKey {
        case alert, sound, badge
        case mutableContent = "mutable-content"
        case linkURL = "link_url"
        case category
    }
}

struct Alert: Codable {
    let title, subtitle, body: String
}

struct ContentView: View {
    @State var notification: Notification?

    let testPayload = """
{
  "aps": {
    "alert" : {
         "title" : "Test Title",
         "subtitle" : "Sub Title",
         "body" : "Sample Body"
      },
    "sound": "Push.aiff",
    "badge": 1,
    "mutable-content": 1,
    "link_url": "https://google.com",
    "category": "NEWS_CATEGORY"
  }
}
"""
    var body: some View {
        VStack (spacing: 55) {
            Text(notification?.aps.alert.title ?? "no title")
            Text(notification?.aps.category ?? "no category")
        }
        .onAppear {
            if let data = testPayload.data(using: .utf8) {
                do {
                    notification = try JSONDecoder().decode(Notification.self, from: data)
                } catch {
                    print("----> error: \(error)")
                }
            }
        }
    }
}

精品教程推荐


加入我们一起学习SwiftUI

QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com

发表回复