2013-06-20 29 views
0

由於twitter api更改,我的應用不再發布推文。以前每件事情都很好,並且根據新的API只有要求模式應該改變?所有其他的東西初始化引擎和休息應該是相同的?在iOS中發佈帶有新api(1.1)的推文

而共享的方法應該修改,所以我修改它,但得到「錯誤認證215」。所有令牌信息和其他東西,我從twitter本身生成的驗證標頭中獲得:

- (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); 
} 

回答

0

使用Twitter的1.0 API,如何發佈鳴叫或升級其新的文件中說明了所有事情,從認證到瑣碎的事情負載但以前的應用程序沒有簡單的方法。

一些改動,使其工作(工程的OAuth):

打開MGTwitterEngine.m>

確保宏是這樣定義的:

#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將被調用。但是,如果調用成功的檢查比在失敗的方法中不做任何事情更容易。

4

請嘗試以下代碼。它的工作對我來說:

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]; 
         } 
        }]; 
      } 
     } 

    }]; 
+0

ACAccountStore僅適用於ios5及更高版本 – Nil

+0

您是否也想購買iOS 4? – Maulik

+0

是4.3以上 – Nil