重新启动应用程序Google Signin iOS后,访问令牌已清除

时间:2017-06-12 03:36:38

标签: ios google-signin

我已在我的应用中实施了Google登录,下面是我的登录代码

- (IBAction)googleSignIn:(id)sender {
    [[GIDSignIn sharedInstance]signIn];
}

并按如下方式实施委托,

- (void)signIn:(GIDSignIn *)signIn
didSignInForUser:(GIDGoogleUser *)user
     withError:(NSError *)error {
    _socialLoginPlatform = @"Google";
    if (user != nil) {
        NSDictionary *params = @{ @"UserName": user.profile.email,
                                  @"Email":user.profile.email,
                                  @"FullName": user.profile.name,
                                  @"Provider":@"Google",
                                  @"ExternalAccessToken":user.authentication.accessToken,
                                  @"Platform": @"IOS"
                                  };
        if (user.profile.hasImage) {
            kAppDelegate.profilePicture =  [[user.profile imageURLWithDimension:80]absoluteString];
        }
        [self authorizeExternalAccessTokenWithParameters:params];
    }

}

只要应用程序处于前台,但只有当退出并重新启动时,才能正常工作,当我这样做时,

会清除访问令牌
 GIDGoogleUser *user = [[GIDSignIn sharedInstance]currentUser];
 NSString *token = user.authentication.accessToken;

令牌为空,请帮助我。

感谢。

1 个答案:

答案 0 :(得分:0)

[GIDSignIn sharedInstance]是一个共享实例。因此令牌存储在内存中。一旦您的应用被用户或操作系统杀死,它将被清除。

您必须将该令牌存储在某个位置,即使在您获得令牌后将应用程序从内存中删除后,也可以检索该令牌。两种方式是可能的1.User默认2.密钥链是安全的。

[[NSUserDefaults standardUserDefaults] setValue:token forKey:@"GoogleSigninToken"];
[[NSUserDefaults standardUserDefaults]synchronize];

从AppDelegate中的NSUserDefault获取现有令牌

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

      NSString *token = [[NSUserDefaults standardUserDefaults] objectForKey:@"GoogleSigninToken"];
      if (token == nil) {
        // Then user has not signed in.
      }

    }