重新启动应用程序时 GIDSignIn.sharedInstance().currentUser nil

pls*_*pls 2 ios swift google-signin googlesigninapi

最初,我在检查是否已将数据保存到钥匙串中时遇到了问题。我找到了这篇文章并遵循了 BhavinBhadani 的建议:

每当您检查 if ([GIDSignIn sharedInstance].hasAuthInKeychain) 时,在此之前添加您的登录范围..

https://github.com/googlesamples/google-services/issues/27

这解决了我GIDSignIn.sharedInstance().hasAuthInKeychain()在用户之前成功登录然后杀死应用程序并重新运行后返回 true 的第一个问题。

但是现在我正在做以下事情:

let signIn = GIDSignIn.sharedInstance()
signIn.scopes = [Constants.GOOGLE_CLIENT_SCOPE, Constants.GOOGLE_OIDC_SCOPE]

if GIDSignIn.sharedInstance().hasAuthInKeychain() {
    print("We have saved in keychain")

    if let u = GIDSignIn.sharedInstance().currentUser {
        getData(dataApi)
    }
    else {
        // THIS CODE IS BEING SUCCESSFULLY HIT
        GIDSignIn.sharedInstance().signInSilently()
        getApplicationData(dataApi)
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,即使在做GIDSignIn.sharedInstance().signInSilently()了之后:GIDSignIn.sharedInstance().currentUser是零。

有没有人成功用于signInSilently()再次填充 currentUser 数据?

Roh*_*han 6

最近谷歌在谷歌登录 SDK v5.0.0 中改变了检查用户是否已经登录的方法。

更新对signInSilently 和hasAuthInKeychain 的调用以恢复PreviousSignIn 和hasPreviousSignIn。

所以代码看起来像

if(GIDSignIn.sharedInstance().hasPreviousSignIn()) {

      GIDSignIn.sharedInstance()?.restorePreviousSignIn()

  } else {

    navigateToLogin()

 }
Run Code Online (Sandbox Code Playgroud)

迁移指南:https : //developers.google.com/identity/sign-in/ios/quick-migration-guide


EI *_*2.0 5

我在 git 中的那个问题中指出你还需要在hasAuthInKeychain像这样检查之前添加范围......这对我有用,希望对你也一样

 let signIn = GIDSignIn.sharedInstance()
signIn.scopes = ["https://www.googleapis.com/auth/plus.login","https://www.googleapis.com/auth/plus.me"]

  if (signin.hasAuthInKeychain) {
        print("Signed in");
  } else {
        print("Not signed in");
  }
Run Code Online (Sandbox Code Playgroud)

确保之后GIDSignIn.sharedInstance().signInSilently(),调用getApplicationData(dataApi)填充数据会有一些延迟。