iOS应用程序swift 3中的Google Translate rest api错误403

iOS应用程序swift 3中的Google Translate rest api错误403,ios,swift,swift3,google-cloud-platform,google-translate,Ios,Swift,Swift3,Google Cloud Platform,Google Translate,有人能帮我解决这个问题吗 我正在swift 3中开发一个应用程序,我正在尝试将google translate api集成到我的iOS应用程序中,但rest api出现以下错误: ["error": { code = 403; errors = ( { domain = global; message = "Requests from this ios client application <empty> are blocked."; reason = forbidden; } );

有人能帮我解决这个问题吗

我正在swift 3中开发一个应用程序,我正在尝试将google translate api集成到我的iOS应用程序中,但rest api出现以下错误:

["error": {
code = 403;
errors = (
{
domain = global;
message = "Requests from this ios client application <empty> are blocked.";
reason = forbidden;
}
);
message = "Requests from this ios client application <empty> are blocked.";
status = "PERMISSION_DENIED";
}]
[“错误”:{
代码=403;
错误=(
{
域=全局;
message=“来自此ios客户端应用程序的请求被阻止。”;
理由=禁止;
}
);
message=“来自此ios客户端应用程序的请求被阻止。”;
status=“权限被拒绝”;
}]
您是否遵循了: ?

正如他提到的,你必须正确激活你的帐户并注册,因为它似乎不再是一个免费的API了。

你是否遵循了: ?


正如他提到的,你必须正确激活你的帐户并注册,因为它似乎不再是一个免费的API了。

我认为这不是一个免费使用API的问题,我已经通过将“GET”方法API调用更改为“POST”方法解决了这个问题,你可以这样尝试-

open func translateTest(params: GoogleAITranslateParams, targetLanguage: String, callback:@escaping (_ translatedText:String) -> ()) {

    guard apiKey != "" else {
        return
    }

    var request = URLRequest(url: URL(string: "https://translation.googleapis.com/language/translate/v2?key=\(self.apiKey)")!)
    request.httpMethod = "POST"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue(Bundle.main.bundleIdentifier ?? "", forHTTPHeaderField: "X-Ios-Bundle-Identifier")

        let jsonRequest = [
            "q": params.text,
            "source": "en",
            "target": targetLanguage,
            "format": "text"
            ] as [String : Any]

        if let jsonData = try? JSONSerialization.data(withJSONObject: jsonRequest, options: .prettyPrinted) {
            request.httpBody = jsonData
            let task: URLSessionDataTask = URLSession.shared.dataTask(with: request) { (data, response, error) in
                guard error == nil else {
                    print("Something went wrong: \(String(describing: error?.localizedDescription))")
                    return
                }

                if let httpResponse = response as? HTTPURLResponse {

                    guard httpResponse.statusCode == 200 else {
                        if let data = data {
                            print("Response [\(httpResponse.statusCode)] - \(data)")
                        }
                        return
                    }

                    do {
                        if let data = data {
                            if let json = try JSONSerialization.jsonObject(with: data, options:JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary {
                                if let jsonData = json["data"] as? [String : Any] {
                                    if let translations = jsonData["translations"] as? [NSDictionary] {
                                        if let translation = translations.first as? [String : Any] {
                                            if let translatedText = translation["translatedText"] as? String {
                                                callback(translatedText)
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    } catch {
                        print("Serialization failed: \(error.localizedDescription)")
                    }
                }
            }

            task.resume()
        }
}

我认为这不是一个API免费使用的问题,我已经通过将“GET”方法API调用更改为“POST”方法解决了这个问题,您可以这样尝试-

open func translateTest(params: GoogleAITranslateParams, targetLanguage: String, callback:@escaping (_ translatedText:String) -> ()) {

    guard apiKey != "" else {
        return
    }

    var request = URLRequest(url: URL(string: "https://translation.googleapis.com/language/translate/v2?key=\(self.apiKey)")!)
    request.httpMethod = "POST"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue(Bundle.main.bundleIdentifier ?? "", forHTTPHeaderField: "X-Ios-Bundle-Identifier")

        let jsonRequest = [
            "q": params.text,
            "source": "en",
            "target": targetLanguage,
            "format": "text"
            ] as [String : Any]

        if let jsonData = try? JSONSerialization.data(withJSONObject: jsonRequest, options: .prettyPrinted) {
            request.httpBody = jsonData
            let task: URLSessionDataTask = URLSession.shared.dataTask(with: request) { (data, response, error) in
                guard error == nil else {
                    print("Something went wrong: \(String(describing: error?.localizedDescription))")
                    return
                }

                if let httpResponse = response as? HTTPURLResponse {

                    guard httpResponse.statusCode == 200 else {
                        if let data = data {
                            print("Response [\(httpResponse.statusCode)] - \(data)")
                        }
                        return
                    }

                    do {
                        if let data = data {
                            if let json = try JSONSerialization.jsonObject(with: data, options:JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary {
                                if let jsonData = json["data"] as? [String : Any] {
                                    if let translations = jsonData["translations"] as? [NSDictionary] {
                                        if let translation = translations.first as? [String : Any] {
                                            if let translatedText = translation["translatedText"] as? String {
                                                callback(translatedText)
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    } catch {
                        print("Serialization failed: \(error.localizedDescription)")
                    }
                }
            }

            task.resume()
        }
}

缺少此行是被阻止的主要原因,因为我API密钥限制到我的iOS包标识符

request.addValue(Bundle.main.bundleIdentifier ?? "", forHTTPHeaderField: "X-Ios-Bundle-Identifier")

缺少此行是被阻止的主要原因,因为我API密钥限制到我的iOS包标识符

request.addValue(Bundle.main.bundleIdentifier ?? "", forHTTPHeaderField: "X-Ios-Bundle-Identifier")

我已妥善安排了这个项目。在cloud developer控制台上启用api。启用计费并支付翻译api的费用。但还是会出错。这个错误在android设备上也很常见。我已经正确地设置了这个项目。在cloud developer控制台上启用api。启用计费并支付翻译api的费用。但还是会出错。这个错误在android设备上也很常见。