在iOS中使用新的api(1.1)发布tweet

由于Twitter的API被更改,我的应用程序不再发布鸣叫。 以前每一件事都很好,而且根据新的API只要求模式应该改变? 所有其他的东西初始化引擎和rest应该是一样的?

而共享的方法应该修改,所以我修改它,但得到“错误的authentication215”。 所有的令牌信息和其他东西,我从twitter本身生成的validation头中得到它:

- (void) shareOnTwitter { NSString *urlString = [NSString stringWithFormat:@"https://api.twitter.com/1.1/statuses/update.json"]; NSURL *url = [NSURL URLWithString:urlString]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; [request setHTTPMethod:@"POST"]; NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; [dict setValue:@"check Check CHECK" forKey:@"status"]; [dict setValue:@"-- - - - - -" forKey:@"oauth_consumer_key"]; [dict setValue:@"- - - - - - -" forKey:@"oauth_nonce"]; [dict setValue:@"- - - - - - -" forKey:@"oauth_signature"]; [dict setValue:@"HMAC-SHA1" forKey:@"oauth_signature_method"]; [dict setValue:@"- - - - - - -" forKey:@"oauth_timestamp"]; [dict setValue:@"- - - - - - -" forKey:@"oauth_token"]; [dict setValue:@"1.0" forKey:@"oauth_version"]; NSString *jsonString = [dict JSONRepresentation]; NSData *jsonData = [NSData dataWithBytes:[jsonString UTF8String] length:jsonString.length]; [request setHTTPBody:jsonData]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; NSLog(@"My request...%@", jsonString); NSData *urlData; NSURLResponse *response1; NSError *error = nil; urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response1 error:&error]; if(error) { NSLog(@"Error %@",error); } if(!urlData) { NSLog(@"No connection!"); } NSString *responseStr = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; NSLog(@" Twitter : ... %@", responseStr); } 

尝试下面的代码。 它为我工作:

  ACAccountStore *accountStore = [[ACAccountStore alloc] init]; ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; [accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) { if (granted) { NSArray *accounts = [accountStore accountsWithAccountType:accountType]; if (accounts.count) { NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; [dict setValue:@"check Check CHECK" forKey:@"status"]; NSString *retweetString = [NSString stringWithFormat:@"https://api.twitter.com/1.1/statuses/update.json"]; NSURL *retweetURL = [NSURL URLWithString:retweetString]; TWRequest *request = [[TWRequest alloc] initWithURL:retweetURL parameters:dict requestMethod:TWRequestMethodPOST]; request.account = [accounts objectAtIndex:0]; [request performRequestWithHandler:^(NSData *responseData1, NSHTTPURLResponse *urlResponse, NSError *error) { if (responseData1) { NSError *error1 = nil; id response = [NSJSONSerialization JSONObjectWithData:responseData1 options:NSJSONReadingMutableLeaves error:&error1]; } }]; } } }]; 

Twitter将其新文档中的每一件事情都从authentication中解释出来,加载一些微不足道的东西,但是对于以前使用1.0 api的应用程序,如何发布推文或升级,并不容易。

几乎没有变化,使其工作(为OAuth工作):

打开MGTwitterEngine.m>

确保macros定义如下:

 #define TWITTER_DOMAIN @"api.twitter.com/1.1" #define HTTP_POST_METHOD @"POST" #define TWITTER_SEARCH_DOMAIN @"search.twitter.com" #define DEFAULT_CLIENT_VERSION @"1.0" #if YAJL_AVAILABLE #define API_FORMAT @"xml" #import "MGTwitterStatusesYAJLParser.h" #import "MGTwitterMessagesYAJLParser.h" #import "MGTwitterUsersYAJLParser.h" #import "MGTwitterMiscYAJLParser.h" #import "MGTwitterSearchYAJLParser.h" #else #define API_FORMAT @"json" #if USE_LIBXML #import "MGTwitterStatusesLibXMLParser.h" #import "MGTwitterMessagesLibXMLParser.h" #import "MGTwitterUsersLibXMLParser.h" #import "MGTwitterMiscLibXMLParser.h" #else #import "MGTwitterStatusesParser.h" #import "MGTwitterUsersParser.h" #import "MGTwitterMessagesParser.h" #import "MGTwitterMiscParser.h" #endif #endif 

你会惊讶- (void) requestSucceeded: (NSString *) requestIdentifier- (void) requestFailed: (NSString *) requestIdentifier withError: (NSError *) error will be called。 但是,如果调用成功的检查比在失败的方法中不做任何事情更容易。