微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Swift 中将 json 输入到我的 http 请求并出现错误,但在 jsonlint.com 中完全有效

如何解决在 Swift 中将 json 输入到我的 http 请求并出现错误,但在 jsonlint.com 中完全有效

所以我的目标是能够触发通知而不会出现 NSCocoaErrorDomain 错误。在此问题之前,我使用 http 请求中的此 json 数据向我的单个设备发送了通知

let paramString: [String : Any] = ["to" : token,"notification" : ["title" : title,"body" : body],"data" : ["user" : "test_id"]
    ]

这工作得很好,基本上相当于下图,但添加一个 notification 对象。

Firebase docs

现在我想加紧向订阅主题的人发送通知,所以我稍微修改代码和 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()
        
    
}

我在调试控制台中收到此错误

error

我希望它与 Firebase 文档中的代码片段基本相同:

json topics

所以我决定前往 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!!") } } idbody 上加了双引号,json 完全有效,但是当我在 Swift 中运行它时,它说它是无效的。我的 HTTP 请求中的 titleid,body, 都是字符串格式,我在上面发布的第一个 json 数据中使用了这 3 个变量中的两个,它工作得很好,所以我想不通找出控制台没有接收 JSON 的原因。如果有人能帮我解决这个问题,那就太棒了。谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?