繁体   English   中英

如何使用适用于 iOS 的 Google Sign-in 从 iOS 客户端对 Google Cloud Endpoints 进行经过身份验证的调用?

[英]How do I make authenticated calls to Google Cloud Endpoints from an iOS client using Google Sign-in for iOS?

我已经在我的 iOS 应用中实现了这些说明:

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

我的 Google Cloud Endpoints API 中的这些:

https://cloud.google.com/appengine/docs/java/endpoints/consume_ios

除了当然我不会用GTMOAuth2ViewControllerTouch做一点。

两人不结婚。 iOS 应用程序中的端点服务需要在其上设置一个授权方,一个实现GTMFetcherAuthorizationProtocol的授权GTMFetcherAuthorizationProtocol 我在哪里可以从 Google 登录回调中获得此授权人?

AppDelegate 上的此回调传递了一个 GIDGoogleUser 实例,该实例具有一个 GIDAuthentication 实例,该实例具有一个 accessToken 字段(字符串)。 这就是我想传递给 App Engine 的内容:

func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) {
    log.debug("Access token: \(user.authentication.accessToken)")
    // TODO: What do I do with this now?
}

这是生成的服务需要令牌的地方。 就我而言,API 并没有很好地命名为“Api”,因此生成的源是 GTLServiceApi、GTLQueryApi 等。

private func executeQuery(query: GTLQueryApi, completionBlock: (object: AnyObject!, error: NSError!) -> Void) -> Void {
    let service = GTLServiceApi()
    service.retryEnabled = true

    // Whatever we set here should implement GTMFetcherAuthorizationProtocol. Where do we get one of those from the Google Sign-in SDK?
    // service.authorizer = TODO

    service.executeQuery(query, completionHandler: {(ticket, object, error) -> Void in
        completionBlock(object: object, error: error)
    })
}

(我已经跟踪这个问题几个月了,终于弄明白了......)

登录后,返回的GIDGoogleUser对象GIDGoogleUser授权方附加为: user.authentication.fetcherAuthorizer

这个对象可以用作端点服务的授权者,一切似乎都有效!

也就是说,如果您想让您的应用程序更紧密地遵循https://cloud.google.com/appengine/docs/java/endpoints/consume_ios 中列出的方法,您可以改用GTMAppAuth ,这似乎是更多在该示例中类似设计的 GTMOAuth2 方法替代品。

在 GIDSignIn 委托方法“didSignIn for”中添加

let authorizer = user.authentication.fetcherAuthorizer()
self.service.authorizer = authorizer

(斯威夫特 4)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM