iOS:通过url请求向firebase服务发送推送通知
我正在构建一个测试应用程序来发送推送通知。以下是我的代码:iOS:通过url请求向firebase服务发送推送通知,ios,swift,firebase-notifications,Ios,Swift,Firebase Notifications,我正在构建一个测试应用程序来发送推送通知。以下是我的代码: static func sendRequestPush(){ let json: [String: Any] = ["to": "key", "priority": "high", "notification": ["body":"Hello1", "title":"Hello wo
static func sendRequestPush(){
let json: [String: Any] = ["to": "key",
"priority": "high",
"notification": ["body":"Hello1", "title":"Hello world","sound":"default"]]
let urlStr:String = "https://fcm.googleapis.com/fcm/send"
let url = URL(string:urlStr)
let jsonData = try? JSONSerialization.data(withJSONObject: json)
var request = URLRequest(url: url!)
request.httpMethod = "POST"
request.httpBody = jsonData
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
print(error?.localizedDescription ?? "No data")
return
}
let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
if let responseJSON = responseJSON as? [String: Any] {
print(responseJSON)
}
}
task.resume()
}
问题是我没有收到googleapis的任何回复,也没有收到推送通知。我从仪表板获得推送通知,但不是从代码中
你们谁知道我做错了什么
我将非常感谢您的帮助。试试下面的代码,它的效果很好:) “putYourLegacyServerKeyHere”根据您可以在FCM控制台中获得的密钥更改此设置
“putYourFCMToken”使用您在DidReceiverRegistrationToken(fcm代表)中获得的fcm令牌更改此设置。查看@user2924482您尝试了我的答案吗?@R Mohan,我尝试了您的解决方案,但我得到了
RL:https://fcm.googleapis.com/fcm/send }{状态代码:401,标题{ <代码> >我使用从代理“代码> > PutufFCMToe/<代码>和从破折号板获得的<代码>遗留服务器密钥<代码>。您知道我为什么得到<代码> 401代码/代码> @ USER 242448吗?状态代码401是身份验证错误。如果您没有在请求中添加内容类型,它将到来或如果您缺少任何PAR。ameters将提供401的优先级或通知密钥。请检查您输入的参数是否正确。是否有任何方法可以直接使用firebase sdk而不是使用post url实现相同的功能?
func sendRequestPush() {
// create the request
let url = URL(string: "https://fcm.googleapis.com/fcm/send")
let request = NSMutableURLRequest(url: url!)
request.httpMethod = "POST"
request.setValue("key=putYourLegacyServerKeyHere", forHTTPHeaderField: "authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let parameters = ["to": "putYourFCMToken",
"priority": "high",
"notification": ["body":"Hello1", "title":"Hello world","sound":"default"]] as [String : Any]
do {
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) // pass dictionary to nsdata object and set it as request body
} catch let error {
print(error.localizedDescription)
}
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let dataTask = session.dataTask(with: request as URLRequest) { data,response,error in
let httpResponse = response as? HTTPURLResponse
if (error != nil) {
print(error!)
} else {
print(httpResponse!)
}
guard let responseData = data else {
print("Error: did not receive data")
return
}
do {
guard let responseDictionary = try JSONSerialization.jsonObject(with: responseData, options: [])
as? [String: Any] else {
print("error trying to convert data to JSON")
return
}
print("The responseDictionary is: " + responseDictionary.description)
} catch {
print("error trying to convert data to JSON")
return
}
DispatchQueue.main.async {
//Update your UI here
}
}
dataTask.resume()
}