现在大家一般都用oauthconsumer进行oauth认证,但是如果不修改一点什么的话,新浪跟腾讯的oauth认证都不能用它完成.
对于新浪来说,修改的地方就是mutableurlrequest.m中添加
for (NSString *parameterName in [[extraOAuthParameters allKeys] sortedArrayUsingSelector:@selector(compare:)]) { [parameterPairs addObject:[[OARequestParameter requestParameterWithName:parameterName value:[extraOAuthParameters objectForKey:parameterName]] URLEncodedNameValuePair]]; }
因为consumer的是1.0,而新浪的是1.0a,要求各参数都参与加密运算,然后在需要附加额外参数的地方添加就行了:
OAMutableURLRequest *request;
[request setParameters:[NSArray arrayWithObjects:[[OARequestParameter alloc] initWithName:@"page" value:@"0"],nil]];
[request setParameters:[NSArray arrayWithObjects:[[OARequestParameter alloc] initWithName:@"page" value:@"0"],nil]];
1,新浪是鼓励在header中添加所需参数的,放在url中不行 腾讯是暂时不支持header方式传参的,必须接在url后面
2,两者都需要一个auth_verifier,其中腾讯的第一步更必须一个callback参数,手机端开发此指为null
3,腾讯的一个陷进是,官方说是32位,其实再看看官方提供的demo:
- (NSString *)generateNonce {
// Just a simple implementation of a random number between 123400 and 9999999
return [NSString stringWithFormat:@"%u", arc4random() % (9999999 - 123400) + 123400];
}
// Just a simple implementation of a random number between 123400 and 9999999
return [NSString stringWithFormat:@"%u", arc4random() % (9999999 - 123400) + 123400];
}
sina的得到32位的函数是
- (NSString *)generateNonce
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
NSMakeCollectable(theUUID);
return (NSString *)string;
}
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
NSMakeCollectable(theUUID);
return (NSString *)string;
}
伤得起么?
主要就是这几点的不同了.
研究下官方提供的网友的demo,对比看看这个库,很容易明白.
附:获取qq收藏列表api更正
3.fav/list_t 收藏的微博列表 fav/list_t 收藏的微博列表 URL:http://open.t.qq.com/api/fav/list_t 格式:xml,json HTTP请求方式:GET 是否需要鉴权:true 请求数限制:true 关于请求数限制,参见接口访问权限说明 请求参数:oauth标准参数,并带上以下参数 Format:返回数据的格式 是(json或xml) Pageflag:分页标识(0:第一页,1:向下翻页,2向上翻页) nextTime: 向下翻页起始时间(第一页 时填0,继续翻页:填上一次请求返回的nexttime时间,) Prevtime: 向下翻,上一次请求返回的prevtime事件 Reqnum:每次请求记录的条数(1-20条) Lastid:第一页 时填0,继续向下翻页,填上一次请求返回的最后一条记录ID,翻页用 // 下面这个添加上 pagetime:向下翻页填上上一次请求返回的nexttime 向上翻页填上上一次请求返回的prevtime