iOS 9上的GIDSignIn白屏

问题描述 投票:6回答:5

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

GIDSignIn.sharedInstance().signIn()

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

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

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

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

我现在处于亏损状态,因为这超出了我的应用程序的范围,我能想到的就是解构一个有效的示例应用程序并将其设置与我的应用程序逐行比较。

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

ios ios9 hang google-signin
5个回答
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

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

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


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

2
投票

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


0
投票

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


0
投票

Google Pod会记住您登录的用户。尝试在出错时退出并退出。这样,您就可以在下次登录时在Google中选择自己的帐户。

© www.soinside.com 2019 - 2024. All rights reserved.