我通过调用翻译 API 收到此错误消息“来自此 ios 客户端应用程序\u003cempty\u003e 的请求被阻止”,我已设置为 ios 应用程序和我在网络上的 bundle ID。请帮忙
let TRANSLATE_API = "https://translation.googleapis.com/language/translate/v2"
let GOOGLE_CLOUD_API_KEY = "<API_KEY>"
let urlParams:[String : Any] = [
"target": target,
"q": textToTranslate,
"key": GOOGLE_CLOUD_API_KEY,
"source": source]
let bundleIdentifier = Bundle.main.bundleIdentifier!
let headers:[String : String] = ["Content-Type": "application/json", "X-Ios-Bundle-Identifier": bundleIdentifier]
// Fetch Request
let urlString = TRANSLATE_API
// Fetch Request
Alamofire.request(urlString, parameters: urlParams)
.validate()
.responseJSON { (response) in
switch(response.result) {
case .success(_):
if response.result.error != nil {
completion(false, response.result.error! as! String)
}
if let json = response.result.value as? [String: Any] {
if let data = json["data"] as? [String: Any] {
if let translations = data["translations"] as? [[String:Any]] {
let translatedTextDict = translations[0]
if let result = translatedTextDict["translatedText"] as? String {
completion(true, result)
}
}
}
}
break
case .failure(_):
completion(false, (response.result.error?.localizedDescription)!)
break
}
}
最佳答案
我也遇到了同样的问题,经过调试,发现了问题所在,
如果您将 API key 添加到 URL,则该 key 有效,因此请将您的请求更改为:
let BASE_URL = URL(string: "https://translation.googleapis.com/language/translate/v2")!
Alamofire.request(BASE_URL, method: .post, parameters: params, encoding: URLEncoding.default, headers: nil)
我不知道为什么删除标题“内容类型”会影响它。
还有一个提示:永远不要公开共享您的 key ,也不要将其放在代码中,尤其是当您将其托管在公共(public)存储库上时。将其放入 gitignored 文件中并在应用程序启动时读取它,或设置环境变量。
如果您有后续问题,请告诉我。
关于ios - Google 翻译 api,来自此 ios 客户端应用程序的请求\u003cempty\u003e 被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47935277/