QAuth2认证 -- ( 不使用友盟等 )自己实现第三方登录(UIWebView)、微博分享、等其他操作


主要查看开发者平台上得文档,这里举个简单的例子


QAuth2认证,分为两步:

1:第一步:获得请求token;

2:第二步:获得授权token;


//注:更多相关方面的内容,可以到相应的开发者平台上查看文档。


这里使用sina为例,其他的都一样,可以到其他开发者平台注册开发者账号,获取appKay,查看响应的文档即可。


#import "LoginViewController.h"
#import "ASIFormDataRequest.h"

@interface LoginViewController ()<UIWebViewDelegate, ASIHTTPRequestDelegate>{
    UIWebView* _webView;
}

@end

@implementation LoginViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    _webView.delegate = self;
    [self.view addSubview:_webView];
    [_webView release];
    
    //请求token的url
    NSString* url = @"https://api.weibo.com/oauth2/authorize?client_id=1412145014&redirect_uri=http://www.baidu.com";
    NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
    [_webView loadRequest:request];
}

#pragma mark -- 实现UIWebViewDelegate

//当webView  每次加载页面时,即会调用此方法,其中 request.URL.absoluteString 是加载地址
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    NSArray* array = [request.URL.absoluteString componentsSeparatedByString:@"?code="];
    if (array.count == 2) {
        //取出请求token
        NSString* token = array[1];
        
        //发起请求,获取访问token
        ASIFormDataRequest* request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"https://api.weibo.com/oauth2/access_token"]];
        request.delegate = self;
        //设置参数
        //app key
        [request setPostValue:@"1412145014" forKey:@"client_id"];
        //app secret
        [request setPostValue:@"268b02d5456a899280382fc80c011884" forKey:@"client_secret"];
        [request setPostValue:@"authorization_code" forKey:@"grant_type"];
        //code
        [request setPostValue:token forKey:@"code"];
        //redirect_uri
        [request setPostValue:@"http://www.baidu.com" forKey:@"redirect_uri"];
        //发起请求
        [request startAsynchronous];
        
        return NO;
    }
    
    return YES;
}

- (void)requestFinished:(ASIHTTPRequest *)request{
    NSLog(@"%@", request.responseString);
    NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:request.responseData options:0 error:nil];
    //把access_token 存到本地
    NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:dic[@"access_token"] forKey:@"token"];
    [userDefaults setObject:dic[@"uid"] forKey:@"uid"];
    [userDefaults synchronize];
    
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)requestFailed:(ASIHTTPRequest *)request{
    NSLog(@"请求访问token失败");
}



@end




你可能感兴趣的:(QAuth2认证 -- ( 不使用友盟等 )自己实现第三方登录(UIWebView)、微博分享、等其他操作)