[iOS微博项目 - 3.4] - 获取用户信息

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

 

A.获取用户信息

1.需求

获取用户信息并储存

把用户昵称显示在“首页”界面导航栏的标题上

2.思路

使用微博API

将用户信息封装到HVWUser模型中

把获取的用户名存放到账户信息HVWAccountInfo模型中存储到沙盒

3.实现

 1 //  HVWHomeViewController.m
 2 /** 获取用户信息 */
 3 - (void) setupUserInfo {
 4     // 设置参数
 5     NSMutableDictionary *param = [NSMutableDictionary dictionary];
 6     // 访问令牌
 7     HVWAccountInfo *accountInfo = [HVWAccountInfoTool accountInfo];
 8     param[@"access_token"] = accountInfo.access_token;
 9     // 用户uid
10     param[@"uid"] = accountInfo.uid;
11
12     // 发送请求
13     [HVWNetworkTool get:@"https://api.weibo.com/2/users/show.json" parameters:param success:^(id responseObject) {
14         // 获取用户信息
15         HVWUser *user = [HVWUser objectWithKeyValues:responseObject];
16         HVWAccountInfo *accountInfo = [HVWAccountInfoTool accountInfo];
17         accountInfo.screen_name = user.screen_name;
18         [HVWAccountInfoTool saveAccountInfo:accountInfo];
19
20         // 设置导航栏标题
21         [self.titleButton setTitle:accountInfo.screen_name forState:UIControlStateNormal];
22     } failure:^(NSError *error) {
23         HVWLog(@"获取用户信息失败!error:%@", error);
24     }];
25 }

因为用户数据模型HVWAccountInfo是在HVWAccountInfoTool中使用NSKeyedArchiver和NSKeyedUnarchiver进行文件读写的,所以要设置读写的属性名

 1 //  HVWAccountInfoTool.m
 2 /** 从文件获取accountInfo */
 3 + (HVWAccountInfo *) accountInfo {
 4     HVWAccountInfo *accountInfo = [NSKeyedUnarchiver unarchiveObjectWithData:[NSData dataWithContentsOfFile:accountInfoPath]];
 5
 6     // 需要判断是否过期
 7     NSDate *now = [NSDate date];
 8     if ([now compare:accountInfo.expires_time] != NSOrderedAscending) { // now->expires_data 非升序, 已经过期
 9         accountInfo = nil;
10     }
11
12     return accountInfo;
13 }
14
15 /** 存储accountInfo到文件 */
16 + (void) saveAccountInfo:(HVWAccountInfo *) accountInfo {
17     [NSKeyedArchiver archiveRootObject:accountInfo toFile:accountInfoPath];
18 }
 1 //  HVWAccountInfo.m
 2 #pragma mark - NSCoding
 3 /** 从文件解析对象调用 */
 4 - (id)initWithCoder:(NSCoder *)aDecoder {
 5     if (self = [super init]) {
 6         self.access_token = [aDecoder decodeObjectForKey:@"access_token"];
 7         self.expires_in = [aDecoder decodeObjectForKey:@"expires_in"];
 8         self.expires_time = [aDecoder decodeObjectForKey:@"expires_time"];
 9         self.uid = [aDecoder decodeObjectForKey:@"uid"];
10         self.screen_name = [aDecoder decodeObjectForKey:@"screen_name"];
11     }
12
13     return self;
14 }
15
16 /** 把对象写入文件调用 */
17 - (void)encodeWithCoder:(NSCoder *)aCoder {
18     [aCoder encodeObject:self.access_token forKey:@"access_token"];
19     [aCoder encodeObject:self.expires_in forKey:@"expires_in"];
20     [aCoder encodeObject:self.expires_time forKey:@"expires_time"];
21     [aCoder encodeObject:self.uid forKey:@"uid"];
22     [aCoder encodeObject:self.screen_name forKey:@"screen_name"];
23 }

获取了用户昵称,并放在“首页”界面导航栏的标题按钮之后,还有根据文本长度计算按钮宽度,这里直接改写按钮的setTitle方法

 1 //  HVWNavigationBarTitleButton.m
 2 /** 重写setTitle,根据文本改变宽度 */
 3 - (void)setTitle:(NSString *)title forState:(UIControlState)state {
 4     [super setTitle:title forState:state];
 5
 6     NSDictionary *param = @{NSFontAttributeName: self.titleLabel.font};
 7     CGFloat titleWidth = [title boundingRectWithSize:CGSizeMake(MAXFLOAT, self.height) options:NSStringDrawingUsesLineFragmentOrigin attributes:param context:nil].size.width;
 8
 9     self.width = titleWidth + self.height + 10;
10 }

在“首页”控制器初始化的时候,如果发现沙盒中存储有用户昵称,就设置导航栏标题为用户昵称

 1 //  HVWHomeViewController.m
 2 /** 设置导航栏 */
 3 - (void) setupNavigationBar {
 4     // 添加导航控制器按钮
 5     // 左边按钮
 6     self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithImage:@"navigationbar_friendsearch" hightlightedImage:@"navigationbar_friendsearch_highlighted" target:self selector:@selector(searchFriend)];
 7
 8     // 右边按钮
 9     self.navigationItem.rightBarButtonItem = [UIBarButtonItem itemWithImage:@"navigationbar_pop" hightlightedImage:@"navigationbar_pop_highlighted" target:self selector:@selector(pop)];
10
11     // 设置标题按钮
12     HVWNavigationBarTitleButton *titleButton = [[HVWNavigationBarTitleButton alloc] init];
13     titleButton.height = 35;
14
15     // 保存到成员属性
16     self.titleButton = titleButton;
17
18     // 设置导航栏标题
19     HVWAccountInfo *accountInfo = [HVWAccountInfoTool accountInfo];
20     NSString *navTitle = @"首页";
21     if (accountInfo.screen_name) {
22         navTitle = accountInfo.screen_name;
23     }
24     [titleButton setTitle:navTitle forState:UIControlStateNormal];
25
26     [titleButton setImage:[UIImage imageWithNamed:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
27     // 设置背景图片
28     [titleButton setBackgroundImage:[UIImage resizedImage:@"navigationbar_filter_background_highlighted"] forState:UIControlStateHighlighted];
29
30     // 监听按钮点击事件,替换图标
31     [titleButton addTarget:self action:@selector(titleButtonClickd:) forControlEvents:UIControlEventTouchUpInside];
32
33     self.navigationItem.titleView = titleButton;
34 }
时间: 2024-08-26 08:53:32

[iOS微博项目 - 3.4] - 获取用户信息的相关文章

iOS开发项目篇—34获取用户信息

iOS开发项目篇—34获取用户信息 一.简单说明 需求:获取当前用户的昵称 ,需要获取当前登录用户的个人信息. 查看接口 要求传递的参数 这里要获取的时用户的昵称(所以使用用户id作为参数传入) 二.实现代码 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 5 //设置导航栏内容 6 [self setupNavBar]; 7 8 //集成刷新控件 9 [self setupRefresh]; 10 11 //设置用户的昵称为标题 12 [s

iOS开发项目篇—39获取用户未读的微博信息(信息提醒)

iOS开发项目篇—39获取用户未读的微博信息(信息提醒) 一.简单说明 1.实现效果       2.实现 (1)新建一个类,封装请求 查看新浪官方要求的请求参数 该类中的代码设计 YYUnreadCountParam.h文件 1 // YYUnreadCountParam.h 2 //封装请求参数的类 3 4 #import "YYBaseParam.h" 5 6 @interface YYUnreadCountParam : YYBaseParam 7 /**uid true in

[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微博项目 - 3.6] - 获取未读消息

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

Android之QQ授权登录获取用户信息

有时候我们开发的app须要方便用户简单登录.能够让用户使用自己的qq.微信.微博登录到我们自己开发的app. 今天就在这里总结一下怎样在自己的app中集成QQ授权登录获取用户信息的功能. 首先我们打开腾讯开发平台这个网页,点击---->移动应用---->创建应用,成功创建应用后.能够产生我们须要的App ID和App Key,例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVhcl9odWFuZ3poZW4=/font/5a6

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

iOS开发项目篇—20存储账号信息 一.简单说明 1.不论请求是否成功,都在发送Post请求后,隐藏遮罩. 2.在授权成功后,切换根控制器. (1)说明 切换到控制器有几种情况,要么是切换到新特性,要么是切换到“首页”. 没有必要每次进入程序都需要登录,且每次返回的数据都是一样的,所以只需要把拿到的信息保存到沙盒里就可以了. 判断上次有没有登录成功(把拿到的access_token保存到沙盒中,如果沙盒中有access_token,说明上次登录成功),如果上次登陆成功,那么就判断是否要进入新特性

iOS开发项目篇—19获取授权过的访问标记

iOS开发项目篇—19获取授权过的访问标记 一.简单说明 1.获取授权 2.简单说明 说明: (1)只能使用post请求 (2)post请求的参数有5个,且五个参数都是必须的. (3)新浪会返回一个JSON,转成OC对象为字典,可以通过Key取出ACCESS_TOKEN. 二.实现 1.导入第三方框架 2.使用字典封装请求参数,五个参数都是必须的,就算少一个都是非法请求. 封装代码 1 //2.封装请求参数 2 /* 3 url:https://api.weibo.com/oauth2/acce

[iOS微博项目 - 3.5] - 封装业务

github: https://github.com/hellovoidworld/HVWWeibo   A.封装微博业务 1.需求 把微博相关业务(读取.写微博) 界面控制器不需要知道微博操作细节(例如选择从网络读取还是缓存读取) 2.实现 把微博操作封装成一个工具类 把微博网络请求的参数和返回结果也封装成一个类 3.实现 (1)基础参数类 由于多数请求都需要access_token,所以封装一个参数父类 1 // 2 // HVWBaseParam.h 3 // HVWWeibo 4 //

微信公众号开发之网页授权(获取用户信息)

这次暑假留在学校参与工作室的项目,对微信公众号比较感兴趣,所以参与这方面的学习研究. 昨天完成了关于网页授权,获取用户信息方面的功能,所以乘热打铁,写上一篇.实现本篇涉及的 功能,还需要完成一些基础.在写完这篇博客后,我会尽快补上. -------------------------废话不多说直入正题 需要的工具: 微信公众号(可以申请,但做开发的,可以申请测试号,申请详细不多说了) 服务器(可以自行购买,我使用的是新浪的sae.) 编辑器(随意,不做推荐) 微信公众号开发文档(地址) ----