我已在我的应用中实施了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;
令牌为空,请帮助我。
感谢。
答案 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.
}
}