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

现在响应数据包含以下内容:

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

好的,twitter 现在需要 SSL。https://dev.twitter.com/discussions/24239是讨论。

我应该如何更改我的代码?

4

2 回答 2

0

SLRequest有财产account。您需要将其设置为用户的 twitter 帐户(这是ACAccount您从ACAccountStore课程中获得的对象。

如果您设置此选项,则连接经过身份验证并为您执行 OAuth。

因此,您需要执行以下操作:

  • 创建一个ACAccountStore对象
  • 使用请求访问 Twitter 帐户requestAccessToAccountsWithType:...
  • 授予访问权限后,ACAccount从帐户存储中获取对象
  • 将此添加到您的SLRequest对象中。
于 2014-03-25T11:51:54.320 回答
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"提示“将对所有 api.twitter.com URL 强制执行 SSL 要求,包括 OAuth 的所有步骤和所有 REST API 资源。” 这意味着现在我们必须使用“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");
        }
    }];
}
于 2014-07-07T15:39:24.747 回答