ios - Google SDK iOS - sign() 方法完成处理程序

标签 ios swift google-signin

在 iOS Google SDK 中,当登录过程成功时,我找不到相关的方法来处理事件。

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { }

此方法没有将完成处理程序作为参数,是否有任何其他 API 方法可以处理 SignIn 过程完成?

我在文档里没找到任何东西,而且谷歌的官方教程也很零散。

为什么我需要这个? 我创建了单独的 GoogleManager 类来处理 google 登录过程,我想从我的 VC 传递完成处理程序以在完成时执行 segue。应该如何处理?

最佳答案

为您的自定义 GoogleManager 创建一个委托(delegate),并在 GoogleManager 中创建该委托(delegate)的实例,并在您创建自定义类实例的类上实现该委托(delegate) GoogleManager,之后当调用 GIDSignInDelegate 方法时使用您的自定义委托(delegate)并调用其方法。所以它应该看起来像这样。

protocol GoogleManagerDelegate {
     func receiveResponse(user: GIDGoogleUser)// Pass Parameter that you want
}

现在在 GoogleManager 类中,当您在 GIDSignInDelegate 方法中获得响应时,您需要调用 GoogleManagerDelegate 方法。

class GoogleManager {
     var delegate: GoogleManagerDelegate?

     //Your other method     

     func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { 
         self.delegate?.receiveResponse(user: user)
     }
}

现在在您的 Controller 中实现 GoogleManagerDelegate,您在其中创建 GoogleManager 实例并将其委托(delegate)实例设置为自身。

class ViewController: UIViewController, GoogleManagerDelegate {

    //Your other methods     

    func googleSignIn() {
        let googleManager = GoogleManager()
        googleManager.delegate = self
    }

    //GoogleManagerDelegate method
    func receiveResponse(user: GIDGoogleUser) {
        //Access user object here
    }
}

关于ios - Google SDK iOS - sign() 方法完成处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41378116/

相关文章:

android - 如何在 Google 登录后禁用转换?

java - Stormpath 无法检索用于谷歌登录的帐户对象

ios - 如何在更改 uiview 的隐藏模式时添加动画?

Android Firebase 身份验证 : federated Google login not working in Oreo

ios - Swift - 管理任务以填充 UITableView

ios - 有什么方法可以快速从 AppDelegate 调用 gui 元素吗?

ios - 在 Swift 3 中扩展单元格

swift - 并发队列上的 `.barrier` 是否应该立即变为事件状态?

ios - 如何从我的应用程序注销并转到初始登录 View ?

ios - 子类可以使用父类(super class)Ios的委托(delegate)方法吗