Bha*_*ain 2 delegates ios swift google-signin
这是我为Google登录创建的包装器类。
class GoogleLoginWrapper:NSObject, GIDSignInDelegate {
weak var presentingController:UIViewController!
init(presentingController:UIViewController) {
super.init()
self.presentingController = presentingController
var configureError:NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
GIDSignIn.sharedInstance().delegate = self
}
// Google Delegate Methods
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
}
func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {
}
}
Run Code Online (Sandbox Code Playgroud)
我从视图控制器类中调用该类,如下所示:
class ViewController: UIViewController,GIDSignInUIDelegate{
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let googleWrapper = GoogleLoginWrapper(presentingController: self)
}
//IBAction method to call google login.
}
Run Code Online (Sandbox Code Playgroud)
这将在safari上打开google身份验证,但问题是GoogleLoginWrapper类中从未调用委托方法。但是,如果我将在GoogleLoginWrapper中定义的相同代码放到Appdelegate中,它将起作用。为什么会这样呢?
您的方法实例GoogleLoginWrapper在viewDidLoad方法末尾超出范围,因此将立即释放。您无法sign...使用您发布的代码调用该函数。
您应该使用属性而不是局部变量来保留对GoogleLoginWrapper实例的引用。
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |