索引
在项目中添加了用户登录的功能,使用了一段时间后感觉每一次打开APP后都要登录一下才能进入到首页,这种体验感觉很不舒服。
参照主流的APP流程,只要用户第一次登录后没有登出,在用户下一次打开APP的时候会自动保存登录的状态。
所以需求来了,提升用户体验的时候来了。
思路
查了多种途径的逻辑设计,这里就记录一下简单的途径,用在目前的项目足矣。因为每一次登录都会请求一次后台,后台返回的code为1才表示登录成功,在这里我们就用到iOS里面的数据持久化的一个类 NSUserDefault来完成就可以了。
第一步
在登录的接口那里,登录成功了后添加NSUserDefault类的初始化,把用户的用户名和密码保存到NSUserDefault里面,像这样
//登录成功保存用户名和密码
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setObject:phoneString forKey:@"userName"];
[userDefault setObject:passwordString forKey:@"password"];
[userDefault synchronize];
第二步
有登录以后那就有退出登录,在退出登录成功后需要清除NSUserDefault里面保存的用户信息
//清除userDefault里的登录信息
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault removeObjectForKey:@"userName"];
[userDefault removeObjectForKey:@"password"];
[userDefault synchronize];
第三步
前两步我们只是保证了用户的登录信息保存在本地里,接下来我们要做的就是在用户打开APP的时候做一个登录判断。在AppDelegate的初始化方法里取出NSUserDefault的类,如果NSUserDefault里保存有用户名的信息,则发起登录请求,并跳转到登录后的页面,如果没有保存有用户名的身份信息,则打开登录页面进行手动登录。像这样
//添加自动登录
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSString *userName = [userDefault objectForKey:@"userName"];
NSString *password = [userDefault objectForKey:@"password"];
if(userName != nil) {
//NSLog(@"自动登录");
NSString *enPassword = [EncryptionHelper md5:password];
NSString *paramString = [NSString stringWithFormat:@"{account:\"%@\",password:\"%@\"}", userName, enPassword];
[[WebService webServiceInstance] requestWith:hLoginURL parameters:paramString Delegate:self showLoad:NO];
}else{
//NSLog(@"打开登录页面");
self.isLogin = NO;
}
以上就是根据NSUserDefaults进行自动登录的思路,比较简单,我们需要做的就是在AppDelegate里面的登录请求结果处理里面去做相应的页面跳转就可以了。