Подтвердить что ты не робот

Сохранение текущего 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() после этого? Есть ли обработка, связанная с токенами обновления и доступа?

4b9b3361

Ответ 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 за помощью