新浪微博Oauth认证

 实现新浪微博Oauth认证

ViewController.h代码实现如下:

@interface ViewController : UIViewController<UIWebViewDelegate>
@property (strong, nonatomic)  UIWebView *OauthWebView;
@end


ViewController.m文件实现如下:

- (void)viewDidLoad
{
    [super viewDidLoad];
                                                                                                                                                                                                                                   
    self.OauthWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 548)];
    [self.view addSubview:self.OauthWebView];
    //将API放入字符串中
    NSString* urlStr = @"https://api.weibo.com/oauth2/authorize?client_id=3145625561&redirect_uri=http://www.baidu.com&display=mobile";
                                                                                                                                                                                                                                     
    //将字符串转化为URL
    NSURL* url = [NSURL URLWithString:urlStr];
                                                                                                                                                                                                                                     
    //创建请求对象
    NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url];
    self.OauthWebView.delegate = self;
    [self.OauthWebView loadRequest:request];
                                                                                                                                                                                                                                     
}

这时能够出现新浪微博的登陆界面:


我们现在已经能够调用Oauth认证页面了。接下来我们要获取code值。要用UIWebViewDelegate的代理方法


代码实现如下:


- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
                                                                               
    NSURL* resultStr = [request URL];
    NSString* tempStr = [resultStr absoluteString];
    NSLog(@"%@",resultStr);
    //判断字符串中是否包含code=
    NSRange range =  [tempStr rangeOfString:@"code="];
    //如果不包含会返回为真,因此此处取反,就是说不为空的时候会为假,取反之后为真
    if ( !(range.location == NSNotFound)) {
        //absoluteString作用是将NSURL类型转化为NSString
        NSString* tempStr = [resultStr absoluteString];
        //componentsSeparatedByString
        NSArray* codeArr =  [tempStr componentsSeparatedByString:@"="];
                                                                                   
                                                                                   
        NSLog(@"%@",codeArr);
        NSString* code = [codeArr objectAtIndex:1];
        NSLog(@"%@",code);
        //之后在此处下一行添加调用获取access_token值的方法即httpRequest:(NSString*)codeStr
    }
    return true;
}

这时,我们就能够拿到code值,这个code值有什么用呢?就看新浪微博的api吧!

之后,我们要完成OAuth认证的最后一步,拿到access_token的值

在实现这个功能之前我们要导入ASIHTTP这个第三方库,怎么导入呢??自己百度吧  一搜一大把。



代码实现如下:

//获取access_token值的方法
-(void)httpRequest:(NSString*)codeStr
{
    //3145625561       0a61cc8a017fa8ba6c98532fefa3c29c
    //http://www.baidu.com     https://api.weibo.com/oauth2/access_token
                                                                     
                                                                     
    NSURL* urlStr = [[NSURL alloc] initWithString:@"https://api.weibo.com/oauth2/access_token"];
                                                                     
                                                                     
    //post请求时要用ASIFormDataRequest类的对象
    //我们要用到__block 就要先用__block来声明并且用到了ARC为了防止内存泄露
    __block ASIFormDataRequest* requestBlock = [[ASIFormDataRequest alloc] initWithURL:urlStr] ;
    //就需要如下这种写法
    __weak  ASIFormDataRequest* request = requestBlock;
                                                                     
                                                                     
    //POST请求放参数的方法
                                                                    
                                                                     
                                                                     
    [request setPostValue:@"3145625561" forKey:@"client_id"];
    [request setPostValue:@"0a61cc8a017fa8ba6c98532fefa3c29c" forKey:@"client_secret"];
    [request setPostValue:@"authorization_code" forKey:@"grant_type"];
                                                                     
    [request setPostValue:codeStr forKey:@"code"];
    [request setPostValue:@"http://www.baidu.com" forKey:@"redirect_uri"];
                                                                     
    //设置代理
    request.delegate = self;
    //startAsynchronous为异步请求
    [request startAsynchronous];
                                                                     
    [request setCompletionBlock:^{
         NSLog(@"%@",[request responseString]);
        NSData* data = [request responseData];
        NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
        NSString* access_tokenString = [dic objectForKey:@"access_token"];
        NSLog(@"%@",access_tokenString);
    }];
                                                                     
}

要记得在

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType


方法中添加   httpRequest方法的调用

这样我们就能够拿到access_token的值了。

OAuth认证到此完成简单吧!!

代码下载地址: "SinaOAuth认证.zip" http://vdisk.weibo.com/s/HrDOj


http://pan.baidu.com/share/link?shareid=3756342609&uk=3189484501


本文出自 “7087095” 博客,请务必保留此出处http://7097095.blog.51cto.com/7087095/1226843

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜甲同学

感谢打赏,我会继续努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值