2016-02-13 117 views
6

我实现了谷歌登录,一切工作在iOS 8但当我呼吁的iOS 9这一行:GIDSignIn白色屏幕上的iOS 9

GIDSignIn.sharedInstance().signIn() 

我能够登录的第一次。但是,如果我取消了,下次尝试登录时,会显示一个白色屏幕,其中显示普通用户批准网络视图。

这甚至发生在我删除应用程序并重新安装时,这意味着某些东西可能会在操作系统级缓存。

唯一的解决方案是重新打开iOS模拟器或重新启动我的iPhone。

我试过alltheseanswers没有运气。我也试过GIDSignIn.sharedInstance().signIn().allowsSignInWithWebView = true希望通过Safari授权可能会起作用,但Safari永远不会打开。我的Podfile有pod 'Google/SignIn',所以我不认为这是一个版本问题。

在这一点上,我很茫然,因为这超出了我的应用程序的范围,而我所能想到的就是解构一个正在运行的示例应用程序,并逐行比较它的设置与我的应用程序。

有人有链接到工作示例应用程序的链接吗?

回答

2

我也面临同样的问题。事实上,在一个ViewController中,它正在为我和另一个viewcontroller工作,它不工作。

如果我在某些Button Action方法中调用[[GIDSignIn sharedInstance] signIn],并且不在中,它对我有用。但是如果我在viewDidLoad中调用它,则会出现白屏。

我发现了另外一个解决办法,但我没有这个打算,因为我认为这是不可靠的

[self performSelector:@selector(LogActionPresed:) withObject:self afterDelay:3.5]; 

哪里LogActionPresed是方法,它在内部调用[[GIDSignIn sharedInstance] signIn]

另一个工作解决办法是内调用此方法viewDidAppear

- (void) viewDidAppear:(BOOL)animated { 
    [self LogActionPresed:self]; 
} 
5

所以,我和你有完全一样的问题。它花了我的时间去尝试一切。我终于找到了一个解决方案,这可能不是100%正确的,但它适用于我并解决了问题。

这就是我在我的项目中所做的。 首先,我自己实现了三个GIDSignInUIDelegate函数,这与官方文档冲突,因为我的GIDSignInUIDelegate是UIViewController的子类。但是我正在使用我的自定义签名按钮,并且在我跟踪谷歌官方文档时它不起作用。所以我尝试了一切,发现它的工作原理。

执行委托功能后,需要做两件大事。

  1. 在下面的函数中,设置viewController.view。layoutIfNeeded()

    func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!) { 
        //This line does the trick to fix signin web not showing issue 
        viewController.view.layoutIfNeeded() 
    
        self.present(viewController, animated: true, completion: nil) 
        } 
    
  2. 不要设置此委托在viewDidLoad中()

    GIDSignIn.sharedInstance().uiDelegate = self 
    

相反,在按钮动作设置它们。否则,它以某种方式不断显示代表

希望它会帮助你的问题。

+0

我面临同样的问题,但一直未能找到解决方案。即使我的委托方法也没有被调用。 –

0

删除活动指标后,为我工作。

2

在iOS 10上,我观察到,如果呈现视图控制器位于UINavigationController的堆栈中,它就可以工作。如果呈现视图控制器不在这样的堆栈中,则Web视图保持空白。