[iOS微博项目 - 2.4] - 重新安排app启动步骤

github: https://github.com/hellovoidworld/HVWWeibo

 

A.app启动步骤

1.加入了授权步骤之后,最先要判断app内是否已经登陆了账号

2.在程序启动的时候,先检测是否已有登陆账号

AppDelegate:

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 2     // Override point for customization after application launch.
 3
 4     // 启动后显示状态栏
 5     UIApplication *app = [UIApplication sharedApplication];
 6     app.statusBarHidden = NO;
 7
 8     // 设置window
 9     self.window = [[UIWindow alloc] init];
10     self.window.frame = [UIScreen mainScreen].bounds;
11     [self.window makeKeyAndVisible];
12
13     // 检查是否已有登陆账号
14     NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
15     NSString *filePath = [docPath stringByAppendingPathComponent:@"accountInfo.plist"];
16     NSDictionary *accountInfo = [NSDictionary dictionaryWithContentsOfFile:filePath];
17
18     if (!accountInfo) { // 如果不存在登陆账号,要先进行授权
19         self.window.rootViewController = [[HVWOAuthViewController alloc] init];
20     } else {
21         /** 新版本特性 */
22         // app现在的版本
23         // 由于使用的时Core Foundation的东西,需要桥接
24         NSString *versionKey = (__bridge NSString*) kCFBundleVersionKey;
25         NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
26         NSString *currentVersion = [infoDic objectForKey:versionKey];
27
28         // 上次使用的版本
29         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
30         NSString *lastVersion = [defaults stringForKey:versionKey];
31
32         // 如果版本变动了,存储新的版本号并启动新版本特性图
33         if (![lastVersion isEqualToString:currentVersion]) {
34
35             // 存储
36             [defaults setObject:currentVersion forKey:versionKey];
37             [defaults synchronize];
38
39             // 开启app显示新特性
40             HVWNewFeatureViewController *newFeatureVC = [[HVWNewFeatureViewController alloc] init];
41             self.window.rootViewController = newFeatureVC;
42         } else {
43             // 创建根控制器
44             HVWTabBarViewController *tabVC = [[HVWTabBarViewController alloc] init];
45             self.window.rootViewController = tabVC;
46         }
47     }
48
49     return YES;
50 }

在授权控制器,授权完毕之后也要继续进入app:

 1 //  HVWOAuthViewController.m
 2 /** 根据access_code获取access_token */
 3 - (void) accessTokenWithAccessCode:(NSString *) accessCode {
 4     // 创建AFN的http操作请求管理者
 5     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
 6
 7     // 参数设置
 8     NSMutableDictionary *param = [NSMutableDictionary dictionary];
 9     param[@"client_id"] = @"3942775926";
10     param[@"client_secret"] = @"cc577953b2aa3aa8ea220fd15775ea35";
11     param[@"grant_type"] = @"authorization_code";
12     param[@"code"] = accessCode;
13     param[@"redirect_uri"] = @"http://www.cnblogs.com/hellovoidworld/";
14
15     // 发送请求
16     [manager POST:@"https://api.weibo.com/oauth2/access_token" parameters:param success:^(AFHTTPRequestOperation *operation, NSDictionary *accountInfo) {
17         [MBProgressHUD hideHUD];
18
19         // 返回的是用户信息字典
20         // 存储用户信息,包括access_token到沙盒中
21         NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
22         NSString *filePath = [docPath stringByAppendingPathComponent:@"accountInfo.plist"];
23         [accountInfo writeToFile:filePath atomically:YES];
24
25         /** 新版本特性 */
26         // app现在的版本
27         // 由于使用的时Core Foundation的东西,需要桥接
28         NSString *versionKey = (__bridge NSString*) kCFBundleVersionKey;
29         NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
30         NSString *currentVersion = [infoDic objectForKey:versionKey];
31
32         // 上次使用的版本
33         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
34         NSString *lastVersion = [defaults stringForKey:versionKey];
35
36         UIWindow *window = [UIApplication sharedApplication].keyWindow;
37
38         // 如果版本变动了,存储新的版本号并启动新版本特性图
39         if (![lastVersion isEqualToString:currentVersion]) {
40             // 存储
41             [defaults setObject:currentVersion forKey:versionKey];
42             [defaults synchronize];
43
44             // 开启app显示新特性
45             HVWNewFeatureViewController *newFeatureVC = [[HVWNewFeatureViewController alloc] init];
46             window.rootViewController = newFeatureVC;
47         } else {
48             // 创建根控制器
49             HVWTabBarViewController *tabVC = [[HVWTabBarViewController alloc] init];
50             window.rootViewController = tabVC;
51         }
52
53     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
54         [MBProgressHUD hideHUD];
55         HVWLog(@"请求access_token失败 ----> %@", error);
56     }];
57
58 }

