首页 > 代码库 > iOS开发项目篇—18截取授权成功的请求标记
iOS开发项目篇—18截取授权成功的请求标记
iOS开发项目篇—18截取授权成功的请求标记
一、步骤和说明
新建一个授权分组,创建一个自定义的授权控制器。
把window的根控制器设置为授权控制器,以测试。
自定义控制器代码:
1 // 2 // YYOAuthViewController.m 3 // 4 5 #import "YYOAuthViewController.h" 6 7 @interface YYOAuthViewController () 8 9 @end10 11 @implementation YYOAuthViewController12 13 - (void)viewDidLoad14 {15 [super viewDidLoad];16 17 //1.创建UIWebView18 UIWebView *webView=[[UIWebView alloc]init];19 webView.frame=self.view.bounds;20 [self.view addSubview:webView];21 22 //2.加载登陆界面23 NSURL *url=[NSURL URLWithString:@"https://api.weibo.com/oauth2/authorize?client_id=1972915028&redirect_uri=http://www.cnblogs.com/wendingding/"];24 NSURLRequest *request=[[NSURLRequest alloc]initWithURL:url];25 [webView loadRequest:request];26 }27 28 29 @end
YYAppDelegate.m文件代码:
1 #import "YYAppDelegate.h" 2 #import "YYTabBarViewController.h" 3 #import "YYNewfeatureViewController.h" 4 #import "YYOAuthViewController.h" 5 6 @implementation YYAppDelegate 7 8 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 9 {10 11 //1.创建窗口12 self.window=[[UIWindow alloc]init];13 self.window.frame=[UIScreen mainScreen].bounds;14 15 //2.设置窗口的根控制器16 17 self.window.rootViewController=[[YYOAuthViewController alloc]init];18 //3.显示窗口(主窗口)19 [self.window makeKeyAndVisible];20 return YES;21 }
模拟器运行:三个过程(显示登陆窗口,登陆,授权)
二、获取授权成功的请求标记
方法:设置代理,拦截发送的网络请求
代码:
1 #pragma mark-UIWebViewDelegate 2 /** 3 * UIWebView每当发送一个请求之前,都会先调用这个代理方法(询问代理允不允许加载这个请求) 4 * @param request 即将发送的请求 5 * @return YES允许加载,NO不允许加载 6 */ 7 -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 8 { 9 //1.获得请求地址10 NSString *urlStr=request.URL.absoluteString;11 NSLog(@"%@",urlStr);12 13 //2.判断url是否为回调地址14 /*15 https://api.weibo.com/oauth2/authorize?client_id=1972915028&redirect_uri=http://www.cnblogs.com/wendingding/16 https://api.weibo.com/oauth2/authorize17 https://api.weibo.com/oauth2/authorize#18 19 https://api.weibo.com/oauth2/authorize20 range.location==(-1)NSNoFound21 range.length==022 http://www.cnblogs.com/wendingding/?code=c3dca3b51ab954bac42ebdb253661e4d23 range.location==024 range.length>025 */26 //urlStr在字符串中的范围27 //设置从等号位置开始,不用再额外的找位置28 NSRange range=[urlStr rangeOfString:@"http://www.cnblogs.com/wendingding/?code="];29 //判断是否为回调地址30 if (range.location!=NSNotFound) {//是回调地址31 //截取授权成功后的请求标记32 int from=range.location+range.length;33 NSString *code=[urlStr substringFromIndex:from];34 YYLog(@"%@--%@--",urlStr,code);35 }36 return YES;37 }
打印查看:
获取请求标记代码:
YYOAuthViewController.m文件如下
1 // 2 // YYOAuthViewController.m 3 // 4 5 #import "YYOAuthViewController.h" 6 #import "MBProgressHUD+MJ.h" 7 8 @interface YYOAuthViewController ()<UIWebViewDelegate> 9 10 @end 11 12 @implementation YYOAuthViewController 13 14 - (void)viewDidLoad 15 { 16 [super viewDidLoad]; 17 18 //1.创建UIWebView 19 UIWebView *webView=[[UIWebView alloc]init]; 20 webView.frame=self.view.bounds; 21 [self.view addSubview:webView]; 22 23 24 //2.加载登陆界面 25 NSURL *url=[NSURL URLWithString:@"https://api.weibo.com/oauth2/authorize?client_id=1972915028&redirect_uri=http://www.cnblogs.com/wendingding/"]; 26 NSURLRequest *request=[[NSURLRequest alloc]initWithURL:url]; 27 [webView loadRequest:request]; 28 29 //3.设置代理 30 webView.delegate=self; 31 } 32 33 #pragma mark-UIWebViewDelegate 34 /** 35 * UIWebView开始加载资源的时候调用(开始发送请求) 36 */ 37 -(void)webViewDidStartLoad:(UIWebView *)webView 38 { 39 [MBProgressHUD showMessage:@"正在努力加载中···"]; 40 } 41 42 /** 43 * UIWebView加载完毕的时候调用(请求结束) 44 */ 45 -(void)webViewDidFinishLoad:(UIWebView *)webView 46 { 47 [MBProgressHUD hideHUD]; 48 } 49 50 /** 51 * UIWebView加载失败的时候调用(请求失败) 52 */ 53 -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 54 { 55 [MBProgressHUD hideHUD]; 56 } 57 58 /** 59 * UIWebView每当发送一个请求之前,都会先调用这个代理方法(询问代理允不允许加载这个请求) 60 * @param request 即将发送的请求 61 * @return YES允许加载,NO不允许加载 62 */ 63 -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 64 { 65 //1.获得请求地址 66 NSString *urlStr=request.URL.absoluteString; 67 NSLog(@"%@",urlStr); 68 69 //2.判断url是否为回调地址 70 /* 71 https://api.weibo.com/oauth2/authorize?client_id=1972915028&redirect_uri=http://www.cnblogs.com/wendingding/ 72 https://api.weibo.com/oauth2/authorize 73 https://api.weibo.com/oauth2/authorize# 74 75 https://api.weibo.com/oauth2/authorize 76 range.location==(-1)NSNoFound 77 range.length==0 78 http://www.cnblogs.com/wendingding/?code=c3dca3b51ab954bac42ebdb253661e4d 79 range.location==0 80 range.length>0 81 */ 82 //urlStr在字符串中的范围 83 //设置从等号位置开始,不用再额外的找位置 84 NSRange range=[urlStr rangeOfString:@"http://www.cnblogs.com/wendingding/?code="]; 85 //判断是否为回调地址 86 if (range.location!=NSNotFound) {//是回调地址 87 //截取授权成功后的请求标记 88 int from=range.location+range.length; 89 NSString *code=[urlStr substringFromIndex:from]; 90 YYLog(@"%@--%@--",urlStr,code); 91 92 //根据code获得一个accessToken 93 [self accessTokenWithCode:code]; 94 95 //禁止加载回调页面,拿到想要的东西就好了。 96 return NO; 97 } 98 return YES; 99 }100 /**101 * 根据code获得一个accessToken102 * @param code 授权成功后的请求标记103 */104 -(void)accessTokenWithCode:(NSString *)code105 {106 //处理操作....107 }108 @end
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。