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

来源:互联网 发布:怎么用vc6.0编写c语言 编辑:程序博客网 时间:2024/05/09 14:02
#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

0 0