微博授权登录

一.准备-申请应用

1.进入开放平台
https://open.weibo.com

微博授权登录_第1张图片

微博授权登录_第2张图片

2.注册用户

微博授权登录_第3张图片

3.创建应用

微博授权登录_第4张图片

4.得到相关信息

微博授权登录_第5张图片

微博授权登录_第6张图片

微博授权登录_第7张图片

授权示意图

微博授权登录_第8张图片

二.请求用户授权Token

微博授权登录_第9张图片

微博授权登录_第10张图片

可以得到请求url:https://api.weibo.com/oauth2/authorize?client_id=906176560&redirect_uri=http://baidu.com

三.获取授权过的Access Token

微博授权登录_第11张图片

微博授权登录_第12张图片

可以得到请求url:https://api.weibo.com/oauth2/access_token

四.代码

iOS的info.plist文件配置

1.先在Main.storyboard中简单的搭建

微博授权登录_第13张图片

2.加载授权页面

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //拼接新浪的登录授权的页面的url
    NSString *urlString = @"https://api.weibo.com/oauth2/authorize?client_id=906176560&redirect_uri=http://baidu.com";
    
    //创建url
    NSURL *url = [NSURL URLWithString:urlString];
    
    //创建request
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    //创建页面
    WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
    self.webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];
    _webView.navigationDelegate = self;
    [self.view addSubview:_webView];
    
    //加载页面
    [self.webView loadRequest:request];
}

3.即将加载某个页面之前,会先来调用decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler这个方法,判断url是否有code,有的话用code换Access Token

//即将加载某个页面之前 会先来调用这个方法
//决定这个页面是否可以被加载
-(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
    
    NSLog(@"即将加载的页面:%@",navigationAction.request.URL);
    
    //将页面的url转化成NSString
    NSString *urlString = navigationAction.request.URL.absoluteString;
    
    //判断这个字符串里面是否包含了code=
    if ([urlString containsString:@"code="]) {
        
        //授权成功 有code的url
        decisionHandler(WKNavigationActionPolicyCancel);
        
        //解析code=后面的内容
        NSString *code = [[urlString componentsSeparatedByString:@"code="] lastObject];
        NSLog(@"%@",code);
        
        //使用code获取授权的AccessToken
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        //设置接受的类型
        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html", @"text/json", @"text/javascript",@"text/plain",@"image/gif", nil];
        
        //post请求路径
        NSString *urlString = @"https://api.weibo.com/oauth2/access_token";
        
        //传递的参数
        NSDictionary *param = @{@"client_id":@"906176560",@"client_secret":@"2ad9489b9adc9b07a89b70f1b3012d3a",@"grant_type":@"authorization_code",@"code":code,@"redirect_uri":@"http://baidu.com"};
        
        //发起Post请求 ,获取授权用户的Access Token
        [manager POST:urlString parameters:param progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            [self dismissViewControllerAnimated:YES completion:nil];
            
            NSLog(@"%@",responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
            [self dismissViewControllerAnimated:YES completion:nil];
            
            NSLog(@"%@",error);
        }];
        
    }else{
        
        //还没有授权成功
        decisionHandler(WKNavigationActionPolicyAllow);
    }
}

五.运行结果


微博授权登录_第14张图片

demo链接
https://pan.baidu.com/s/1xXNPu8OnOkrfhFVzHa9zcA
密码:ggbx

你可能感兴趣的:(微博授权登录)