您的位置:首页 > 移动开发 > IOS开发

ios-新浪微博开发-17(授权3)

2015-09-18 20:27 405 查看
#import "QHOAuthViewController.h"
#import "AFNetworking.h"

@interface QHOAuthViewController()<UIWebViewDelegate>

@end

@implementation QHOAuthViewController

- (void)viewDidLoad {
[super viewDidLoad];

//1.创建webView
UIWebView *webView = [[UIWebView alloc]init];
webView.frame = self.view.bounds;
[self.view addSubview:webView];
webView.delegate = self;
//2.用webView加载登录页面(新浪提供的) 回调地址不是空!!!默认值是http://
//请求地址:https://api.weibo.com/oauth2/authorize
//请求参数 client_id=438168078&redirect_uri=http://
NSURL *url = [NSURL URLWithString:@"https://api.weibo.com/oauth2/authorize?client_id=438168078&redirect_uri=http://www.baidu.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];

NSLog(@"-----viewDidLoad");

//invalid_request 参数搞错了 或者没有参数
// Do any additional setup after loading the view.
}

#pragma mark -webView代理方法
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSLog(@"-----ViewDidFinishLoad");
}

- (void)webViewDidStartLoad:(UIWebView *)webView
{
NSLog(@"webViewDidStartLoad");
}

//可以拦截所有的URL
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
//1.获得url
NSString *url = request.URL.absoluteString;
//2.判断是否为回调地址
NSRange range = [url rangeOfString:@"code="];
if (range.length != 0) {//是回调地址
//截取code=后面的参数值
NSInteger fromIndex = range.location + range.length;
NSString *code = [url substringFromIndex:fromIndex];
//code 授权成功的标记

//利用code 换取一个accessToken
[self accessTokenWithCode:code];

NSLog(@"%@ %@",code,url);
}

NSLog(@"shouldStartLoadWithRequest -- %@",request.URL.absoluteString);
return YES;
}

/**
*  利用code(授权成功后的请求标记 授权成功后的request token)换取一个accessToken
*
*  @param code 授权成功后的请求标记
*/
- (void)accessTokenWithCode:(NSString *)code
{
/**
*  client_id 	true 	string 	申请应用时分配的AppKey。
client_secret 	true 	string 	申请应用时分配的AppSecret。
grant_type 	true 	string 	请求的类型,填写authorization_code

grant_type为authorization_code时

必选 	类型及范围 	说明
code 	true 	string 	调用authorize获得的code值。
redirect_uri 	true 	string 	回调地址,需需与注册应用里的回调地址一致。
*
*
*/
//1.请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

//    mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
//2拼接请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"client_id"] = @"438168078";
params[@"client_secret"] = @"983ddac0a0dce9ee09161e5f5e04bfd7";
params[@"grant_type"] = @"authorization_code";
params[@"redirect_uri"] = @"http://www.baidu.com";
params[@"code"] = code;

//3.发送请求

[mgr POST:@"https://api.weibo.com/oauth2/access_token" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
QHLog(@"请求成功-%@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
QHLog(@"请求失败-%@",error);
}];

}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: