iOS 9上的GIDSignIn白屏

Zac*_*ris 6 hang ios ios9 google-signin

我实施了Google登录,一切都可以在iOS 8上运行.但是当我在iOS 9上调用此行时:

GIDSignIn.sharedInstance().signIn()
Run Code Online (Sandbox Code Playgroud)

我能够第一次登录.但是,如果我取消,下次我尝试登录时会显示一个白色屏幕,其中显示正常的用户批准Web视图.

当我删除应用程序并重新安装它时,甚至会发生这种情况,这意味着可能会在操作系统级别缓存某些内容.

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

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

我在在这一点上的损失,因为这超出了我的应用程序的范围,以及所有我能想到的是解构工作示例应用程序,并通过线我的应用程序行比较其设置.

有人有一个工作示例应用程序的链接?

小智 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)
      }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 不要在ViewDidLoad()中设置此委托

    GIDSignIn.sharedInstance().uiDelegate = self
    
    Run Code Online (Sandbox Code Playgroud)

而是在按钮操作中设置它们.否则,它会以某种方式继续显示委托

希望它能帮助你解决问题.


Ash*_*ish 2

我也面临同样的问题。事实上,在一个视图控制器中它对我有用,而在另一个视图控制器中它不起作用。

如果我在某个 Button Action 方法内部调用而不是在 in 中,它对我有用[[GIDSignIn sharedInstance] signIn]。但是如果我在 viewDidLoad 内部调用它,我会得到白屏。

我找到了另一种解决方法,但我不会这样做,因为我认为它不可靠

[self performSelector:@selector(LogActionPresed:) withObject:self afterDelay:3.5];
Run Code Online (Sandbox Code Playgroud)

其中 LogActionPresed 是内部调用的方法[[GIDSignIn sharedInstance] signIn]

另一个可行的解决方案是在 viewDidAppear 中调用此方法

- (void) viewDidAppear:(BOOL)animated {
    [self LogActionPresed:self];
}
Run Code Online (Sandbox Code Playgroud)