Вход 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
}