2011年沈大海讲师Iphone的新浪微博客户端OAuth源代码

对于Iphone的新浪微博客户端其实现基本流程如下

 1.根据Appkey 请求 http://api.t.sina.com.cn/oauth/requtst_token 获取未授权的requestToken

2.根据requestToken给用户提示授权,请求http://api.t.sina.com.cn/oauth/authorize 获取用户对我们应用的授权码

3.根据授权码和requestToken,请求http://api.t.sina.com.cn/oauth/access_token 获取访问用户信息的accessToken

4.每次使用AccessToken访问Api的各接口url

#pragma mark 第一步获取requestToken
- (IBAction)startSina:(id)sender {

    OAConsumer *consumer = [[OAConsumer alloc] initWithKey:APPKEY secret:APPSECRET];
 
 OAHMAC_SHA1SignatureProvider *hmacSha1Provider = [[OAHMAC_SHA1SignatureProvider alloc] init];
 OAMutableURLRequest *hmacSha1Request = [[OAMutableURLRequest alloc] initWithURL:[NSURL URLWithString:RequestURL]
                                                      consumer:consumer
                                                         token:NULL
                                                         realm:NULL
                                             signatureProvider:hmacSha1Provider
                                                         nonce:[self _generateNonce]
                                                     timestamp:[self _generateTimestamp]];
    [hmacSha1Request setHTTPMethod:@"GET"];
 
 OADataFetcher *fetcher = [[OADataFetcher alloc] init];
    [fetcher fetchDataWithRequest:hmacSha1Request
                         delegate:self
                didFinishSelector:@selector(requestTokenTicket:finishedWithData:)
                  didFailSelector:@selector(requestTokenTicket:failedWithError:)];


}

#pragma mark 第二步 弹出web url让用户授权


- (void)requestTokenTicket:(OAServiceTicket *)ticket finishedWithData:(NSMutableData *)data {
   
    NSString *responseBody = [[NSString alloc] initWithData:data
                                                   encoding:NSUTF8StringEncoding];
    NSLog(@"获得未授权的KEY:%@",responseBody);
   
    OAToken *token = [[OAToken alloc] initWithHTTPResponseBody:responseBody];
   
    NSString *tt = [token.key URLEncodedString];
    NSString *url = [NSString stringWithFormat:@"%@?oauth_token=%@&oauth_callback=%@",AuthorizeURL,tt,CallBackURL];

 //callBack URL我们希望是自己的窗口可以写成oauth://mysnia.com


    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
   
    NSUserDefaults *info = [NSUserDefaults standardUserDefaults];
    [info setValue:responseBody forKey:@"responseBody"];
    [info synchronize];
   

#pragma mark url回调 oauth第三步 获取授权码 之后获取AccessToken
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
 NSLog(@"获得已授权的key:%@",[url query]);
 NSUserDefaults *info = [NSUserDefaults standardUserDefaults];

//解析回调的URL获取oauth_verifier

//回调的URL需要在.plist中加入URL schemes :oauth和URL identifier:mysnia.com 你懂的...
 NSString *string = [[url query] substringWithRange:NSMakeRange([[url query] length]-6, 6)];

 
 OAConsumer *consumer = [[OAConsumer alloc] initWithKey:APPKEY secret:APPSECRET];
   
    NSLog(@"利用数据持久取得第二步获得的token");
 OAToken *token = [[OAToken alloc] initWithHTTPResponseBody:[info valueForKey:@"responseBody"]];
    OAHMAC_SHA1SignatureProvider *hmacSha1Provider = [[OAHMAC_SHA1SignatureProvider alloc] init];
   
 OAMutableURLRequest *hmacSha1Request = [[OAMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@?oauth_verifier=%@",AccessURL,string]]
                                                       consumer:consumer
                                                          token:token
                                                          realm:NULL
                                              signatureProvider:hmacSha1Provider
                                                          nonce:[self _generateNonce]
                                                      timestamp:[self _generateTimestamp]];
 [hmacSha1Request setHTTPMethod:@"GET"];

 OADataFetcher *fetcher = [[OADataFetcher alloc] init];
    [fetcher fetchDataWithRequest:hmacSha1Request
                         delegate:self
                didFinishSelector:@selector(requestTokenTicket:finishedWithData:)
                  didFailSelector:@selector(requestTokenTicket:failedWithError:)];

 return YES;
}


- (void)requestTokenTicket:(OAServiceTicket *)ticket finishedWithData:(NSMutableData *)data {
    NSString *responseBody = [[NSString alloc] initWithData:data
                                                   encoding:NSUTF8StringEncoding];
    NSLog(@"完成最后一步,并根据结果生成token:%@",responseBody);
     OAToken *token = [[OAToken alloc] initWithHTTPResponseBody:responseBody];
    NSLog(@"得到之后api用的token:%@",token);
 //恭喜,得到了AccessToken,您应该把他存到sqlite或某个地方,以后操作该账户就不用获取了  
   
}

 

 该项目代码找我的发布资源http://download.csdn.net/source/3541585

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值