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()
}