[英]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.