使用Xcode 8 beta 6的Googlelogin不能使用iOS 10 Beta 7

我在应用程序商店有一个应用程序,工作完全正常,直到iOS 10的第几beta(我不完全确定哪一个)。 它也适用于iOS 9.3。

不过,我并没有在iOS 10 beta 7上进行testing,而且谷歌loginfunction已经完全破解。 我正在使用来自cocoapods的最新版本的GIDSignIn

这是我的代码:

 [GIDSignIn sharedInstance].clientID = [[ParseFetcher sharedInstance] getRandomParseK]; [GIDSignIn sharedInstance].delegate = sharedInstance; [GIDSignIn sharedInstance].uiDelegate=sharedInstance; [GIDSignIn sharedInstance].scopes = [NSArray arrayWithObjects:@"https://www.googleapis.com/auth/youtube",@"https://www.googleapis.com/auth/youtube.force-ssl", nil]; [[GIDSignIn sharedInstance] signIn]; 

这是它在设备上的外观:

屏幕截图1

它只是像这样卡住。

如果我点击顶部的刷新button,它会尝试刷新并永久卡在这里。

截图2

点击完成button发回我的应用程序。

控制台中没有logging错误。

但是,当我在iOS 10模拟器上运行相同的应用程序, safari view controller甚至不打开。 什么也没有发生。 但是控制台logging下这个长长的冗长的东西,其中以下看起来是最“有用”的东西,但我不知道什么是错的:

 nw_endpoint_resolver_receive_report [8 i.ytimg.com:443 in_progress resolver (satisfied)] received child report:[8.1 206.248.149.148:443 waiting path (satisfied)] 2016-08-22 23:19:51.531570 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_connection_endpoint_report [8.1 206.248.149.148:443 waiting path (satisfied)] reported event path:satisfied 2016-08-22 23:19:51.531909 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_proxy_handler_should_use_proxy Looking up proxy for hostname: <nil>, ifindex: 0 2016-08-22 23:19:51.533116 XXXXAPPNAMEXXXXXXX[4561:195631] [] -[NWConcrete_nw_endpoint_flow startWithHandler:] [8.1 206.248.149.148:443 waiting socket-flow (satisfied)] 2016-08-22 23:19:51.533548 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_flow_setup_socket [8.1 206.248.149.148:443 in_progress socket-flow (satisfied)] creating socket 2016-08-22 23:19:51.534108 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_flow_attach_protocols [8.1 206.248.149.148:443 in_progress socket-flow (satisfied)] 2016-08-22 23:19:51.534672 XXXXAPPNAMEXXXXXXX[4561:195631] [] __nwlog_err_simulate_crash simulate crash already simulated "nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available" 2016-08-22 23:19:51.535415 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available, dumping backtrace: [x86_64] libnetcore-856.1.8 0 libsystem_network.dylib 0x000000010c6e280e __nw_create_backtrace_string + 123 1 libnetwork.dylib 0x000000010e0d5194 nw_socket_add_input_handler + 3002 2 libnetwork.dylib 0x000000010e0b2db8 nw_endpoint_flow_attach_protocols + 3768 3 libnetwork.dylib 0x000000010e0b1dd5 nw_endpoint_flow_setup_socket + 563 4 libnetwork.dylib 0x000000010e0b0b34 -[NWConcrete_nw_endpoint_flow startWithHandler:] + 2612 5 libnetwork.dylib 0x000000010e0cbd11 nw_endpoint_handler_path_change + 1261 6 libnetwork.dylib 0x000000010e0cb740 nw_endpoint_handler_start + 570 7 libnetwork.dylib 0x000000010e0e3003 nw_endpoint_resolver_start_next_child + 2240 8 libdispatch.dylib 0x000000 2016-08-22 23:19:51.535995 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_flow_attach_protocols [8.1 206.248.149.148:443 in_progress socket-flow (satisfied)] Attached flow protocol 2016-08-22 23:19:51.536475 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_resolver_receive_report [8 i.ytimg.com:443 in_progress resolver (satisfied)] received child report:[8.1 206.248.149.148:443 in_progress socket-flow (satisfied)] 

注:iOS 9.3完美的作品。 也发生在所有设备上 – 在iPhone 6s和iPhone 5s上testing。

Google SignIn示例iOS项目也具有相同的问题。

它返回:

 "Error Domain=com.google.GIDSignIn Code=-2 "keychain error" UserInfo={NSLocalizedDescription=keychain error}" 

这似乎是一个错误。

我(仍然)使用Google+ SDK进行login(1.7.1),并且在iOS 10 beta 7中也遭到了破坏。由于GPPSignIn已弃用,因此我正考虑转移到GIDSignIn。 但我想我会等待下一个testing版…

打开目标的function标签中的“钥匙串共享”,它将工作。

我不知道这是其他人面临的,但我通过添加[self.view layoutIfNeeded]来解决这个问题。 我知道这很奇怪,但这是对我有用,我自己不知道为什么。

我正在使用一个自定义的视图容器,在这个容器中,我正在显示Google在视图控制器中的签名。 所以在将自定义视图控制器添加到容器之前,我必须做[self.view layoutIfNeeded] ,否则视图布局还没有设置,所以谷歌的sdk可能使用里面的宽度/高度。

我不确定这是否是正确的解决scheme,但似乎已经解决了我的问题。

我能够find一个解决scheme在我的情况下,通过修复我的代码,以适当地提出一个子视图。 在我得到这个警告之前,却忽略了它:

 Warning :-Presenting view controllers on detached view controllers is discouraged 

直到我看到Pranoy C的回答。 我的代码的结构非常类似于使用视图容器呈现包含Googlebutton的子视图。 它没有正确使用容器来呈现子视图。 所以我跟着苹果的指南 ,特别是这个块:

 - (void) displayContentController: (UIViewController*) content { [self addChildViewController:content]; content.view.frame = [self frameForContentController]; [self.view addSubview:self.currentClientView]; [content didMoveToParentViewController:self]; } 

一旦警告消失,Google就开始正常工作。

就这个问题的根源而言,我还是不太确定,但警告似乎是一个暗示。 它与分离的视图控制器有关。 (我在iOS编码方面并不是非常有经验,所以如果有人对视图有更多的了解,视图控制器可以随意插入。)

我们的问题是一些第三方插件试图自动集成到我们的应用程序委托。 对于我们来说,这是CleverTap( autoIntegrate()函数)。

什么都不做仅当应用程序正在启动时设置clientID。 喜欢在下面的代码中给出:

导入FBSDKLoginKit导入GoogleSignIn导入GGLCore

@UIApplicationMain类AppDelegate:UIResponder,UIApplicationDelegate {

 var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { var ConfigError : NSError? GGLContext.sharedInstance().configureWithError(&ConfigError) assert(ConfigError == nil, "Error Configuration with Google services: \(ConfigError)") GIDSignIn.sharedInstance().clientID = "679401366566-8107g2n11hpnqas58m9v8rk7hl2lgl7s.apps.googleusercontent.com" // Here You Have To Change Your App ID let fbDelegate = FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) print("DidFinish") return fbDelegate }