如何解决在 Swift 中将 json 输入到我的 http 请求并出现错误,但在 jsonlint.com 中完全有效
所以我的目标是能够触发通知而不会出现 NSCocoaErrorDomain
错误。在此问题之前,我使用 http 请求中的此 json 数据向我的单个设备发送了通知:
let paramString: [String : Any] = ["to" : token,"notification" : ["title" : title,"body" : body],"data" : ["user" : "test_id"]
]
这工作得很好,基本上相当于下图,但添加了一个 notification
对象。
现在我想加紧向订阅主题的人发送通知,所以我稍微修改了代码和 url,但是当我按下按钮并且代码运行时,我得到了一个 {{ 1}} 表示我的 json 格式无效。
新编辑所以这是我使用的函数和我在 http 请求中的 json:
NSCocoaErrorDomain Code = 3840
所以回想起来,我不得不修改上面的函数并稍微改变参数,但是现在当函数被调用时......
func sendNotificationToUser(to topic: String,title: String,body: String) {
let urlString = "https://fcm.googleapis.com/v1/projects/myprojectnamehere-41f12/messages:send HTTP/1.1"
guard let encodedURLString = urlString.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed) else { return }
let url = URL(string: encodedURLString)!
let paramString: [String: Any] = [
"message": [
"topic" : topic,"notification" : [
"title": title,"body": body
]
]
]
let request = NSMutableuRLRequest(url: url as URL)
request.httpMethod = "POST"
request.httpBody = try? JSONSerialization.data(withJSONObject: paramString,options: [.prettyPrinted])
request.setValue("application/json",forHTTPHeaderField: "Content-Type")
request.setValue("Bearer ya29.\(self.bearer)",forHTTPHeaderField: "Authorization")
let task = URLSession.shared.dataTask(with: request as URLRequest) { (data,response,error) in
do {
if let jsonData = data {
if let jsonDataDictionary = try JSONSerialization.jsonObject(with: jsonData,options: JSONSerialization.ReadingOptions.allowFragments) as? [String: AnyObject] {
NSLog("Received data:\n\(jsonDataDictionary))")
}
}
} catch let err as NSError {
print(err)
}
}
task.resume()
}
我在调试控制台中收到此错误:
我希望它与 Firebase 文档中的代码片段基本相同:
所以我决定前往 jsonlint.com 并验证它。我用大括号替换了方括号,在 getTheSchoolID { (id) in
if let id = id {
self.sendNotificationToUser(to: id,title: "New Event Added!",body: "A new event has been added to the dashboard!!")
}
}
、id
和 body
上加了双引号,json 完全有效,但是当我在 Swift 中运行它时,它说它是无效的。我的 HTTP 请求中的 title
和 id,body,
都是字符串格式,我在上面发布的第一个 json 数据中使用了这 3 个变量中的两个,它工作得很好,所以我想不通找出控制台没有接收 JSON 的原因。如果有人能帮我解决这个问题,那就太棒了。谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。