iOS 10 Beta 7和Xcode 8 beta 6中的Google登录无法正常工作

12

我在应用商店中有一个应用,直到iOS 10的前几个测试版(我不确定是哪个版本)之前一直运行良好,并且在iOS 9.3上也可以完美运行。

然而,我现在正在测试iOS 10 beta 7,但谷歌登录已经完全失效。我正在使用来自的最新版本的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

它就一直卡在这里。

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

屏幕截图 2

点击完成按钮会将我带回我的应用程序。

控制台中没有记录任何错误。

然而,在iOS 10模拟器上运行相同的应用程序时,safari视图控制器甚至都不会打开。啥也没发生。但控制台记录了这个冗长的详细信息,其中以下内容似乎是最“有用”的,但我不知道出了什么问题:

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上进行测试。


这个问题在iOS 10.0.2版本中仍然存在,而不仅仅是测试版。 - Max Desiatov
7个回答

9

谷歌登录iOS示例项目也存在相同的问题。

它返回:

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

这似乎是一个错误。


4

我目前仍然使用Google+ SDK(1.7.1)进行登录,但是在iOS 10 beta 7上无法正常使用(broken)。 考虑到GPPSignIn已经被弃用,我想转而使用GIDSignIn。但我认为我会等待下一个beta版本再做决定...


下一个测试版可能会是黄金大师版,希望到那时它能被修复。否则我们将在 iOS 的最终发布版本中拥有一个有缺陷的应用程序 :( - sudoExclaimationExclaimation

2
在您的目标中的功能选项卡中打开“钥匙串共享”,它就可以工作了。

1
这与此特定问题无关。 - sudoExclaimationExclaimation
@PranoyC 是的,它确实可以。我之前遇到了同样的问题,这个解决方案解决了它。Google将登录信息存储在应用程序的共享钥匙串中,因此它是持久的,在iOS 10中,默认情况下应用程序无法访问这一功能。 - Dylan Diamond
在我的情况下,我遇到了一个错误:"Error Domain=com.google.GIDSignIn Code=-2 "keychain error" UserInfo={NSLocalizedDescription=keychain error}"。解决方法是打开密钥共享功能。感谢Dylan Diamond! - M Penades
这并不能解决它 :( - Rohit Tigga
打开“钥匙串共享”后上传到App Store会有任何问题吗? - Alex
显示剩余3条评论

1
我不确定其他人是否遇到了同样的问题,但是我通过添加 [self.view layoutIfNeeded] 来解决它。我知道这很奇怪,但这就是对我有效的方法,我自己也不确定为什么。

我使用了一个自定义视图容器,在其中作为子视图显示 Google 的登录视图控制器。因此,在将自定义视图控制器添加到容器之前,我必须执行 [self.view layoutIfNeeded],否则视图布局尚未设置,因此 Google 的 SDK 可能在某个地方使用了宽度/高度。

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


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

我在Facebook登录方面遇到了同样的问题,而且我也集成了CleverTap。我尝试注释掉CleverTap的autoIntegrate,但是无法解决。有什么想法吗? - JiteshW
是的,那也是我的问题。通过删除该方法并手动配置解决了。 - Silviu St

1
我通过修复代码以正确显示子视图来解决了我的问题。之前我收到了这个警告,但忽略了它:
Warning :-Presenting view controllers on detached view controllers is discouraged

直到我看到Pranoy C的回答。我的代码结构与他非常相似,一个视图容器用于呈现包含Google按钮的子视图。它没有正确使用容器来呈现子视图。因此,我按照苹果指南中的特别是这个块进行了操作:

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

一旦警告消失,Google就开始正常工作了。
至于这个问题的根本原因,我仍然不确定,但是警告似乎是一个提示。它与分离的视图控制器有关。(我在iOS编码方面经验不是很丰富,如果有更多关于视图、视图控制器方面的知识的人,请随意发言。)

你的解决方案是正确的,我也得做类似的事情来修复我的。令人惊讶的是,这在iOS 9中运行良好,在10中却出现了问题。但我猜我们做错了事情(因为警告),所以我们本来就应该预料到它会出问题。很高兴你解决了它!另外,欢迎来到Stack Overflow! :) - sudoExclaimationExclaimation

0

在应用程序完成启动时,仅设置客户端ID。就像下面的代码所示:

import FBSDKLoginKit import GoogleSignIn import GGLCore

@UIApplicationMain class 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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接