码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发项目篇—20存储账号信息

时间:2014-07-14 10:12:42      阅读:335      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   strong   

iOS开发项目篇—20存储账号信息

一、简单说明

1.不论请求是否成功,都在发送Post请求后,隐藏遮罩。
2.在授权成功后,切换根控制器。
(1)说明
切换到控制器有几种情况,要么是切换到新特性,要么是切换到“首页”。
没有必要每次进入程序都需要登录,且每次返回的数据都是一样的,所以只需要把拿到的信息保存到沙盒里就可以了。
判断上次有没有登录成功(把拿到的access_token保存到沙盒中,如果沙盒中有access_token,说明上次登录成功),如果上次登陆成功,那么就判断是否要进入新特性。如果上次没有登陆成功,那么就跳转到登陆界面。
(2)图示
 bubuko.com,布布扣
(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 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 }
演示:
登录后,跳转到新特性界面。
bubuko.com,布布扣    bubuko.com,布布扣
退出后,再次运行程序,则直接跳转到tabbar界面。
bubuko.com,布布扣
查看沙盒里的plist文件:
bubuko.com,布布扣
二、补充说明
  用户取消对应用的授权
bubuko.com,布布扣
 
点击删除--》确定,可以取消对相关应用的授权。
 
bubuko.com,布布扣
取消应用授权之后,重新运行程序,则进入到登录界面,需要重新进行授权。

iOS开发项目篇—20存储账号信息,布布扣,bubuko.com

iOS开发项目篇—20存储账号信息

标签:style   blog   http   color   使用   strong   

原文地址:http://www.cnblogs.com/wendingding/p/3837471.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!