2014-03-25 2 views
0
-(void) vSLRequest:(SLRequest*) SLRequest1 WithHandler:(NSString *) errorTitle andD1: (NSString *) errorDescription FP1:(NSString *) errorParse FP2:(NSString *) errorParseDesc ifSuccess:(void(^)(NSDictionary * resp))succesBlock 
{ 
    [self vSuspendAndHaltThisThreadTillUnsuspendedWhileDoing:^{ 
     [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
      [SLRequest1 performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
       if(error != nil) { 
        [[NSOperationQueue mainQueue]addOperationWithBlock:^{ 
         [[[UIAlertView alloc] initWithTitle:errorTitle message:errorDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]show]; 
        }]; 
       } 

Теперь данные ответа содержит следующее:SLRequest доступ твиттер теперь требует SSL

(lldb) po resp 
{ 
    errors =  (
       { 
      code = 92; 
      message = "SSL is required"; 
     } 
    ); 
} 

Хорошо так, твиттер теперь требует SSL. https://dev.twitter.com/discussions/24239 - обсуждение.

Как мне изменить код?

ответ

0

SLRequest имеет account Недвижимость. Вы должны установить это твиттере пользователя (который является ACAccount объект, который вы получаете от ACAccountStore класса.

Если установлено соединение проходит проверку подлинности и OAuth выполняется для вас.

Итак, вам необходимо сделать следующее:

  • Создать ACAccountStore объект
  • Запросить доступ к щебет счетов с помощью requestAccessToAccountsWithType:...
  • После предоставления доступа, получить ACAccount объект со счета магазина
  • Добавьте это в свой SLRequest объект.
0

я получаю ту же ошибку, когда я использовал URL NSURL *requestURL = [NSURL URLWithString:@"http://api.twitter.com/1/statuses/update.json"];

Но я решил эту ошибку, изменив URL на это: NSURL *requestURL = [NSURL URLWithString:@"https://api.twitter.com/1/statuses/update.json"];

-> Ошибка message = "SSL is required" говорит, что «требование SSL будет применяться на всех URL api.twitter.com, включая все этапы OAuth и всех ресурсов API REST. " , что означает, что теперь мы должны использовать «https: //» вместо «http: //», который мы использовали ранее.

Ниже весь код, который поможет вам лучше понять:

- (void) postTweet 
{ 
    ACAccountStore *account = [[ACAccountStore alloc] init]; 
    ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierTwitter]; 

    [account requestAccessToAccountsWithType: accountType 
            options: nil 
            completion: ^(BOOL granted, NSError *error) 
    { 
     if (granted == YES){ 

      // Get account and communicate with Twitter API 
      NSLog(@"Access Granted"); 

      NSArray *arrayOfAccounts = [account 
             accountsWithAccountType:accountType]; 

      if ([arrayOfAccounts count] > 0) { 

       ACAccount *twitterAccount = [arrayOfAccounts lastObject]; 

       NSDictionary *message = @{@"status": @"My First Twitter post from iOS 7"}; 

       NSURL *requestURL = [NSURL URLWithString:@"https://api.twitter.com/1/statuses/update.json"]; 

       SLRequest *postRequest = [SLRequest requestForServiceType: SLServiceTypeTwitter 
                  requestMethod: SLRequestMethodPOST 
                     URL: requestURL 
                   parameters: message]; 

       postRequest.account = twitterAccount; 

       [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) 
       { 
        NSLog(@"Twitter HTTP response: %i", [urlResponse statusCode]); 
        NSLog(@"Twitter ResponseData = %@", [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]); 
       }]; 
      } 
     } 
     else { 

      NSLog(@"Access Not Granted"); 
     } 
    }]; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^