标签:
@interface SZMOAuthViewCtrl ()<UIWebViewDelegate> @end @implementation SZMOAuthViewCtrl - (void)viewDidLoad { [super viewDidLoad]; //1.创建一个webview UIWebView *webView = [[UIWebView alloc]init]; webView.delegate = self; webView.frame = self.view.bounds; [self.view addSubview:webView]; //2.用webView加载登录页面(新浪提供的) NSURL *url = [NSURL URLWithString:@"https://api.weibo.com/oauth2/authorize?client_id=2363498717&redirect_uri=http://"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [webView loadRequest:request]; } #pragma mark webView代理方法 -(void)webViewDidFinishLoad:(UIWebView *)webView{ [MBProgressHUD hideHUD]; } -(void)webViewDidStartLoad:(UIWebView *)webView{ [MBProgressHUD showMessage:@"正在加载"]; } -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{ [MBProgressHUD hideHUD]; } -(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.length + range.location; NSString *code = [url substringFromIndex:fromIndex]; //利用code换取一个accessToken [self accessTokenWithcode:code]; //禁止加载回调地址 return NO; } return YES; } //利用code(授权成功后的request Token)换取一个accessToken - (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 = [AFJSONResponseSerializer serializer]; //2.拼接参数 NSMutableDictionary *params = [NSMutableDictionary dictionary]; params[@"client_id"] = @"2363498717"; params[@"client_secret"] = @"2a388124d48d6d52f9b166b4d135e942"; params[@"grant_type"] = @"authorization_code"; params[@"code"] = code; params[@"redirect_uri"] = @"http://"; [mgr POST:@"https://api.weibo.com/oauth2/access_token" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) { [MBProgressHUD hideHUD]; //沙盒路径 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; NSString *path = [doc stringByAppendingPathComponent:@"account.plist"]; //把返回来的数据转换成模型 SZMAccountModel *accountMdl = [SZMAccountModel accountWithDict:responseObject]; //自定义对象必须要用NSKeyedArchiver [NSKeyedArchiver archiveRootObject:accountMdl toFile:path]; //将返回的账号数据存进沙盒(下面这个方法只能往数组和字典里写数据) // [responseObject writeToFile:path atomically:YES]; NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; //当前app的版本号的字符串 NSString *currentShortVersionStr = [NSBundle mainBundle].infoDictionary[kShortVersionStr]; //将版本号存储到偏好设置中 NSString *saveVersionStr = [user objectForKey:kShortVersionStr]; UIWindow *window = [UIApplication sharedApplication].keyWindow; if ([currentShortVersionStr isEqualToString:saveVersionStr]) { SZMTabBarController *TabBar = [[SZMTabBarController alloc]init]; window.rootViewController = TabBar; }else{ window.rootViewController = [SZMNewFeatureCtrl new]; } //将新的版本号存到偏好设置中 [user setObject:currentShortVersionStr forKey:kShortVersionStr]; [user synchronize]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"请求失败%@",error); [MBProgressHUD hideHUD]; }]; }
标签:
原文地址:http://www.cnblogs.com/ZMiOS/p/5052797.html