2016-08-23 2 views
12

У меня есть приложение в магазине приложений, которое отлично работает до первых нескольких бета-версий iOS 10 (я точно не знаю, какой из них). Он также отлично работает на iOS 9.3.Google Sign In не работает на iOS 10 Beta 7 с Xcode 8 beta 6

Однако я не тестирую на iOS 10 beta 7 и знак 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.

+0

это еще воспроизводимые с прошивкой 10.0.2, а не просто бета-версии –

ответ

1

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

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

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

9

Образец проекта IOS для Google тоже имеет ту же проблему.

возвращает:

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

Это кажется ошибка.

4

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

+0

следующей бета-версией может стать релиз Gold Master, надеюсь, что к этому он будет исправлен. Else у нас будет дефектное приложение в финальной версии iOS :( –

1

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

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

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

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

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

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

+0

ваше решение правильно, мне в значительной степени пришлось делать похожие вещи, чтобы получить мой исправленный. На удивление это отлично работало в iOS 9 и сломалось в 10. Но я думаю, мы делали неправильную вещь (причина предупреждения), поэтому мы должны были ожидать, что она сломается в любом случае. Хорошо, что вы исправили это! Ps. добро пожаловать в переполнение стека! :) –

1

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

+0

Я столкнулся с той же проблемой для входа в Facebook, и у меня тоже встроен CleverTap , Я пробовал комментировать autoIntegrate из clevertap. Но не мог решить. Есть идеи ? – JiteshW

+0

Да. Это тоже моя проблема. И решил, удалив этот метод и настроив вручную –

2

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

+1

, это не имеет никакого отношения к этой конкретной проблеме. –

+0

@PranoyC да, это так, я столкнулся с той же проблемой, и это разрешило это. Google хранит регистрационную информацию в общей цепочке ключей приложения, поэтому она сохраняется, а в приложениях для iOS 10 по умолчанию не имеют доступа к этому. –

+0

В моем случае: произошла ошибка: «Ошибка домена = com.google.GIDSignIn Code = -2» ошибка keychain «UserInfo = {NSLocalizedDescription = keychain error}». Это было решение, просто включающее возможность совместного использования ключей. Спасибо Дилан Алмаз! –

0

Do Nothing Просто установите идентификатор клиента во время запуска приложения. Как Дано в коде ниже:

импорт 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 
} 
Смежные вопросы