如何使用 Google 登录 iOS 从 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 云端点 API:
https://cloud.google.com/appengine/docs/java/endpoints/consume_ios
除了我当然不使用 GTMOAuth2ViewControllerTouch
。
两人不结婚了。 iOS 应用程序中的端点服务需要在其上设置一个授权方,一个实现 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
对象附有授权方:
user.authentication.fetcherAuthorizer
此对象可用作端点服务的授权方,一切似乎都正常!
就是说,如果您想让您的应用更严格地遵循 https://cloud.google.com/appengine/docs/java/endpoints/consume_ios, you might instead use GTMAppAuth 中列出的方法,这似乎是该示例中设计更相似的 GTMOAuth2 方法的替代方法。
在 GIDSignIn 委托方法中 "didSignIn for" 只需添加
let authorizer = user.authentication.fetcherAuthorizer()
self.service.authorizer = authorizer
(Swift 4)
我已经在我的 iOS 应用程序中实施了这些说明:
https://developers.google.com/identity/sign-in/ios/sign-in
这些在我的 Google 云端点 API:
https://cloud.google.com/appengine/docs/java/endpoints/consume_ios
除了我当然不使用 GTMOAuth2ViewControllerTouch
。
两人不结婚了。 iOS 应用程序中的端点服务需要在其上设置一个授权方,一个实现 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
对象附有授权方:
user.authentication.fetcherAuthorizer
此对象可用作端点服务的授权方,一切似乎都正常!
就是说,如果您想让您的应用更严格地遵循 https://cloud.google.com/appengine/docs/java/endpoints/consume_ios, you might instead use GTMAppAuth 中列出的方法,这似乎是该示例中设计更相似的 GTMOAuth2 方法的替代方法。
在 GIDSignIn 委托方法中 "didSignIn for" 只需添加
let authorizer = user.authentication.fetcherAuthorizer()
self.service.authorizer = authorizer
(Swift 4)