Ios google登录成功后未调用委托方法

Ios google登录成功后未调用委托方法,ios,objective-c,iphone,google-signin,Ios,Objective C,Iphone,Google Signin,我正在使用google sdk进行google登录,但在输入电子邮件和密码后 在viewDidLoad中,我添加了委托 //设置Google登录代理 [GIDSignIn sharedInstance].delegate = self; [GIDSignIn sharedInstance].uiDelegate = self; -(void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user wit

我正在使用google sdk进行google登录,但在输入电子邮件和密码后

在viewDidLoad中,我添加了委托

//设置Google登录代理

    [GIDSignIn sharedInstance].delegate = self;
    [GIDSignIn sharedInstance].uiDelegate = self;

-(void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error{
}
没有打电话。问题出在哪里

当我输入用户电子邮件和密码时,我得到了这个

调用此方法时,显示的错误为null

- (void)signInWillDispatch:(GIDSignIn *)signIn error:(NSError *)error {

}

AFAIK
GIDSignIn
类有两个委托属性:

  • 代表
  • ui委托

未为您调用的方法在
uiDeleagte
的协议中定义。

在AppDelegate.m文件中添加以下代码

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{



    return [[GIDSignIn sharedInstance] handleURL:url
                               sourceApplication:sourceApplication
                                      annotation:annotation];
    }

get调用的方法在登录后的
gidsignIneLegate
上调用,而未调用的方法在
gidsigneLegate
上调用。下面是GIDSignIn头文件的内容:

@protocol GIDSignInDelegate <NSObject>        
- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error;

@protocol GIDSignInUIDelegate <NSObject>
@optional
- (void)signInWillDispatch:(GIDSignIn *)signIn error:(NSError *)error;

我遇到了一个非常类似的问题,直到意识到GIDSignInDelegate在启动signin和获取回调之间被垃圾收集。只要在别处存储对它的引用就解决了我的问题。(大概谷歌使用的是弱引用)

我也有同样的问题。我试着像下面那样登录

//GDrive.swift
进口谷歌签名
导入GoogleapClientForrest
类GDrive:NSObject、GIDSignInDelegate、GIDSignInUIDelegate
func signIn(){
GIDSignIn.sharedInstance().uiDelegate=self
GIDSignIn.sharedInstance().delegate=self
GIDSignIn.sharedInstance().scopes=scopes
GIDSignIn.sharedInstance().signIn()
}
func符号(inWillDispatch signIn:GIDSignIn!,错误:error!){
打印(“发送”)
}
func符号(signIn:GIDSignIn!,当前视图控制器:UIViewController!)
{
打印(“当前视图控制器”)
}
func签名(signIn:GIDSignIn!,discouse viewController:UIViewController!)
{
打印(“关闭视图控制器”)
}
公共函数符号(signIn:GIDSignIn!、didsignin用户:GIDGoogleUser!、withError错误:error!)
{
打印(“登录”)
}
}
//ViewController.swift
类MainVC:UIViewController{
func signInGDrive(){
让gClient:GDrive=GDrive()//此行具有弱引用
gClient.signIn()
}
}
将gClient变量移动到文件顶部后,调用了委托函数。最终工作代码:

//ViewController.swift
类MainVC:UIViewController{
让gClient:GDrive=GDrive()
func signInGDrive(){
gClient.signIn()
}
}

谢谢@akroy

你得到什么了吗?@Sport:你解决了吗?我也有同样的问题…@Spot和Goodsquirrel,我也面临同样的问题,如果你已经解决了,请告诉我。
- (void)signInWillDispatch:(GIDSignIn *)signIn error:(NSError *)error {
    if (GIDSignIn.delegate != self) {NSLog("gotcha!")}
}