允许后,Googlelogin不会redirect到应用程序
我正在使用这个教程来实现用谷歌在应用程序login。
- 我通过cocoapods安装了GoogleSignIn。
pod 'GoogleSignIn', '~> 2.4.0'
- 里面增加了
GSignIn-Bridging-Header.h
和#import <GoogleSignIn/GoogleSignIn.h>
。 -
创buildurltypes:
-
用
GIDSignInButton
类创build一个视图 -
添加的代码:
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!) { } }
-
但是,当我点击允许
它将我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到第一个方法,那么它不会导航到我的应用程序了。
所以我想把我的情况发布给可能犯这个错误的人,花了我很长时间才发现