【问题标题】:How to implement Vision API with 'Service account' in the iOS app?如何在 iOS 应用程序中使用“服务帐户”实现 Vision API?
【发布时间】:2018-12-26 11:34:44
【问题描述】:

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

是否有任何示例或建议如何做到这一点?

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

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

【问题讨论】:

  • 我需要看看 Vision API...我会用一些示例代码为您编写一个类...

标签: ios objective-c iphone swift google-cloud-vision


【解决方案1】:

这是我自己想出来的。 文档: https://developers.google.com/identity/protocols/OAuth2ServiceAccount#jwt-auth

1)您需要创建服务帐户,下载p12或JSON文件。 JSON 文件包含私钥和公共证书 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 请求

希望以后能对大家有所帮助

【讨论】:

    【解决方案2】:

    首先你需要得到一个Bearer Token...你可以按照这个页面上的说明来获取它...

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

    Bearer Token 不会过期,你可以在你的代码中实现它...

    关于如何在 Swift 中向您的请求添加不记名令牌的基本版本如下所示...所有其他东西都以数据格式的 JSON 格式发送到“body”参数

    此链接将向您展示如何为您对 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

    【讨论】:

    • 我做过类似的事情,但在 3-4 小时后令牌过期,我从视觉 API 收到 401 错误
    • 谷歌说,如果你创建一个新的令牌,旧的令牌将在 24 小时后过期......这是他们网站上唯一我看到令牌可能过期的部分......我正在工作在许多使用 Google API 令牌的项目上,如地图和 Android 应用程序,并且它们的令牌在任何项目上都没有过期......是否可能会意外刷新令牌?
    • developers.google.com/identity/protocols/… 根据文档服务帐户令牌的生命周期只有 1 小时
    • 嗯,是的,我以前从未见过这种可能性......我总是使用他们的 OAu 令牌......那么你需要在令牌过期后重新授权......我会看看如果我看看 Swift 的做法,或者我会给你写一个并更新我的答案......
    猜你喜欢
    • 2017-06-29
    • 2021-01-17
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2019-11-09
    • 2018-06-27
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多