我已经在我的iOS应用中实现这些指令:如何使用iOS版Google帐户通过iOS客户端向Google Cloud Endpoints进行身份验证呼叫?
https://developers.google.com/identity/sign-in/ios/sign-in
而这些的人在我的谷歌云端点API:
https://cloud.google.com/appengine/docs/java/endpoints/consume_ios
除了我当然不这样做该位与GTMOAuth2ViewControllerTouch
。
两人不结婚。 iOS应用程序中的端点服务需要在其上设置授权程序,其中一个实现GTMFetcherAuthorizationProtocol
。我在哪里可以从Google Sign-in回调中获得授权人?
AppDelegate的此回调传递一个GIDGoogleUser实例,该实例具有一个GIDAuthentication实例,该实例具有accessToken字段(String)。这就是我想要传递给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)
})
}
我认为分享更多代码在这里会有所帮助 – Nick
登录代码与上面链接的文档中的内容没有什么不同,但我添加了我的Cloud Endpoints客户端代码。 – Eliot
似乎Endpoints客户端库有其自己的身份验证方法,这在[docs](https://cloud.google.com/appengine/docs/java/endpoints/consume_ios?hl=en)中进行了描述,并且这可能会或可能不会与Identity Toolkit登录流程重叠。我不确定是否有可能,但这需要一些研究来确定。可能您可以使用从登录流程中获得的凭据(可能是身份验证令牌)手动实例化API服务对象? – Nick