iOS 9上的GIDSignIn白屏

时间:2016-02-13 03:10:10

标签: ios ios9 hang google-signin

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

GIDSignIn.sharedInstance().signIn()

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

当我删除应用程序并重新安装它时,甚至可能会在操作系统级别缓存某些内容。

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

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

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

是否有人有工作示例应用的链接?

5 个答案:

答案 0 :(得分:5)

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

这就是我在项目中所做的。 首先,我自己实现了三个GIDSignInUIDelegate函数,这与官方文档冲突,因为我的GIDSignInUIDelegate是UIViewController的子类。但我正在使用我的自定义签名按钮,当我按照谷歌官方文档时,它无法正常工作。所以我试了一切,发现它有效。

实现委托功能后,需要做两件事。

  1. 在以下函数中,设置viewController.view.layoutIfNeeded()

    Imports System.Text.RegularExpressions
    
    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            ' Clear the box each time the button is clicked
            ListBox1.Items.Clear()
    
            ' Input string.
            Dim input As String = TextBox1.Text.Trim
    
            Dim pattern As String = "<(.*?)>"
    
            For Each match As Match In Regex.Matches(input, pattern, RegexOptions.IgnoreCase)
                ListBox1.Items.Add(match.Groups(1).Value)
            Next
    
        End Sub
    End Class
    
  2. 请勿在ViewDidLoad()

    中设置此委托
     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)
      }
    
  3. 相反,请在按钮操作中进行设置。否则,它会以某种方式继续显示委托

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

答案 1 :(得分: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 :(得分:2)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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