A.app启动步骤
1.加入了授权步骤之后,最先要判断app内是否已经登陆了账号
2.在程序启动的时候,先检测是否已有登陆账号
AppDelegate:
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     // Override point for customization after application launch.

     // 启动后显示状态栏
     UIApplication *app = [UIApplication sharedApplication];
     app.statusBarHidden = NO;

     // 设置window
     self.window = [[UIWindow alloc] init];
     self.window.frame = [UIScreen mainScreen].bounds;
     [self.window makeKeyAndVisible];

     // 检查是否已有登陆账号
     NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
     NSString *filePath = [docPath stringByAppendingPathComponent:@"accountInfo.plist"];
     NSDictionary *accountInfo = [NSDictionary dictionaryWithContentsOfFile:filePath];

     if (!accountInfo) { // 如果不存在登陆账号,要先进行授权
         self.window.rootViewController = [[HVWOAuthViewController alloc] init];
     } else {
         /** 新版本特性 */
         // app现在的版本
         // 由于使用的时Core Foundation的东西,需要桥接
         NSString *versionKey = (__bridge NSString*) kCFBundleVersionKey;
         NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
         NSString *currentVersion = [infoDic objectForKey:versionKey];

         // 上次使用的版本
         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
         NSString *lastVersion = [defaults stringForKey:versionKey];

         // 如果版本变动了,存储新的版本号并启动新版本特性图
         if (![lastVersion isEqualToString:currentVersion]) {

             // 存储
             [defaults setObject:currentVersion forKey:versionKey];
             [defaults synchronize];

             // 开启app显示新特性
             HVWNewFeatureViewController *newFeatureVC = [[HVWNewFeatureViewController alloc] init];
             self.window.rootViewController = newFeatureVC;
         } else {
             // 创建根控制器
             HVWTabBarViewController *tabVC = [[HVWTabBarViewController alloc] init];
             self.window.rootViewController = tabVC;
         }
     }

     return YES;
 }
 
在授权控制器,授权完毕之后也要继续进入app:
 //  HVWOAuthViewController.m
 /** 根据access_code获取access_token */
 - (void) accessTokenWithAccessCode:(NSString *) accessCode {
     // 创建AFN的http操作请求管理者
     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

     // 参数设置
     NSMutableDictionary *param = [NSMutableDictionary dictionary];
     param[";
     param[@"client_secret"] = @"cc577953b2aa3aa8ea220fd15775ea35";
     param[@"grant_type"] = @"authorization_code";
     param[@"code"] = accessCode;
     param[@"redirect_uri"] = @"http://www.cnblogs.com/hellovoidworld/";

     // 发送请求
     [manager POST:@"https://api.weibo.com/oauth2/access_token" parameters:param success:^(AFHTTPRequestOperation *operation, NSDictionary *accountInfo) {
         [MBProgressHUD hideHUD];

         // 返回的是用户信息字典
         // 存储用户信息,包括access_token到沙盒中
         NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
         NSString *filePath = [docPath stringByAppendingPathComponent:@"accountInfo.plist"];
         [accountInfo writeToFile:filePath atomically:YES];

         /** 新版本特性 */
         // app现在的版本
         // 由于使用的时Core Foundation的东西,需要桥接
         NSString *versionKey = (__bridge NSString*) kCFBundleVersionKey;
         NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
         NSString *currentVersion = [infoDic objectForKey:versionKey];

         // 上次使用的版本
         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
         NSString *lastVersion = [defaults stringForKey:versionKey];

         UIWindow *window = [UIApplication sharedApplication].keyWindow;

         // 如果版本变动了,存储新的版本号并启动新版本特性图
         if (![lastVersion isEqualToString:currentVersion]) {
             // 存储
             [defaults setObject:currentVersion forKey:versionKey];
             [defaults synchronize];

             // 开启app显示新特性
             HVWNewFeatureViewController *newFeatureVC = [[HVWNewFeatureViewController alloc] init];
             window.rootViewController = newFeatureVC;
         } else {
             // 创建根控制器
             HVWTabBarViewController *tabVC = [[HVWTabBarViewController alloc] init];
             window.rootViewController = tabVC;
         }

     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         [MBProgressHUD hideHUD];
         HVWLog(@"请求access_token失败 ----> %@", error);
     }];

 }
第一次启动:
需要授权+新特性显示
 

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

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

    github: https://github.com/hellovoidworld/HVWWeibo   A.下拉刷新微博 1.需求 在“首页”界面,下拉到一定距离的时候刷新微博数据 刷新数据的时候使 ...

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

    github: https://github.com/hellovoidworld/HVWWeibo   A.封装授权业务 1.把app的授权信息移动到HVWWeibo-Prefix.pch中作为公共 ...

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

    github: https://github.com/hellovoidworld/HVWWeibo   A.用户取消对app的授权 用户可以在微博网站上取消对某个应用(app)的授权   1.打开& ...

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

    github: https://github.com/hellovoidworld/HVWWeibo   A.发送授权请求 1.使用UIWebView加载请求页面 自定义一个继承UIViewContr ...

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

    github: https://github.com/hellovoidworld/HVWWeibo   A.新浪获取微博API 1.读取微博API     2.“statuses/home_time ...

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

    A.概念      OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用 ...

  7. [iOS微博项目 - 1.7] - 版本新特性

    A.版本新特性 1.需求 第一次使用新版本的时候,不直接进入app,而是展示新特性界面 github: https://github.com/hellovoidworld/HVWWeibo       ...

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

    A.搭建基本环境   github: https://github.com/hellovoidworld/HVWWeibo   项目结构:   1.使用代码构建UI,不使用storyboard     ...

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

    github: https://github.com/hellovoidworld/HVWWeibo A.自定义微博cell基本结构 1.需求 创建自定义cell的雏形 cell包含:内容.工具条 内 ...

随机推荐

  1. VNC SERVER配置

    vnc的配置网上有很多 普通用户的配置没有怎么写 根据下面这个说法 https://www.digitalocean.com/community/tutorials/how-to-install-an ...

  2. Struts2笔记——初次框架配置

    1.Struts2简介   Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与S ...

  3. hibernate-mapping的各种属性配置

    先给出一份常见的持久化类配置文件大概熟悉一下 <strong><spanstyle="font-size: 18px;"><hibernate-map ...

  4. ViewPager禁止滑动以及它与内层滑动控件水平方向上事件冲突的解决方法

    一.上图 二.场景描写叙述 最近在做项目的时候.遇到一个怪异的需求,描写叙述例如以下: 1.ViewPager中嵌套3个View,当从View1滑动到View2时禁止ViewPager的滑动事件. 2 ...

  5. Linux目录结构和常用命令

    源地址:http://www.cnblogs.com/JCSU/articles/2770249.html 一.Linux目录结构 你想知道为什么某些程序位于/bin下,或者/sbin,或者/usr/ ...

  6. 不停的实例化对象导致OOM

    使用axis调用webService,系统运行一段时间后,出现了 OOM,还好日志中 记下了错误信息. Exception in thread "Thread-1301" java ...

  7. RMQ-ST算法的理解与实现(C++)

    RMQ-ST的含义 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返 ...

  8. 使用cobbler批量安装操作系统(基于Centos7.x )

    1.1 cobbler简介 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等. Cobbler可以使 ...

  9. 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法

    . 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定 ...

  10. Java技术栈思维导图

    Java技术栈思维导图 Java IO流体系 设计模式