如何在 iOS 应用中使用 'Service account' 实现 Vision API?

How to implement Vision API with 'Service account' in the iOS app?

我正在尝试通过 REST 为我的应用程序实现 Google 愿景 API。 https://cloud.google.com/vision/docs/pdf

是否有任何示例或建议如何执行此操作?

文档说他们需要服务帐户令牌,但找不到任何示例如何从 iOS 应用端获取服务帐户令牌。 我已经尝试通过 GTMAppAuth 但出现 403 错误

我能够从我的 mac machine 生成此令牌并且一切正常,但令牌的生命周期有限,3-4 小时后它会过期

首先您需要获得一个Bearer Token...您可以按照本页的说明进行操作...

https://cloud.google.com/vision/docs/auth#using_an_api_key

Bearer Token 不会过期,您可以将其实现到您的代码中...

关于如何在 Swift 中向您的请求添加 Bearer Token 的基本版本如下所示...所有其他内容作为 JSON 数据格式添加到 "body"参数

此 Link 将向您展示如何为您对 Vision 的请求构建 JSON... https://cloud.google.com/vision/docs/using-curl

class APIHandler {

    private let API_TOKEN = "Your Token"

    func requestVisionFromREST(body: Data, completion: @escaping (_ response: Data?)-> Void)  {
        let config = URLSessionConfiguration.default

        var headers = [String:String]()
        headers["Authorization"] = "Bearer \(API_TOKEN)"
        config.httpAdditionalHeaders = headers

        var urlRequest = URLRequest(url: URL(string: "YOUR URL")!)
        urlRequest.httpMethod = "POST"
        urlRequest.httpBody = body

        URLSession(configuration: config).dataTask(with: urlRequest) { (data, response, error) in
            completion(data)
        }.resume()
    }

}

编辑

如果您想使用 Google 登录而不是 OAuth 方法来重新验证您的应用并获取新的令牌,您可以按照以下 google 说明页面上的说明进行操作:

https://developers.google.com/identity/sign-in/ios/offline-access

我自己想出来并做到了。 文档: https://developers.google.com/identity/protocols/OAuth2ServiceAccount#jwt-auth

1)您需要创建服务账号,下载p12或JSON文件。 JSON 文件包含私钥和 public 证书 url。您需要创建文本文件,私钥在顶部,证书在底部,运行 这个命令: openssl pkcs12 -export -in file_name.txt -out file_name.p12

2)使用文档中描述的参数创建 jwt 令牌(对于 jwt,我使用了这个库:https://github.com/yourkarma/JWT

3) 使用文档

中描述的参数向 https://www.googleapis.com/oauth2/v4/token 发出 POST 请求

希望对以后的人有所帮助