Сохранение текущего GIDGoogleUser вместо входа на каждый запуск
Я использую GIDSignInButton
, чтобы подписать моих пользователей в Google. Проблема в том, что я не уверен, как сохранить текущего пользователя, чтобы каждый пользователь не должен был подписываться каждый раз при открытии приложения. Я пробовал использовать signInSilently()
, но каждый раз получаю The operation couldn’t be completed. (com.google.GIDSignIn error -4.)
.
Эта ошибка в файле заголовка говорит следующее:
// Indicates there are no auth tokens in the keychain. This error code will be returned by
// signInSilently if the user has never signed in before with the given scopes, or if they have
// since signed out.
kGIDSignInErrorCodeHasNoAuthInKeychain = -4,
В моем случае пользователь уже выполнил вход с указанными областями, и они еще не вышли из системы. Поэтому я не уверен, что может вызвать эту ошибку.
После входа пользователя, как мне сохранить этот экземпляр, где я могу использовать signInSilently()
после этого? Есть ли обработка, связанная с токенами обновления и доступа?
Ответы
Ответ 1
Вы уверены, что пользователь еще не выходил из системы или даже отключился?
Я всегда проверяю, был ли пользователь в настоящий момент подписан или имеет предыдущую аутентификацию, сохраненную при использовании hasAuthInKeychain
(например, в viewWillAppear
):
private func checkIfGoogleUserIsAuthorized() {
if GIDSignIn.sharedInstance().hasAuthInKeychain() {
// User was previously authenticated to Google. Attempt to sign in.
GIDSignIn.sharedInstance().signInSilently()
} else {
// User was not previously authenticated to Google.
self.updateUI()
}
}
Если аутентификация не сохранена, вы должны включить молчащий вход и обработать ответ с помощью вашей реализации методов GIDSignInDelegate
didSignInForUser
.
Ответ 2
Если в вашем проекте класс, реализующий GIDSignInUIDelegate
, является подклассом UIViewController
, тогда не реализуйте
signInWillDispatch:error:
signIn:presentViewController:
signIn:dismissViewController:
для протокола GIDSignInUIDelegate
.
Удалите эти методы из контроллера просмотра, если вы добавили.
но вы должны соответствовать протоколу GIDSignInUIDelegate
, не применяя методы.
Он исправит вашу ошибку -4.
Пожалуйста, обратитесь руководство разработчиков Google за помощью