IOS 发表于 2015-4-3 13:35:30

继续学习中,谢谢楼主

陈晓强 发表于 2015-4-15 17:23:40

{:soso_e101:} {:soso_e101:} {:soso_e101:} {:soso_e101:}

xiaoyuzaizoulu 发表于 2015-6-1 19:18:47

hao ba今天我又来了

Miul 发表于 2015-6-19 14:09:15

继续学习。楼主热心帮助解答问题,给力~

Miul 发表于 2015-6-30 16:37:45

这讲感觉实现起来需要很多其他知识。新浪认证倒是没啥问题,但是redirect_uri一定要填写对,不然页面总是会显示不正确。另外就是AFNetworking已经更新了版本,下的新版本发现和楼主工程的老版本变化很多。自己对这块的知识没有多少概念,感觉实现起来比较吃力。工程中先用WebView请求服务器的授权。
//请求
https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code
这个接口会返回数据code。当打开页面填写完用户名密码后,点击登录,webView会自动把之前服务器返回的code这部分数据再发送给服务器是吗?这都是webView内部来处理的?

Sian 发表于 2015-6-30 21:52:13

本帖最后由 Sian 于 2015-6-30 21:53 编辑

Miul 发表于 2015-6-30 16:37
这讲感觉实现起来需要很多其他知识。新浪认证倒是没啥问题,但是redirect_uri一定要填写对,不然页面总是会 ...
1、AFNetworking已经更新了版本没有关系,因为AFNetworking在项目中已经封装了,所以不需要关心AFNetworking的具体细节,至于AFNetworking的新版本特性这里就不做过多讨论,其实很简单只是换几个方法而已,原理是一样的;

2、SAOAuthController的view是被替换成了webView,不用太在意他是不是浏览器,这里主要做了两件事件:

2.1、通过通过加载新浪的登录界面发送http请求,验证用户名密码成功后,新浪会返回一个重定向页面,这个重定向页面,这个重定向页面会让你去访问你的kRedirect_uri,即所谓的回调地址。而这个重定向url中包含了我们认证通过后所需要的code值,我们手机端就不让他再去访问重定向url了,只要截取url里面的code就行,这个过程在webView的代理方法中实现:
#pragma mark 代理方法获取Token
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    // 1、获取全路径,将URL转换成字符串
    NSString *url = request.URL.absoluteString;
    // 2、查找code范围
    NSRange range = ;       // 匹配包含"code="的URL
    if (range.length){                                  // 如果有,取"code="后跟的串,即为requestToken
      NSInteger index = range.location + range.length;
      NSString *requestToken = ;   
    // 3、换取accessToken
      ;   
      return NO;
    }
    return YES;
}
2.2、获取到了code后,调用新浪提供的另一个接口换取AccessToken,这个东西是我们调取所有接口都必传的一个字段:
-(void)getAccessToken:(NSString *)requestToken
{
    // SAHttpTool类中自定义方法,实为封装AFNetWorking的方法获取网页数据
    [SAHttpTool httpToolPostWithBaseURL:@"https://api.weibo.com" path:@"oauth2/access_token" params:
   @{
       // 新浪要求必须传递的五个参数
       @"client_id" : kAppKey,
       @"client_secret" : kAppSecret,
       @"grant_type" : @"authorization_code",
       @"code" : requestToken,
       @"redirect_uri" : kRedirect_uri
       // 成功获取JSON
       } success:^(id JSON) {
         MyLog(@"请求成功");
         // 1 将JSON转换成数据模型并归档
         SAAccount *account = ;
         [ saveAccount:account];
         // 2 跳转到主页面
         self.view.window.rootViewController = [init];
         // MyLog(@"%@", JSON);
         // 3 清除页面加载提示
         ;
       // 获取信息失败
       } failure:^(NSError *error) {
         // 1 打印错误提示
         MyLog(@"请求失败-%@", );
         // 2 清除页面加载提示
         ;
       }];
}
2.3、SAOAuthController理解以上两点就足够了。

Miul 发表于 2015-6-30 23:42:42

楼主解答非常清楚明了,解答了我心中的很多问题。再次谢谢楼主,能这么热心的解答我的问题。:loveliness:

Miul 发表于 2015-7-5 13:15:12

给使用AFNetworking2.0以上版本的同学提个醒,新浪返回access_Token数据时,有个坑。
AFJSONRequestOperation默认不接收text/plain类型的数据,当服务器返回text/plain类型的数据时,会认为出错了。可以通过修改源代码解决问题

+ (NSSet *)acceptableContentTypes {

    return ;

}

nullptr 发表于 2015-7-22 10:36:39

666666666666666

sk91600 发表于 2015-7-28 21:43:28

代码结构清晰,继续学习中
页: 1 2 3 [4] 5 6
查看完整版本: ios实战开发之仿新浪微博(第四讲:OAuth认证)