允许后,Googlelogin不会redirect到应用程序

我正在使用这个教程来实现用谷歌在应用程序login。

  1. 我通过cocoapods安装了GoogleSignIn。 pod 'GoogleSignIn', '~> 2.4.0'
  2. 里面增加了GSignIn-Bridging-Header.h#import <GoogleSignIn/GoogleSignIn.h>
  3. 创buildurltypes: 在这里输入图像说明

  4. GIDSignInButton类创build一个视图

  5. 添加的代码:

     class ViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate { override func viewDidLoad() { super.viewDidLoad() GIDSignIn.sharedInstance().delegate = self GIDSignIn.sharedInstance().uiDelegate = self GIDSignIn.sharedInstance().clientID = "KEY" } func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) { if let err = error { print(error) } else { print(GIDSignIn.sharedInstance().currentUser.profile.name) print(GIDSignIn.sharedInstance().currentUser.profile.email) self.performSegueWithIdentifier("idSegueContent", sender: self) } } func signIn(signIn: GIDSignIn!, didDisconnectWithUser user: GIDGoogleUser!, withError error: NSError!) { } } 
  6. 但是,当我点击允许

在这里输入图像说明

它将我redirect到google.com,而不是应用程序。

在AppDelegate中,您需要添加执行

 func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) } 

Google通过URL发回信息,上面的方法捕获这些信息并发送回应用程序。

经过一天的工作,我终于解决了这个问题。 @伊曼·易卜拉欣基本上是对的,但我认为答案有点宽泛。 Swift / Objective-C和Google SDK的不同版本在AppDelegate中调用canOpenURL方法的不同版本。 我对此并不是100%确定的,并希望得到确认或更正。 这是为我工作的那个方法的版本。 我正在使用Google的SDK v。4.0,针对iOS 9.1,并使用Swift 3.0:

 func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { let checkFB = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation) let checkGoogle = GIDSignIn.sharedInstance().handle(url as URL!,sourceApplication: sourceApplication,annotation: annotation) return checkGoogle || checkFB } 

我也使用FBSDK,所以忽略这一行。

我确实find了另一个答案。 在我的情况下,在AppDelegate中,我实现了2个委托方法

 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options 

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

第一个是委托方法,不应该实现,它被replace为第二个方法。 但不知何故,我仍然使用,只是添加

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

在第二个,然后不知何故,它只是callback到第一个方法,那么它不会导航到我的应用程序了。

所以我想把我的情况发布给可能犯这个错误的人,花了我很长时间才发现