signInSilently() generates an error code=-4

Edward Ashak picture Edward Ashak · Jul 16, 2015 · Viewed 8.2k times · Source

I'm having this case where the GIDSignIn.sharedInstance().signInSilently() is returning an error:

Error Domain=com.google.GIDSignIn Code=-4 "The operation couldn’t be completed. (com.google.GIDSignIn error -4.)"

I can't seem to find any documentation of this error under the google signin docs or stackOverflow for that matter.

I'm expecting this to error to happen if I request a silent signIn for no previously signedIn user. But to my surprise it even happens when I have a user previously signedIn and I attempt to signIn Silently a second time after a few seconds.

A second issue I'm having difficulty with is to determine if there is a user signed In using :

GIDSignIn.sharedInstance().currentUser

which is either a nil or a GIDGoogleUser object.

Any help making progress on this issue would be much appreciated.

Thanks

Answer

jhabbott picture jhabbott · Jul 17, 2015

Here are the error codes from GIDSignIn.h. The -4 code is sent by signInSilently when there are no auth tokens in the keychain. See comments.

// A list of potential error codes returned from the Google Identity SDK.
typedef NS_ENUM(NSInteger, GIDSignInErrorCode) {
  // Indicates an unknown error has occured.
  kGIDSignInErrorCodeUnknown = -1,
  // Indicates a problem reading or writing to the application keychain.
  kGIDSignInErrorCodeKeychain = -2,
  // Indicates no appropriate applications are installed on the user's device which can handle
  // sign-in. This code will only ever be returned if using webview and switching to browser have
  // both been disabled.
  kGIDSignInErrorCodeNoSignInHandlersInstalled = -3,
  // 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,
  // Indicates the user canceled the sign in request.
  kGIDSignInErrorCodeCanceled = -5,
};

For the Google SDKs in general I've found the header file comments are actually a pretty good place to look, usually more informative than any published documentation.