#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
ios-新浪微博开发-17(授权3)
最新推荐文章于 2015-10-17 19:26:56 发布