引言:
新浪微博几乎是把全平台数据的API接口都开放了出来,因此,很多优秀的第三方微博客户端在功能方面都非常的全面.
而通过SNS的分享推广方式在App世界里已经非常的普遍,甚至随处可见,本篇主要介绍一下App是如何跟新浪微博关联的.
参考资料:
1.开发平台首页:
http://open.weibo.com/?bottomnav=1&wvr=5
2.API文档首页:
http://open.weibo.com/wiki/API文档_V2
3.API错误代码说明地址:
http://open.weibo.com/wiki/Error_code
4.iOS SDK 地址:
https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth
5.授权机制:
http://open.weibo.com/wiki/授权机制说明
6.开发者管理中心
使用:
在管理中心中创建自己的应用以后,会得到AppKey 和 App Secret
这两个值 是初始化新浪微博SDK必须要用到的两个参数.
当执行 login 函数时 可能遇到的错误如下
1:访问出错提示
表示: 微博SDK初始化时设置的 appRedirectURI 和微博开放平台-开发者管理中心-应用信息-高级信息-OAuth2.0 授权设置-授权回调页
所设置的值不一样,才会出现如上错误.
2:调用新浪微博客户端授权以后没有正常返回应用.
1:检查 URL type "URL scheme” 是否设置了名为: sinaweibosso.加AppID 如图:
2:AppDelegate 中 是否实现委托函数:
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSLog(@"%@",url.scheme);
//如果涉及其他应用交互,请做如下判断,例如:还可能和新浪微博进行交互
if ([url.scheme isEqualToString:Key_weiXinAppID]) {
return [WXApi handleOpenURL:url delegate:self];
}else if ([url.scheme isEqualToString:[@"sinaweibosso" stringByAppendingPathExtension:Key_sinaWeiboAppID]])
{
return [[SinaWeiBoManage defaultInstance].sinaWeibo handleOpenURL:url];
}else
{
return YES;
}
}
以上设置完成以后,不出意外,将会响应授权结果.
接下来就主要开始调用API来进行微博的数据交互了.
举个简单的例子,如何获取授权用户的个人信息:
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:userId forKey:@"uid"];
[sinaWeibo requestWithURL:@"users/show.json"
params:params
httpMethod:@"GET"
delegate:self];
具体要传入什么参数,请查阅官方API文档.
得到结果后会响应成功或者失败的委托:
此时可以用过链接名称来识别请求类型:
- (void)request:(SinaWeiboRequest *)request didFailWithError:(NSError *)error
{
//获取关注列表
if ([request.url hasSuffix:@"friendships/friends.json"])
{
if ([delegate respondsToSelector:@selector(sinaWeiBoManage:withFriendListResult:withRequestDataType:isSuccess:)]) {
[delegate sinaWeiBoManage:self withFriendListResult:nil withRequestDataType:self.requestDataType isSuccess:NO];
}
}
}
关于iOS 6中内置微博功能:
在iOS6中苹果集成了新浪微博的社交环境,所以,如果用户在设置界面中授权了新浪微博账户,我们第三方应用中就可以直接使用,利用其发微博等等
首先引入两个 新的 framework
分别是:
Accounts.framework :用于获取系统设置中的 账户信息
Social.framework :用于对第三方开放平台进行数据交互.
流程分为两步:
首先要知道用户有没有在系统的 设置中 授权了对应的账户,
如果拿到对应的账户信息以后就可以开始对第三方开放平台进行数据交互了,代码如下:
// Create an account store object. 创建账户集合
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
// Create an account type that ensures Twitter accounts are retrieved. 确定好 账户类型 新浪微博 还是 Facebook 还是 Twitter
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierSinaWeibo];
// Request access from the user to use their Twitter accounts. //异步请求 来得到对应类型的账户信息
[accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
if(granted) {//如果 granted 返回 NO 表示一个账户都没有设置
// Get the list of Twitter accounts.
NSArray *accountsArray = [accountStore accountsWithAccountType:accountType]; //可能存在多个,看你要用哪个,最好让用户选择一下
// For the sake of brevity, we'll assume there is only one Twitter account present.
// You would ideally ask the user which account they want to tweet from, if there is more than one Twitter account present.
if ([accountsArray count] > 0) {
// Grab the initial Twitter account to tweet from.
ACAccount *sinaWeiboAccount = [accountsArray objectAtIndex:0];
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:@"一条新的微博" forKey:@"status"];
SLRequest *slRequest = [SLRequest requestForServiceType:SLServiceTypeSinaWeibo requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"https://open.weibo.cn/2/statuses/update.json"] parameters:params];
slRequest.account = sinaWeiboAccount;//这行代码一定要赋值,负责数据交互一定失败
[slRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSLog(@"%@ %@",urlResponse.URL,error);
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",dic);
}];
}
}
}];
在拿到每个 ACAccount 以后 自身都有一个 identifier 啊在用户确认选好了使用哪个账户时最好能够保存下来,那么下次可以直接通过如下代码获取到对应的账户
[accountStore accountWithIdentifier:sinaWeiboAccount.identifier];
总结: