1天学习1个类库 accounts类库与twitter框架
来源:互联网 发布:js格式化sql语句代码 编辑:程序博客网 时间:2024/06/05 14:53
看到ios6支持新浪微博了..学习了一下core services layer/Accounts类库.
刚开始一看云里雾里的.完全不知道干什么.揣测下只知道和帐号相关的.google搜索一下.发现是苹果内嵌twitter使用twitter的.
类有
ACAccount 帐号
ACAccountCredential 帐号凭证?翻译不好.主要是OAuth的token和secret2个字段的验证
ACAccountStore 帐号存储列表
ACAccountType 帐号类型 目前只有twitter 揣测iOS6里面会添加Facebook和sina等支持
4个类
使用时候
通过 ACAccountStore 来获取帐号存储类.
然后accountsWithAccountType: 方法提交twitter类型.获取twitter类型的ACAccountType对象.
在通过ACAccountStore 提交twitter类型ACAccountType对象获取到twitter帐号列表.
然后遍历帐号..
tiwtter框架里面包含2个类
TWRequest twitter请求.使用方法在代码内有说明.
TWTweetCompostViewControllertwitter控制器.可以直接使用控制器完成提交
代码部分.注意导入2个框架Accounts和twitter
main.m
//// main.m// ControlDemo//// Created by watsy0007 on 12-6-3.// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.//#import <UIKit/UIKit.h>#import <Accounts/Accounts.h>#import <Twitter/Twitter.h>#define BARBUTTONITEM(bar,title,act) UIBarButtonItem *bar = [[UIBarButtonItem alloc] initWithTitle:title \style:UIBarButtonItemStylePlain \target:self \action:act];@interface ViewController : UIViewController {}@end@implementation ViewController- (void) dealloc { [super dealloc];}- (void) displayText:(NSString *) sOutput { NSLog(@"out : %@",sOutput);}- (void) sendTextToTwitter:(id) sender { TWTweetComposeViewController *tweetViewController = [[TWTweetComposeViewController alloc] init]; [tweetViewController setInitialText:@"hello,this is a tweet from iphone by watsy0007."];// [tweetViewController addImage:[UIImage @"head.png"]]; [tweetViewController setCompletionHandler:^(TWTweetComposeViewControllerResult result) { NSString *output; switch (result) { case TWTweetComposeViewControllerResultCancelled: output = @"Tweet cancelled."; break; case TWTweetComposeViewControllerResultDone: output = @"tweet done."; break; default: break; } [self performSelectorOnMainThread:@selector(displayText:) withObject:output waitUntilDone:NO]; [self dismissModalViewControllerAnimated:YES]; }]; [self presentModalViewController:tweetViewController animated:YES]; [tweetViewController release];}- (void) sendCustomTwitter:(id) sender { //获取帐号存储 ACAccountStore *accountStore = [[ACAccountStore alloc] init]; //获取twitter帐号类型 //按照此数据提示.可以看出来苹果在更新后的SDK中,应该会封装facebook sina的帐号吧. //这样封装了帐号密码在系统级别.而在应用程序中,只需要获取到帐号的索引 //然后调用发送和接收服务 //剩下的只是数据处理 ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; //申请访问帐号 [accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted,NSError *error) { //授权访问 //提示用户程序需要访问twitter帐号 if (granted) { //获取twitter帐号列表 NSArray *accountArray = [accountStore accountsWithAccountType:accountType]; //如果添加了twitter帐号 if ([accountArray count] > 0) { //这里只是获取了第一个帐号.其实还可以通过username选择具体的用户 ACAccount *twitterAccount = [accountArray objectAtIndex:0]; //twitter 访问请求 //封装的相当简洁 //用户只需要提交 url 数据字典 和 请求类型 //这样独立于帐号 TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/update.json"] parameters:[NSDictionary dictionaryWithObject:@"Hello, This is a tweet from ios demo." forKey:@"status"] requestMethod:TWRequestMethodPOST]; //设置请教的归属帐号 //使用什么帐号来完成操作 [postRequest setAccount:twitterAccount]; //请求数据 [postRequest performRequestWithHandler:^(NSData *responseData,NSHTTPURLResponse *urlResponse,NSError *error){ //请求返回的结果 NSString *output = [NSString stringWithFormat:@"HTTP response status : %i\n data: %@",[urlResponse statusCode],[[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] autorelease]]; [self performSelectorOnMainThread:@selector(displayText:) withObject:output waitUntilDone:NO]; }]; } } }];}- (void) getpublicLineTwitter:(id) sender { //同上 TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"] parameters:nil requestMethod:TWRequestMethodGET]; [postRequest performRequestWithHandler:^(NSData *responseData,NSHTTPURLResponse *urlResponse,NSError *error){ NSString *output; if ([urlResponse statusCode] == 200) { // Parse the responseData, which we asked to be in JSON format for this request, into an NSDictionary using NSJSONSerialization. NSError *jsonParsingError = nil; NSDictionary *publicTimeline = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonParsingError]; output = [NSString stringWithFormat:@"HTTP response status: %i\nPublic timeline:\n%@", [urlResponse statusCode], publicTimeline]; } else { output = [NSString stringWithFormat:@"HTTP response status: %i\n", [urlResponse statusCode]]; } [self performSelectorOnMainThread:@selector(displayText:) withObject:output waitUntilDone:NO]; }];}- (void) loadView { [super loadView]; [[self view] setBackgroundColor:[UIColor whiteColor]]; BARBUTTONITEM(leftItem1, @"默认测试",@selector(sendTextToTwitter:)); BARBUTTONITEM(leftItem2, @"post测试",@selector(sendCustomTwitter:)); self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:leftItem1,leftItem2, nil]; [leftItem1 release]; [leftItem2 release]; BARBUTTONITEM(rightItem, @"获取列表",@selector(getpublicLineTwitter:)); self.navigationItem.rightBarButtonItem = rightItem; [rightItem release]; }- (void) viewWillUnload { [super viewWillUnload];}- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return YES;}- (void) viewDidLoad { [super viewDidLoad];}@end//-----------------------------------------------------------------------------------------------------#pragma mark -#pragma mark AppDelegate@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) UIWindow *window;@property (strong, nonatomic) UIViewController *viewController;@end@implementation AppDelegate@synthesize window = _window;@synthesize viewController = _viewController;- (void) dealloc { [_window release]; [_viewController release]; [super dealloc];}- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { srand(time(NULL)); self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; self.viewController = [[ViewController alloc] init]; UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:self.viewController]; self.window.rootViewController = controller; [controller release]; [self.window makeKeyAndVisible]; return YES;}@endint main(int argc, char *argv[]){ @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); }}
- 1天学习1个类库 accounts类库与twitter框架
- Twitter Bootstrap 框架介绍
- Tweepy抓取twitter数据 1
- twitter开源的一套前端框架库
- jq框架封装学习笔记1-框架介绍与选择器框架
- 学习笔记:Twitter核心数据类库团队的Hadoop优化经验
- Twitter架构学习
- twitter bootstrap 学习
- TWITTER STORM学习
- Twitter Storm: DRPC学习
- twitter -----bootstrap学习
- Twitter Storm: DRPC学习
- Twitter与微博
- Twitter Bootstrap:前端框架利器
- Twitter BootStrap:前端框架利器
- Twitter Bootstrap:前端框架利器
- 尼尔森:60%用户1个月后弃用Twitter
- 【流式计算】twitter storm Rationale[1]
- Lustre可靠性增强系统MTFS:第2篇 安装
- 外企面试官们爱提的十个问题
- linux下socket通信程序例子
- 小弟的新书《Ext JS权威指南》终于出版了
- Android开发环境配置
- 1天学习1个类库 accounts类库与twitter框架
- 循环的两种方式和迭代
- Eclipse 8.5 + Tomcat 7.0
- 微软公司的三道面试题目看了会有意想不到的收获
- [软件工程]代码review需要注意的地方
- Android中的消息推送
- 面试必问的16个经典问题的回答思路
- ubuntu linux分布式hadoop安装
- How to: Create a Binding in Code