Google 登录不适用于 iOS 10

Google SignIn not working for iOS 10

我已经在我的项目中集成了 GoogleSinIn APISwift 4.0。它在 iOS 11.0 上工作,但当我在 iOS 10.0 上测试相同时,它会在 Safari 浏览器或设备上打开 Google 登录页面,并在成功签名后正在打开 Google 搜索页面。

  1. 当我单击下面显示的 GoogleSignIn 按钮时,它会打开下图所示的浏览器。

  2. 然后我填写凭证

  3. 登录成功后,跳转到Google页面而不是申请页面

我在 AppDelegate 中使用了错误的处理程序。

之前我用的是:

private func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool

但应该是:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool

检查你的GIDSignInUIDelegate,别忘了

func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!) {
    self.present(viewController, animated: true, completion: nil)
}

func sign(_ signIn: GIDSignIn!, dismiss viewController: UIViewController!) {
    self.dismiss(animated: true, completion: nil)
}

您必须在 AppDelegate 中实现此委托功能。

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
     return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}

Google 文档糟透了!我正在使用 iOS 10 并且文档说只有在使用 iOS 8.0 或更早版本时才添加我编写的第二种方法。不知道为什么。我成功添加了这两种方法:

// [START openurl]
func application(_ application: UIApplication,
open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
  return GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation)
}
// [END openurl]
@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
return GIDSignIn.sharedInstance().handle(url,
  sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
  annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}
- (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url
        options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {


    BOOL handleGoogleSignIn = [[GIDSignIn sharedInstance] handleURL:url
                                              sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                                                         annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
    if (handleGoogleSignIn) {
        return handleGoogleSignIn;
    }
}

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

    BOOL handleGoogleSignIn = [[GIDSignIn sharedInstance] handleURL:url
                           sourceApplication:sourceApplication
                                  annotation:annotation];
    if (handleGoogleSignIn) {
        return handleGoogleSignIn;
    }
}

如果您使用 sourceApplication ,则需要同时编写 GoogleSignIn return。