转自:http://wangjun.easymorse.com/?p=956
我们在程序中经常会用twitter分享应用和一些好玩的东西,twitter给我们提供了相应的api,但是在中国由于大防火墙的原因,我们不能正常访问twitter网站,需要使用代理或vpn。
本文参考:http://mobile.tutsplus.com/tutorials/iphone/twitter-api-iphone/
实现的效果图:
实现过程如下:
- 下载twitter关于ios的api包,点击下载,然后解压即可。
- 新建一个demo工程,能够正常编译运行即可。
- 拷贝压缩包下的Twitter+OAuth到demo工程中。
- 然后增加 libxml2 Library到Frameworks中去。
- 在info中的build中的Header Search Paths里添加:$(SDKROOT)/usr/include/libxml2
- 编译运行工程,只有警告没有错误 。
- 修改.h文件,MGTwitterStatusesParser.h中修改为:@interface MGTwitterStatusesParser : MGTwitterXMLParser <NSXMLParserDelegate> {
- 修改.h文件,MGTwitterXMLParser.h修改为:@interface MGTwitterXMLParser : NSObject <NSXMLParserDelegate> {
- 再次编译运行,没有警告和错误。
- 申请twitter开发工程的key值:(http://twitter.com/oauth_clients).
- 在自己的controller中添加相应的twitter的view
.h文件中:
#import <UIKit/UIKit.h>
#import "SA_OAuthTwitterController.h"
@class SA_OAuthTwitterEngine;@interfaceiphone_twitterViewController : UIViewController
<UITextFieldDelegate, SA_OAuthTwitterControllerDelegate> {
IBOutlet UITextField *tweetTextField;
SA_OAuthTwitterEngine *_engine;}
@property(nonatomic, retain) IBOutlet UITextField *tweetTextField;-(IBAction)updateTwitter:(id)sender;
@end
.m文件中:
#import "iphone_twitterViewController.h"
#import "SA_OAuthTwitterEngine.h"
#define kOAuthConsumerKey @"" //REPLACE WithTwitterApp OAuth Key
#define kOAuthConsumerSecret @"" //REPLACE With Twitter Ap@implementation iphone_twitterViewController
@synthesize tweetTextField;
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)viewDidAppear: (BOOL)animated {
if(!_engine){
_engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate:self];
_engine.consumerKey = kOAuthConsumerKey;
_engine.consumerSecret = kOAuthConsumerSecret;
}
if(![_engine isAuthorized]){
UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine:_engine delegate:self];
if (controller){
[self presentModalViewController: controller animated: YES];
}
}
}
-(IBAction)updateTwitter:(id)sender
{
[_engine sendUpdate:tweetTextField.text];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload {
}- (void)dealloc {
[_engine release];
[tweetTextField release];
[super dealloc];
}
#pragma mark SA_OAuthTwitterEngineDelegate
- (void) storeCachedTwitterOAuthData: (NSString *) data forUsername: (NSString *) username {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject: data forKey: @"authData"];
[defaults synchronize];
}- (NSString *) cachedTwitterOAuthDataForUsername: (NSString *) username {
return [[NSUserDefaults standardUserDefaults] objectForKey: @"authData"];
}
#pragma mark TwitterEngineDelegate
- (void) requestSucceeded: (NSString *) requestIdentifier {
NSLog(@"Request %@ succeeded", requestIdentifier);
}- (void) requestFailed: (NSString *) requestIdentifier withError: (NSError *) error {
NSLog(@"Request %@ failed with error: %@", requestIdentifier, error);
}
@end