google / GoogleSignIn-iOS

Enables iOS and macOS apps to sign in with Google.
https://developers.google.com/identity/sign-in/ios
Apache License 2.0
455 stars 181 forks source link

GIDSignIn.sharedInstance.restorePreviousSignIn() sometimes fails to invoke completion handler #431

Open jonmindtrip opened 1 month ago

jonmindtrip commented 1 month ago

Describe the bug GIDSignIn.sharedInstance.restorePreviousSignIn() does not always invoke the completion handler.

I suspect these two closed issues may have the same root cause:

To Reproduce There appears to be two requirements to reproduce this:

Specific repro steps:

  1. Make local changes to DaysUntilBirthday sample app such that restorePreviousSignIn() is invoked twice - see: https://github.com/google/GoogleSignIn-iOS/commit/01d8cb32d1315cea141feeed5c055c9beb912561
  2. Sign in
  3. Kill and restart the app. Check console: should see output below, indicating that both completion blocks are invoked: 0: Restoring 1: Restoring 0: Done: Optional(<GIDGoogleUser: 0x600002124820>), nil 1: Done: Optional(<GIDGoogleUser: 0x600002124820>), nil
  4. Kill the app and wait for about an hour. I was also able to reproduce immediately by changing kMinimalTimeToExpire and kMinimumRestoredAccessTokenTimeToExpire to both be 60.0*59.9.
  5. Restart the app and check console output.

Expected behavior console output should be the following, indicating that both completion blocks were invoked: 0: Restoring 1: Restoring 0: Done: Optional(<GIDGoogleUser: 0x600002124820>), nil 1: Done: Optional(<GIDGoogleUser: 0x600002124820>), nil

Actual behavior console output is the following, indicating the first completion block was not invoked: 0: Restoring 1: Restoring 1: Done: Optional(<GIDGoogleUser: 0x600002124820>), nil