首页 > 代码库 > iOS开发项目篇—20存储账号信息
iOS开发项目篇—20存储账号信息
iOS开发项目篇—20存储账号信息
一、简单说明
1.不论请求是否成功,都在发送Post请求后,隐藏遮罩。
2.在授权成功后,切换根控制器。
(1)说明
切换到控制器有几种情况,要么是切换到新特性,要么是切换到“首页”。
没有必要每次进入程序都需要登录,且每次返回的数据都是一样的,所以只需要把拿到的信息保存到沙盒里就可以了。
判断上次有没有登录成功(把拿到的access_token保存到沙盒中,如果沙盒中有access_token,说明上次登录成功),如果上次登陆成功,那么就判断是否要进入新特性。如果上次没有登陆成功,那么就跳转到登陆界面。
(2)图示
(3)代码
授权YYOAuthViewController.m文件
1 // 2 // YYOAuthViewController.m 3 // 4 5 #import "YYOAuthViewController.h" 6 #import "MBProgressHUD+MJ.h" 7 #import "AFNetworking.h" 8 #import "YYTabBarViewController.h" 9 #import "YYNewfeatureViewController.h" 10 11 @interface YYOAuthViewController ()<UIWebViewDelegate> 12 13 @end 14 15 @implementation YYOAuthViewController 16 17 - (void)viewDidLoad 18 { 19 [super viewDidLoad]; 20 21 //1.创建UIWebView 22 UIWebView *webView=[[UIWebView alloc]init]; 23 webView.frame=self.view.bounds; 24 [self.view addSubview:webView]; 25 26 27 //2.加载登陆界面 28 NSURL *url=[NSURL URLWithString:@"https://api.weibo.com/oauth2/authorize?client_id=1972915028&redirect_uri=http://www.cnblogs.com/wendingding/"]; 29 NSURLRequest *request=[[NSURLRequest alloc]initWithURL:url]; 30 [webView loadRequest:request]; 31 32 //3.设置代理 33 webView.delegate=self; 34 } 35 36 #pragma mark-UIWebViewDelegate 37 /** 38 * UIWebView开始加载资源的时候调用(开始发送请求) 39 */ 40 -(void)webViewDidStartLoad:(UIWebView *)webView 41 { 42 [MBProgressHUD showMessage:@"正在努力加载中···"]; 43 } 44 45 /** 46 * UIWebView加载完毕的时候调用(请求结束) 47 */ 48 -(void)webViewDidFinishLoad:(UIWebView *)webView 49 { 50 [MBProgressHUD hideHUD]; 51 } 52 53 /** 54 * UIWebView加载失败的时候调用(请求失败) 55 */ 56 -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 57 { 58 [MBProgressHUD hideHUD]; 59 } 60 61 /** 62 * UIWebView每当发送一个请求之前,都会先调用这个代理方法(询问代理允不允许加载这个请求) 63 * @param request 即将发送的请求 64 * @return YES允许加载,NO不允许加载 65 */ 66 -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 67 { 68 //1.获得请求地址 69 NSString *urlStr=request.URL.absoluteString; 70 // NSLog(@"%@",urlStr); 71 72 //2.判断url是否为回调地址 73 //urlStr在字符串中的范围 74 //设置从等号位置开始,不用再额外的找位置 75 NSRange range=[urlStr rangeOfString:@"http://www.cnblogs.com/wendingding/?code="]; 76 //判断是否为回调地址 77 if (range.location!=NSNotFound) {//是回调地址 78 //截取授权成功后的请求标记 79 int from=range.location+range.length; 80 NSString *code=[urlStr substringFromIndex:from]; 81 // YYLog(@"%@--%@--",urlStr,code); 82 83 //根据code获得一个accessToken 84 [self accessTokenWithCode:code]; 85 86 //禁止加载回调页面,拿到想要的东西就好了。 87 return NO; 88 } 89 return YES; 90 } 91 /** 92 * 根据code获得一个accessToken(发送一个Post请求) 93 * @param code 授权成功后的请求标记 94 */ 95 -(void)accessTokenWithCode:(NSString *)code 96 { 97 //1.获得请求管理者 98 AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; 99 100 //2.封装请求参数101 102 NSMutableDictionary *params=[NSMutableDictionary dictionary];103 params[@"client_id"] =@"1972915028";104 params[@"client_secret"] =@"b255603c4dfd82b4785bf9a808ce2662";105 params[@"grant_type"] =@"authorization_code";106 params[@"code"] =code;107 params[@"redirect_uri"] =@"http://www.cnblogs.com/wendingding/";108 109 //3.发送Post请求110 [mgr POST:@"https://api.weibo.com/oauth2/access_token" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary*responseObject) {111 //隐藏遮罩112 [MBProgressHUD hideHUD];113 114 //3.1存储授权成功的账号信息115 //获取文件夹116 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];117 //获取写入的文件路径118 NSString *filePath=[doc stringByAppendingPathComponent:@"account.plist"];119 //保存信息,把字典数据存储到plist文件中120 [responseObject writeToFile:filePath atomically:YES];121 122 //3.2切换控制器123 UIWindow *window=[UIApplication sharedApplication].keyWindow;124 125 NSString *versionKey=@"CFBundleVersion";126 versionKey=(__bridge NSString *)kCFBundleVersionKey;127 128 //从沙盒中取出上次存储的软件版本号(取出用户上次的使用记录)129 NSUserDefaults *defaults=[[NSUserDefaults alloc]init];130 NSString *lastVersion=[defaults objectForKey:versionKey];131 132 //获得当前打开软件的版本号133 NSString *currentVersion=[NSBundle mainBundle].infoDictionary[versionKey];134 if ([currentVersion isEqualToString:lastVersion]) {//当前版本号==上次使用的版本号135 window.rootViewController=[[YYTabBarViewController alloc]init];136 // self.window.rootViewController=[[YYNewfeatureViewController alloc]init];137 }else{//当前版本号!=上次使用的版本号:显示新版本的特性138 window.rootViewController=[[YYNewfeatureViewController alloc]init];139 //存储这个使用的软件版本140 [defaults setObject:currentVersion forKey:versionKey];141 //立刻写入142 [defaults synchronize];143 }144 YYLog(@"请求成功");145 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {146 //隐藏遮罩147 [MBProgressHUD hideHUD];148 YYLog(@"请求失败");149 }];150 }151 @end
delegate中YYAppDelegate.m文件
1 // 2 // YYAppDelegate.m 3 // 4 5 #import "YYAppDelegate.h" 6 #import "YYTabBarViewController.h" 7 #import "YYNewfeatureViewController.h" 8 #import "YYOAuthViewController.h" 9 10 @implementation YYAppDelegate11 12 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions13 {14 15 //1.创建窗口16 self.window=[[UIWindow alloc]init];17 self.window.frame=[UIScreen mainScreen].bounds;18 19 //获取文件夹20 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];21 //获取写入的文件路径22 NSString *filePath=[doc stringByAppendingPathComponent:@"account.plist"];23 //获取信息,以进行判断24 NSDictionary *account=[NSDictionary dictionaryWithContentsOfFile:filePath];25 26 //2.设置窗口的根控制器27 //如何知道是否是第一次使用这个版本?可以通过比较上次使用的版本进行判断28 if (account) { // 存在成功授权的账号信息29 NSString *versionKey=@"CFBundleVersion";30 versionKey=(__bridge NSString *)kCFBundleVersionKey;31 32 //从沙盒中取出上次存储的软件版本号(取出用户上次的使用记录)33 NSUserDefaults *defaults=[[NSUserDefaults alloc]init];34 NSString *lastVersion=[defaults objectForKey:versionKey];35 36 //获得当前打开软件的版本号37 NSString *currentVersion=[NSBundle mainBundle].infoDictionary[versionKey];38 if ([currentVersion isEqualToString:lastVersion]) {//当前版本号==上次使用的版本号39 self.window.rootViewController=[[YYTabBarViewController alloc]init];40 // self.window.rootViewController=[[YYNewfeatureViewController alloc]init];41 }else{//当前版本号!=上次使用的版本号:显示新版本的特性42 self.window.rootViewController=[[YYNewfeatureViewController alloc]init];43 //存储这个使用的软件版本44 [defaults setObject:currentVersion forKey:versionKey];45 //立刻写入46 [defaults synchronize];47 }48 }else //没有登陆过49 {50 self.window.rootViewController=[[YYOAuthViewController alloc]init];51 }52 //3.显示窗口(主窗口)53 [self.window makeKeyAndVisible];54 return YES;55 }
演示:
登录后,跳转到新特性界面。
退出后,再次运行程序,则直接跳转到tabbar界面。
查看沙盒里的plist文件:
二、补充说明
用户取消对应用的授权
点击删除--》确定,可以取消对相关应用的授权。
取消应用授权之后,重新运行程序,则进入到登录界面,需要重新进行授权。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。