Вход Google не работает на iOS 10 Beta 7 с Xcode 8 beta 6

У меня есть приложение в магазине приложений, которое отлично работает до первых нескольких бета-версий iOS 10 (я точно не знаю, какой из них). Он также отлично работает на iOS 9.3.

Однако я не тестирую на бета-версии iOS 10 и знак google полностью не работает. Я использую последнюю версию GIDSignIn от cocoapods.

Здесь мой код:

[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];

Вот как это выглядит на устройстве:

screenshot 1

Он просто остается таким, как это.

Если я нажму кнопку обновления вверху, он попытается обновиться и застрять здесь навсегда.

screenshot 2

Нажав на кнопку "Готово", я вернусь в свое приложение.

В консоли нет ошибок.

Однако, когда я запускаю одно и то же приложение на симуляторе iOS 10, safari view controller даже не открывается. Ничего не происходит. Но консоль регистрирует этот длинный многословный материал, из которого следующее выглядит как "полезный" материал, но я не знаю, что случилось:

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 6 и iPhone 5.

Ответ 1

Я не уверен, что это другие люди, но я решил это, добавив [self.view layoutIfNeeded]. Я знаю, что это странно, но это то, что сработало для меня, я сам не уверен, почему.

Я использовал пользовательский контейнер представления, внутри которого я показывал контроллер входа в Google в качестве ребенка. Поэтому перед добавлением настраиваемого контроллера представления в контейнер мне пришлось сделать [self.view layoutIfNeeded], так как еще не был установлен макет представления, поэтому Google sdk, вероятно, использует ширину/высоту где-то внутри.

Я не уверен, что это правильное решение, но, похоже, оно исправило мою проблему.

Ответ 2

Пример проекта IOS для Google SignIn также имеет такую ​​же проблему.

Он возвращает:

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

Кажется, это ошибка.

Ответ 3

Я (по-прежнему) использую Google+ SDK для входа (1.7.1), а также сломанный на iOS 10 beta 7. Я думал о переходе на GIDSignIn, поскольку GPPSignIn устарел. но я думаю, я буду ждать следующей бета-версии...

Ответ 4

Включите "Совместное использование брелка" на вкладке возможностей вашей цели, и она будет работать.

Ответ 5

Я могу найти решение в моем случае, исправив свой код, чтобы правильно представить подвью. Прежде чем я получил это предупреждение, но проигнорировал его:

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

пока я не увидел ответ Праного С. Мой код структурирован очень похожим образом, что контейнер представления используется для представления подзонов, содержащих кнопку Google. Он не использовал контейнер правильно, чтобы представить subview. Поэтому я последовал за Apple guide, особенно этот блок:

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

Как только предупреждение исчезло, Google начал нормально работать.

Что касается основной причины этой проблемы, я все еще не совсем уверен, но предупреждение кажется намеком. Это связано с отдельными контроллерами. (Я не супер опыт в кодировании iOS, поэтому, если у кого-то есть больше знаний с представлениями, просмотрите контроллеры, не стесняйтесь звонить.)

Ответ 6

В нашей проблеме были сторонние плагины, пытающиеся автоматически интегрироваться в наш делегат приложения. Для нас это была CleverTap (функция autoIntegrate()).

Ответ 7

Не делать ничего Просто установите идентификатор 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
}