请求与邮递员正常工作,但在使用 iOS 请求时因协议错误而失败
Request working properly with postman but fails with protocol error when requesting with iOS
我正在尝试 运行 这个请求,我这样做的原因是我想从这里测试推送通知(我的意思是很多) 在循环中使用不同的字符串。
当我尝试使用 Postman 时,它工作得很好我的意思是我已经尝试发送 300 个请求并且它们工作正常但是请求在我这样做时给出了错误它与 URLSession.
我在控制台上得到的错误是-
error is there in data task
The operation couldn’t be completed. Protocol error
2018-01-10 08:48:47.735403+0530 Universal Time Table[18533:1210462] TIC Read Status [4:0x0]: 1:57
2018-01-10 08:48:47.735555+0530 Universal Time Table[18533:1210462] TIC Read Status [4:0x0]: 1:57
我发送请求的代码是 -
func testNotifications(times: Int, completionHandler: @escaping (String) -> Void) {
print("test notifications called")
let url = "https://fcm.googleapis.com/fcm/send"
var urlRequest = URLRequest(url: URL(string: url)!)
urlRequest.httpMethod = "POST"
let session = URLSession(configuration: .ephemeral)
urlRequest.setValue("Content-Type", forHTTPHeaderField: "application/json")
urlRequest.setValue("Authorization", forHTTPHeaderField: "Key=my_API_KEY")
do{
let jsonData = try JSONSerialization.data(withJSONObject: notificationJson, options: .prettyPrinted)
urlRequest.httpBody = jsonData
} catch let err as Error{
print("error is", err.localizedDescription)
}
session.dataTask(with: urlRequest) { (data, response, error) in
if error != nil{
print("error is there in data task\n", error?.localizedDescription ?? "Error Hard Coded String")
return
}
print("response is", response)
print("Shoud be a success")
DispatchQueue.global(qos: .userInitiated).async {
DispatchQueue.main.async {
completionHandler("responseString")
print("success")
}
}
}.resume()
}
let notificationJson = [
"notification":[
"body" : "This week's edition is now available.",
"title" : "NewsMagazine.com",
],
"data" : [
"volume" : "3.21.15",
"contents" : "http://www.news-magazine.com/world-week/21659772"
],
"android":[
"priority":"normal"
],
"apns":[
"headers":[
"apns-priority":"5",
"apns-collapse-id": "ON"
]
],
"webpush": [
"headers": [
"Urgency": "high"
]
]
,
"to" : "device_token"
] as [String : Any]
您的headers不正确。你应该像这样交换 key-value 对:
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.setValue("Key=my_API_KEY", forHTTPHeaderField: "Authorization")
我正在尝试 运行 这个请求,我这样做的原因是我想从这里测试推送通知(我的意思是很多) 在循环中使用不同的字符串。
当我尝试使用 Postman 时,它工作得很好我的意思是我已经尝试发送 300 个请求并且它们工作正常但是请求在我这样做时给出了错误它与 URLSession.
我在控制台上得到的错误是-
error is there in data task
The operation couldn’t be completed. Protocol error
2018-01-10 08:48:47.735403+0530 Universal Time Table[18533:1210462] TIC Read Status [4:0x0]: 1:57
2018-01-10 08:48:47.735555+0530 Universal Time Table[18533:1210462] TIC Read Status [4:0x0]: 1:57
我发送请求的代码是 -
func testNotifications(times: Int, completionHandler: @escaping (String) -> Void) {
print("test notifications called")
let url = "https://fcm.googleapis.com/fcm/send"
var urlRequest = URLRequest(url: URL(string: url)!)
urlRequest.httpMethod = "POST"
let session = URLSession(configuration: .ephemeral)
urlRequest.setValue("Content-Type", forHTTPHeaderField: "application/json")
urlRequest.setValue("Authorization", forHTTPHeaderField: "Key=my_API_KEY")
do{
let jsonData = try JSONSerialization.data(withJSONObject: notificationJson, options: .prettyPrinted)
urlRequest.httpBody = jsonData
} catch let err as Error{
print("error is", err.localizedDescription)
}
session.dataTask(with: urlRequest) { (data, response, error) in
if error != nil{
print("error is there in data task\n", error?.localizedDescription ?? "Error Hard Coded String")
return
}
print("response is", response)
print("Shoud be a success")
DispatchQueue.global(qos: .userInitiated).async {
DispatchQueue.main.async {
completionHandler("responseString")
print("success")
}
}
}.resume()
}
let notificationJson = [
"notification":[
"body" : "This week's edition is now available.",
"title" : "NewsMagazine.com",
],
"data" : [
"volume" : "3.21.15",
"contents" : "http://www.news-magazine.com/world-week/21659772"
],
"android":[
"priority":"normal"
],
"apns":[
"headers":[
"apns-priority":"5",
"apns-collapse-id": "ON"
]
],
"webpush": [
"headers": [
"Urgency": "high"
]
]
,
"to" : "device_token"
] as [String : Any]
您的headers不正确。你应该像这样交换 key-value 对:
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.setValue("Key=my_API_KEY", forHTTPHeaderField: "Authorization")