Ios 未保存密钥链中的GIDSignIn Auth

Ios 未保存密钥链中的GIDSignIn Auth,ios,swift,authentication,keychain,google-signin,Ios,Swift,Authentication,Keychain,Google Signin,我正在开发一个iOS Swift应用程序,它支持Google登录和登录。为此,我使用GoogleSignIn v2.2.0,如下所示: func loginRequest(onSuccess successBlock: () -> Void, onError errorBlock: (String?) -> Void) { var signIn = GIDSignIn.sharedInstance() signIn.shouldFetchBasicProfile =

我正在开发一个iOS Swift应用程序,它支持Google登录和登录。为此,我使用GoogleSignIn v2.2.0,如下所示:

func loginRequest(onSuccess successBlock: () -> Void, onError errorBlock: (String?) -> Void) {

    var signIn = GIDSignIn.sharedInstance()
    signIn.shouldFetchBasicProfile = true
    signIn.allowsSignInWithWebView = false
    signIn.allowsSignInWithBrowser = true
    signIn.scopes = ["https://www.googleapis.com/auth/plus.login"]
    signIn.delegate = self

    if  signIn.hasAuthInKeychain(){
        signIn.signInSilently()
    }else{
        signIn.signIn()
    }

}

func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) {
    if (error == nil) {
       // managing login data here            
        self.successBlock()
    } else {
        self.errorBlock(error.localizedDescription)
    }    
}

在此之前,一切正常,我可以成功登录。如上所述,我接下来需要的是使用Google App Invite,它需要先登录,所以我需要用户保持登录状态,这就是为什么我从不调用
GIDSignIn.sharedInstance().signOut()
。如果我在登录后立即调用invite方法,它将按预期打开invite对话框,但我面临的问题只有在我的应用程序重新启动后才会出现,并且当
GIDSignIn.sharedInstance().hasAuthInKeychain()
返回false时才会出现。所以我的问题是:在应用程序从内存中释放后,是否可以将auth保留在keychain中,并在以后使用它。如果不是的话,真正让我困惑的是
signitily()
方法,它看起来毫无意义

我也有同样的问题。然而,我发现了谷歌登录的要点。
我写了
[[GIDSignIn sharedInstance]sign]
[[GIDSignIn sharedInstance]显著]在不同的原始方法中

比如说,

- (void)checkOAuth {
    [GIDSignIn sharedInstance].uiDelegate = self;
    if([GIDSignIn sharedInstance].hasAuthInKeychain) {
         GIDGoogleUser *user = [GIDSignIn sharedInstance].currentUser;
         if(!user) {
             [[GIDSignIn sharedInstance] signInSilently];
         }
    }
}

- (void)didReceivedLogin {

    [GIDSignIn sharedInstance].uiDelegate = self;
    [GIDSignIn sharedInstance].scopes = @[@https://www.googleapis.com/auth/drive"];
    // Google SignInを実行
    [[GIDSignIn sharedInstance] signIn];

}
然而,通过修复代码,我可以从hasAuthInKeychain中获得真实信息。
首先,我改为在ViewDidLoad方法中编写GIDSignIn的新方法。 它统一了GIDSignIn在我的应用程序中的状态

我希望这对你有帮助