google ios9 中的登录问题

google signin issue in ios9

我在项目中工作,该项目在应用程序中具有 google 登录功能。 该应用程序在所有 iOS 中运行良好,除了 iOS9 及更高版本。

下面是我用于 google 登录的代码:-

-(void)methodcallwhenclick_ongoogleSigninbutton{
      GIDSignIn *signInInstance = [GIDSignIn sharedInstance];
        signInInstance.delegate = self;
        GIDSignIn *signIn = [GIDSignIn sharedInstance];
        [signIn signOut];
        signIn.shouldFetchBasicProfile = YES;
        signIn.delegate = self;
        signIn.uiDelegate = self;
        [signIn setClientID:@"<Clientkey>.apps.googleusercontent.com"];
        [signIn setScopes:[NSArray arrayWithObject:@"https://www.googleapis.com/auth/plus.login"]];
        [signIn setDelegate: self];
        [signIn signIn];
}

此方法在我成功登录到应用程序时调用,但在 ios9 中此方法未在 Web 视图中打开 called.The google 登录视图,在我单击 "ALLOW" 网络视图被解雇。 我无法在 ios9.Is 中获得 google 的授权码 有任何方法可以在 ios9 和更高版本

中调用此方法
- (void)signIn:(GIDSignIn *)signIn
didSignInForUser:(GIDGoogleUser *)user
     withError:(NSError *)error
{

}

我遇到了同样的问题:google 通过 GIDSignIn 登录非常适合

但对于 iOS9,Google.com 页面会在按下允许后打开。如果我在此页面上按“完成”按钮,控件将进入上述方法,错误 = Error Domain=com.google.GIDSignIn Code=-5 "The user canceled the sign-in flow." UserInfo={NSLocalizedDescription=The user cancelled the sign-in flow.}

我研究了一下。找到两个可能的解决方案:

  1. 白名单登录相关网址-

  2. 使用handleurl调用-

没时间测试哪个最适合。最终解决方案一出就会更新。

更新:做到了!!

iOS9 已更新 handleUrl() 调用。精简了两种做法如下:

(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options NS_AVAILABLE_IOS(9_0)
{
    return [self application:app
        processOpenURLAction:url
          sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                  annotation:options[UIApplicationOpenURLOptionsAnnotationKey]
                  iosVersion:9];
}


(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [self application:application
        processOpenURLAction:url
          sourceApplication:sourceApplication
                  annotation:annotation
                  iosVersion:8];
}

(BOOL)application:(UIApplication *)application processOpenURLAction:(NSURL*)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation iosVersion:(int)version
{
    return [[GIDSignIn sharedInstance] handleURL:url
                               sourceApplication:sourceApplication
                                      annotation:annotation];
}

这对我有用。我正在经历 GIDGoogleUser 的对象变为零。错误是 'The user canceled the sign-in flow'。正确的类型转换是使用 as!。这个 删除了点击 'Done'.

后挂起的 safari

在 AppDelegate 上:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

        let result = GIDSignIn.sharedInstance().handle(url,
                //added exclamation mark
                sourceApplication: String(describing: options[UIApplicationOpenURLOptionsKey.sourceApplication]!),
                annotation: options[UIApplicationOpenURLOptionsKey.annotation])

        return result

    }