Вызов облачной функции из Swift с данными JSON - PullRequest
0 голосов
/ 07 июня 2019

У меня есть облачная функция, размещенная на Firebase, которую я пытаюсь вызвать из приложения Swift.Он работает нормально, когда я вызываю его из командной строки с помощью следующего сценария, однако существует некоторая проблема с анализом данных JSON, когда я вызываю его из swift.

Командная строка (работает отлично)

time curl -v -X POST -d '{"url":"https://cdn.bmstores.co.uk/images/hpcProductImage/imgFull/303441-Volvic-6x500ml-Naural-Mineral-Water1.jpg"}' -H "Content-type: application/json" https://us-central1-themagicfactory-5cf7a.cloudfunctions.net/fastMatches

Swift Code (не работает)

functions.httpsCallable("fastMatches").call("{\"url\":\"https://cdn.bmstores.co.uk/images/hpcProductImage/imgFull/303441-Volvic-6x500ml-Naural-Mineral-Water1.jpg\"}", completion: {(result,error) in
    if let error = error{
        print("An error occurred while calling the test function: \(error)" )
    }
    print("Results from test cloud function: \(result)")
})

Python Pseudo (облачная функция)

def fastMatches(request):
    print(request)
    req = urllib.request.urlopen(request.json["url"])

Запрос на странность при вызове из Swift

enter image description here

РЕДАКТИРОВАТЬ: Я получаю такой же странныйрезультаты, даже если я вызываю его из запроса HTTP-запроса вручную.

let json: [String: String] = ["url": "https://cdn.bmstores.co.uk/images/hpcProductImage/imgFull/303441-Volvic-6x500ml-Naural-Mineral-Water1.jpg"]

let jsonData = try? JSONSerialization.data(withJSONObject: json)

// create post request
let url = URL(string: "https://us-central1-themagicfactory-5cf7a.cloudfunctions.net/fastMatches")!
var request = URLRequest(url: url)
request.httpMethod = "POST"

// insert json data to the request
request.httpBody = jsonData

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    print(data,response,error)
    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()
...