第一次启动:

需要授权+新特性显示

时间: 2024-10-11 04:07:33

[iOS微博项目 - 2.4] - 重新安排app启动步骤的相关文章

[iOS微博项目 - 3.0] - 手动刷新微博

github: https://github.com/hellovoidworld/HVWWeibo A.下拉刷新微博 1.需求 在“首页”界面,下拉到一定距离的时候刷新微博数据 刷新数据的时候使用控件提示 新数据要加在旧数据的前面 刷新完毕隐藏刷新控件 刷新数据完毕,导航栏下方弹出一个提示框,提示刷新微博数量 2.思路 直接使用系统自带的UIRefreshControl就可以做出动画效果 使用微博的获取微博API参数since_id可以控制加载的微博从哪个id开始 使用可变数组来拼接新旧微博数

[iOS微博项目 - 2.5] - 封装授权和用户信息读写业务

github: https://github.com/hellovoidworld/HVWWeibo   A.封装授权业务 1.把app的授权信息移动到HVWWeibo-Prefix.pch中作为公共宏 1 // 授权信息 2 #define HVWAppKey @"3942775926"; 3 #define HVWAppSecret @"cc577953b2aa3aa8ea220fd15775ea35" 4 #define HVWGrantType @"

[iOS微博项目 - 2.3] - 用户取消对app的授权

github: https://github.com/hellovoidworld/HVWWeibo   A.用户取消对app的授权 用户可以在微博网站上取消对某个应用(app)的授权 1.打开"我的应用" 2.删除掉要取消授权的app 这样下次登陆会要求重新授权

[iOS微博项目 - 2.2] - 在app中获取授权

github: https://github.com/hellovoidworld/HVWWeibo   A.发送授权请求 1.使用UIWebView加载请求页面 自定义一个继承UIViewController的HVWOAuthViewController 1 // 2 // HVWOAuthViewController.m 3 // HVWWeibo 4 // 5 // Created by hellovoidworld on 15/2/4. 6 // Copyright (c) 2015年

[iOS微博项目 - 1.0] - 搭建基本框架

A.搭建基本环境 github: https://github.com/hellovoidworld/HVWWeibo 项目结构: 1.使用代码构建UI,不使用storyboard AppDelegate: 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 2 // Override point for customiza

[iOS微博项目 - 3.6] - 获取未读消息

github: https://github.com/hellovoidworld/HVWWeibo   A.获取登陆用户未读消息 1.需求 获取所有未读消息,包括新微博.私信.@.转发.关注等 把未读消息数显示在相应的tabItem上 把总的未读消息数显示在app图标上 当app进入后台,仍然需要刷新未读消息数量数据 读取了未读消息之后清空计数 监听tabBarItem的点击,刷新数据(例如重复点击"首页"要刷新微博) 2.思路 使用微博提醒API获取未读消息 使用定时器定时获取 在

[iOS微博项目 - 2.0] - OAuth授权3步

A.概念 OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的.oAuth是Open Authorization的简写. B.使用3步骤 OAUTH认证授权就三个步骤,三句话可以概括: 1. 获取未授权的Request Token 2. 获取用户授权的Request Token 3. 用授权的Requ

[iOS微博项目 - 2.6] - 获取微博数据

github: https://github.com/hellovoidworld/HVWWeibo   A.新浪获取微博API 1.读取微博API 2.“statuses/home_timeline”接口 B.在app中获取微博数据 1.在“首页”控制器发送请求,获取json数据 1 /** 加载微博数据 */ 2 - (void) loadWeiboData { 3 // 创建AFNetworking的http操作中管理器 4 AFHTTPRequestOperationManager *m

[iOS微博项目 - 4.0] - 自定义微博cell

github: https://github.com/hellovoidworld/HVWWeibo A.自定义微博cell基本结构 1.需求 创建自定义cell的雏形 cell包含:内容.工具条 内容包含:原创内容.转发内容 2.思路 使用分层控件,逐层实现 分离model和view model:数据模型.frame模型 view:就是控件本身 frame模型:包含数据模型和子控件frame 根据数据模型来决定子控件是否显示(例如转发内容) cell的view设计雏形: 控件的成员属性层次: