2015-09-11 7 views
17

Używam GIDSignInButton do podpisywania moich użytkowników do Google. Problem polega na tym, że nie jestem pewien, jak zapisać bieżącego użytkownika, aby każdy użytkownik nie musiał logować się przy każdym otwarciu aplikacji. Próbowałem już używać signInSilently(), ale za każdym razem otrzymuję The operation couldn’t be completed. (com.google.GIDSignIn error -4.).Zapisywanie bieżącego GIDGoogleUser zamiast logowania się przy każdym uruchomieniu

To błąd w pliku nagłówkowym, mówi tak:

// 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, 

W moim przypadku, użytkownik już podpisanej w podanych zakresach, a oni nie podpisali się jeszcze. Więc nie jestem pewien, co może być przyczyną tego błędu.

Po zalogowaniu się użytkownika, w jaki sposób powinienem zapisać tę instancję, aby móc później używać signInSilently()? Czy obsługa dotyczy również żetonów odświeżania i dostępu?

+1

Proszę podać swój kod – Ducky

+0

spróbuj zapisać kompletny przedmiot GIDGoogleUser w domyślnych Użytkownik korzystający NSCoder/dekoder i kiedy aplikacja uruchamia się ponownie, ale trzeba sprawdzić, czy znak etc nie będzie unvalidate po konkretny czas .. mam nadzieję, że to pomoże –

+0

Mam ten sam problem, jakiekolwiek szczęście @ Ducky? – omarojo

Odpowiedz

3

Czy jesteś pewien, że nie masz gdzieś konta użytkownika, które się wylogowało, a nawet nie ma połączenia?

jestem zawsze sprawdza, czy użytkownik ma też obecnie zalogowany lub został zapisany w poprzedniej uwierzytelniania przy użyciu hasAuthInKeychain (np 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() 
    } 
} 

W przypadku uwierzytelnianie nie jest zapisany, należy wywołać cichy zaloguj się i obsłuż odpowiedź z twoją implementacją metody GIDSignInDelegate protokołów didSignInForUser.

+0

Mam dokładnie ten sam problem. Mogę zrobić silentSignIn po normalnym SignIn i wszystko idzie dobrze. Problem polega na tym, że gdy zabijam aplikację, wykonanie cichego polecenia SignIn powoduje błąd -4. To tak jak nie zapisuje niczego w KeyChain. (przy okazji Im działa na urządzeniu z iOS 9) najwyraźniej są pewne problemy z iOS 9 dotyczące KeyChain i GoogleSignIn (wykonaj ten wątek: https://github.com/googlesamples/google-services/issues/82). @dperk jakiekolwiek szczęście? – omarojo

+0

Ten sam problem. Do tej pory najwięcej problemów ze wszystkich frameworków/bibliotek stanowiło google. – kos

0

Jeżeli w projekcie, klasa, która implementuje GIDSignInUIDelegate jest podklasą UIViewController, to nie realizować

signInWillDispatch:error: 
signIn:presentViewController: 
signIn:dismissViewController: 

metod protokołu GIDSignInUIDelegate.

Usuń te metody z kontrolera widoku, jeśli dodałeś. , ale należy zastosować się do protokołu GIDSignInUIDelegate bez implementowania metod.

Naprawi Twój błąd -4.

Zapoznaj Google developers guide o pomoc