标签:style blog http color 使用 strong
iOS开发项目篇—20存储账号信息
一、简单说明
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 YYAppDelegate 11 12 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 13 { 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 }
iOS开发项目篇—20存储账号信息,布布扣,bubuko.com
标签:style blog http color 使用 strong
原文地址:http://www.cnblogs.com/wendingding/p/3837471.html