GIDSignInUIDelegate Методы вызова - PullRequest
0 голосов
/ 07 октября 2018

У меня есть контроллер представления в стеке навигации (2-й дочерний элемент).

Контроллер настроен как GIDSignInDelegate и GIDSignInUIDelegate.

После запуска входа в систему каждый ожидаемый метод делегата будет вызван, вызывается, за исключением:

func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!)

и

func sign(_ signIn: GIDSignIn!, dismiss viewController: UIViewController!)

Обратите внимание, что в viewDidLoad я назначил контроллер представления делегатом и делегатом пользовательского интерфейса.

Кроме того, после закрытия представления входа в Google мой текущий контроллер представления автоматически отключается от стека навигации (?????)

Что вызывает это?

1 Ответ

0 голосов
/ 19 июля 2019

Если проблема возникает в iOS 11 и выше, тогда я нашел это объяснение в документе журнала изменений платформы: https://cocoapods.org/pods/GoogleSignIn/changelog

Запись от 2017-10-17 - v4.1.1 заявляет:

Исправлена ​​проблема, из-за которой GIDSignInUIDelegate signInWillDispatch: error: не был вызван в iOS 11. Обратите внимание, что предполагается, что ни signIn: presentViewController:, ни signIn: dimissViewController: не вызывается в iOS 11, поскольку SFAuthenticationSession не вызываетсяпредставленный контроллером представления приложения.

Согласно приведенному выше объяснению signInWillDispatch:error действительно вызывается, но signIn:presentViewController: и signIn:dimissViewController: являются намеренно , не вызванными, потому что базовый SFAuthenticationSession представляет и отклоняет поток входа через частный API, делая два метода обратного вызова бесполезными.Я полагаю, что эти методы остаются в протоколе GIDSignInUIDelegate исключительно для обратной совместимости с iOS 10, где SFAuthenticationSession не использовался, и поток входа мог быть представлен и отклонен от конкретного контроллера представления.

Однако, несмотря на то, что эти два метода никогда не вызываются в iOS 11 и выше, они все равно должны быть реализованы, когда объект делегата не является подклассом UIViewController, в противном случае приложение вылетит.Очевидно, что не очень логично иметь реализованные методы, которые ничего не делают ...

Кстати, Google мог бы лучше обновлять свою документацию, потому что теперь это вводит в заблуждение: https://developers.google.com/identity/sign-in/ios/api/protocol_g_i_d_sign_in_u_i_delegate-p#a2b265097a3c78e7f82d57b2ccda11c39

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...