我在Google云端硬盘登录时遇到了一些问题。我把它缩小了很多,并产生了一个非常小的repro。
问题是我尝试在View Controller首次出现时签署用户(viewDidLoad)。它是一个文件浏览器视图,允许用户从他/她的Google云端硬盘中选择一个文件。这在第一次加载时工作正常,并且过去常常使用旧的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上也经历过这种行为,似乎解决了这个问题