iOS提供了一个SLRequest类,它封装了HTTP协议请求对象,它能提供HTTP请求的GET、POST和DELETE方法,它为iOS中的新浪微博、Twitter、Facebook应用开发通过了统一的开发接口。
要编写社交网络客户端程序大致分为4个主要步骤(以新浪微博客户端为例):
1、引入Accounts和Social框架
TARGETS->WeiBo->Build Phases->Link Binary With Libraries,选择右下角的“+”按钮,打开框架和库选择对话框,分别选择Social.framework添加,再选择Accounts.framework添加。
2、用户帐户认证
用户帐户认证使用ACAccount、ACAccountStore和ACAccountType类,ACAccount封装用户账户信息,这些信息存储在账户数据库中,ACAccountStore类用来管理账户数据库,ACAccountType类描述了账户类型。
认证过程模版如下:
ACAccountSotre *account = [[ACAccountStore alloc] init];
ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierSinaWeibo];
[account requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error)
{
if(granted == YES)
{
NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType];
if([arrayOfAccounts count] > 0)
{
<认证通过>
}
}
}];
3、发送请求
用户认证通过就可以发送请求,使用SLRequest对象发送请求,创建SLRequest对象可以使用类级构造方法requestForServiceType: requestMethod: URL: parameters:
下面代码是创建SLRequest对象:
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeSinaWeibo requestMethod:SLRequestMethodGET URL:requestURL parameters:parameters];
requestForServiceType部分参数指定请求的服务类型;requestMethod部分指定HTTP请求方法,这参数取值是定义枚举SLRequestMethod中的常量:
(1)SLRequestMethodGET;
(2)SLRequestMethodPOST;
(3)SLRequestMethodDELETE;
URL部分指定的请求的URL,指定是由社交网络服务提供给我们的,而且不同的功能也有所不同,可到他们(Facebook,twitter,新浪微博等)的开发者网站查看详细说明。
上面只是创建了SLRequest对象,还需要为请求对象设置账户信息:
requset.account = weiboAccount;
weiboAccount账户信息是我们从用户账户信息数据库中获得的,设置给请求对象的account属性,然后才能提交给社交网络服务器进行认证。
具体开始请求是通过调用SLRequest的performRequestWithHandler:方法实现的:
[request performRequestWithhandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
{
<处理请求结果>
}];
4、处理请求结果
请求结束会调用代码块,我们在代码块中处理请求结果。基本工作是解析数据,以及UI更新等操作。这三个社交网络服务返回的都是JSON格式数据,其中代码块中responseData参数可以使用NSJSONSerialization解析JSON对象:
id jsonObj = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:&err];
解析的jsonObj对象结构根据社交网络服务的不同而不同,详细参数情况请参考不同服务的开发者网站。