ios小项目——新浪微博客户端总结

这个demo很多人下载后说有错误 运行不了什么的 但是又不贴出错误 我怎么知道你哪里出了问题 有很多人都会自己动手去掉错误 为什么有些人就只会在那里说运行不了 这个demo只是一个入门的小练习而已 主要的还是看懂代码在写什么 不是纠结于看不到运行结果 如果还有朋友下载了我的源码后 运行不了 我希望你来这里留言 和我说到底是什么错误 在资源区 我没办法回复 再次谢谢大家的支持.

很多朋友下载完源码后很多修改后没办法运行,我在这里放出一个我这边刚刚运行过的,里面appkey也没改,直接可以运行。源码下载

不好意思。。。我忘记了 因为是我的appkey所以你们还是登录不了,你们要用还是得自己申请appkey并且把回调网址设为baidu。或者是再下面留言,留下你的微博uid我把你加入测试用户。

就像题目说的,这次的小项目是做一个新浪微博的客户端。

平台是Xcode4.2,用storyboard和ARC,因为自己一开始接触ios开发就学的是ios5的,所以就一直都是用storyboard和arc进行开发,对于之前的xib和没有arc的开发,以后会找机会学习,各有各的优缺点吧。storyboard的话,各个场景之间的切换一目了然,可以在一个屏幕上管理所有视图,xib的话,就需要用代码来串接各个视图。但是storyboard帮我们完成了很多工作,使得对于底层的一些运作不是很清晰。相反的,看了一些xib的例子,觉得那些在代码上视图的关系比较清晰,但是没有那么方便咯。

好了,回归正题。

一、OAuth2.0认证篇

要使用新浪微博读取用户的数据,需要先进行OAuth授权,现在新浪主推是OAuth2.0,所以这次的认证,当然也是用新的OAuth机制进行认证。新浪提供给移动应用的认证方式有两种,但是对于我们这种练手的,非商业的用户,其实就只有一种,那就是web认证方式,web认证说明。web认证的URL是https://api.weibo.com/oauth2/authorize需要传的参数有几个。

首先是client_id(申请一个应用后就会有,就是那个appkey)。

还有redirect_uri回调网址,由于我是做客户端,所以这个回调网址,我没设置,传参数的时候,值就都不用写。

第三个是response_type,这个参数很重要,因为我在调用新浪的其他API时,需要access_token,所以在这个这个参数的类型要选择token,这样就可以在返回的数据中找到返回的access_token。

第四个参数是display,设置这个参数为mobile,因为我的是在iphone上运行的,所以这个大小刚好是手机屏幕的大小。

传参的格式,就是在认证的URL后面先加一个'?'然后在传各个参数和值,每个参数之间用'&'隔开,这个看API的说明就知道了。

在程序中,认证的界面是我的第一个界面,显示的时候,像下面这个样子:


就是在UIViewController上面添加一个WebView,然后为这个webView添加一个outlet到这个controller的类中。

在这个类中,我将用来存放获取到的access_token的变量设为静态变量,并且为该类添加了一个类方法来返回access_token,原因待后面解说。

下面是我的viewDidLoad函数中的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    NSString *url = [[NSString alloc]initWithString:OAuthUrl];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
    [self.webView setDelegate:self];
    [self.webView loadRequest:request];
    
}
在代码中可以看到,首先是创建了一个字符串url在里面我放的就是用来进行web认证的url,然后就loadrequest咯,要取回新浪给我的access_token,需要用到webView的delegate中的方法,所以在这里先设置delegate为本类。

大家可以在浏览器中实验一下,用web认证的方式来获取access_token,可以看到在输入完用户的帐号密码之后,新浪会将现在的web重定向到你的redirect_uri中,但是由于我没有设置我的redirect_uri所以会出现一个无法加载的空白页面,但是在该页面的URL中,新浪已经把access_token给了我,我只需要在这个URL中提取就可以了,我的做法hava a little trick.我事先数好了重定向后的URL会在哪个字符后面出现access_token,并且access_token的长度都是一样的,所以我就用NSString的方法来提取。在什么地方来提取呢?当然是在这个重定向之后的网页上提取,当webview进行重定向,并且加载完成时,会调用下面这个函数。

-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *url = webView.request.URL.absoluteString;
    NSRange rang = NSMakeRange(52, 32);
    _access_token = [url substringWithRange:rang];
    //NSLog(@"access_token:%@",_access_token);
    if([_access_token characterAtIndex:1] == '.')
    {    
        //NSLog(@"OK");
        [self.webView setHidden:YES];
        [self performSegueWithIdentifier:@"show" sender:nil];
    }
}
一开始当web认证页面刚出来的时候,也会调用这个函数,所以我需要判断我提取到的东西是不是我要的,利用的就是access_token的第二个字符是一个小数点,在整个URL中,我暂时没发现哪个字段是有小数点的,所以就用这个来进行判断咯。

在获取到access_token之后是 [self performSegueWithIdentifier:@"show" sender:nil];跳转到下一个界面,为了后面的讲解的方便,我先贴出这个程序的storyboard和文件列表的图片。


  • 31
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 100
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 100
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值