来自viewDidLoad的iOS登录/屏幕和挂起Google登录(仅限重复登录)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来自viewDidLoad的iOS登录/屏幕和挂起Google登录(仅限重复登录)相关的知识,希望对你有一定的参考价值。

我在Google云端硬盘登录时遇到了一些问题。我把它缩小了很多,并产生了一个非常小的repro。

问题是我尝试在View Controller首次出现时签署用户(viewDidLoad)。它是一个文件浏览器视图,允许用户从他/她的Google云端硬盘中选择一个文件。这在第一次加载时工作正常,并且过去常常使用旧的Google Drive集成工作。

但是,现在,当用户:

  1. Segues to File Browser查看并登录
  2. Segues回到主视图
  3. 决定退出或以其他方式退出Google
  4. Segues返回文件浏览器视图(再次调用viewDidLoad并登录Google Drive)...

登录控制器似乎尝试加载,但它只是保持完全空白,并且无法退出这种情况。该应用程序显示为挂起。

有没有其他人有这个问题,是否已知?你可以运行这个最小的repro来看看这个问题:

https://github.com/mmcguill/google-objc-signin-problem-minimal-repro

我发现通过使用如下所示的延迟,问题不再发生。你可以想象,这不是我真正想在我的应用程序中做的事情,它感觉相当hacky。

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{    
    GIDSignIn* signIn = [GIDSignIn sharedInstance];
    signIn.delegate = self;
    signIn.uiDelegate = self;
    [signIn signIn];
});

Cocoapod正在发生这种情况:

/ RTI

在iPhone模拟器和实际的iPhone 7上。不确定其他设备,虽然我认为它是相同的。

对于干净的解决方法的任何其他建议都会很棒。但我希望我的观点的行为保持不变(在启动时显示Google云端硬盘,如果未登录则弹出窗口登录)...

答案

你可以在你调用[[GIDSignIn sharedInstance] singIn];的UIViewController中实现uiDelegate

然后在- (void)signIn:(GIDSignIn *)signIn presentViewController:(UIViewController *)viewController;中呈现传递的视图控制器之前,只需调用[viewController view];,这应该强制在显示之前加载UI。

我在iPhone7 ios11上也经历过这种行为,似乎解决了这个问题

以上是关于来自viewDidLoad的iOS登录/屏幕和挂起Google登录(仅限重复登录)的主要内容,如果未能解决你的问题,请参考以下文章

使用融合的 google api 和挂起的意图,更新位置

进程的阻塞和挂起的区别

进程的阻塞和挂起的区别

线程阻塞和挂起(网络收集)

Chrome 中 JQuery 停止和挂起的 ajax 请求

当应用程序被终止时并在后台使用 FusedLocationProviderClient 和挂起的 Intent 但在不规则时间获取位置