ios9中的google登录问题

时间:2015-11-24 13:07:41

标签: ios9 xcode7 google-signin

我正在使用应用程序中具有谷歌登录功能的项目。 该应用程序适用于iOS9及以上版本的所有iOS。

下面是我用于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中此方法未被调用。在webview中打开google登录视图,点击“允许”后,webview将被解除。 我无法在ios9中获取google的authcode。是否有任何方法可以在ios9及以上版本中调用此方法

- (void)signIn:(GIDSignIn *)signIn
didSignInForUser:(GIDGoogleUser *)user
     withError:(NSError *)error
{

}

2 个答案:

答案 0 :(得分:6)

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

但是对于iOS9,只要按下允许就会打开Goog​​le.com页面。如果我按此页面上的完成按钮,控制将进入上述方法,错误=错误域= com.google.GIDSignIn代码= -5“用户取消了登录流程。” UserInfo = {NSLocalizedDescription =用户取消了登录流程。}

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

  1. 白名单登录相关网址 - Google Sign-In crashes on iOS 9 attempting to call canOpenURL

  2. 使用handleurl调用 - GIDSignIn iOS 9

  3. 没有时间去测试最合适的选项。一旦最终解决方案在这里,将立即更新。

    更新:做到了!!

    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];
    }
    

答案 1 :(得分:1)

这对我有用。我遇到了GIDGoogleUser的对象正在变为零。错误是“用户取消了登录流程”。正确的类型转换为此用作!。这个 点击“完成”后删除了悬挂的野生动物园。

在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

    }