在“Iphone设置”中没有设置帐户发送推文

时间:2013-09-06 16:11:34

标签: iphone ios twitter acaccount acaccountstore

我正在使用此代码从我的应用程序向用户Twitter帐户发送推文。在twitter设备设置中选择至少一个帐户之前,我没有问题。如果我从设置中删除所有帐户我的推文失败。

 ACAccountStore *accountStore=[[ACAccountStore alloc] init];
   ACAccountType *twitterType =
   [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

   SLRequestHandler requestHandler =
   ^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
      if (responseData) {
         NSInteger statusCode = urlResponse.statusCode;
         if (statusCode >= 200 && statusCode < 300) {
            NSDictionary *postResponseData =
            [NSJSONSerialization JSONObjectWithData:responseData
                                            options:NSJSONReadingMutableContainers
                                              error:NULL];
            NSLog(@"[SUCCESS!] Created Tweet with ID: %@", postResponseData[@"id_str"]);
         }
         else {
            NSLog(@"[ERROR] Server responded: status code %d %@", statusCode,
                  [NSHTTPURLResponse localizedStringForStatusCode:statusCode]);
         }
      }
      else {
         NSLog(@"[ERROR] An error occurred while posting: %@", [error localizedDescription]);
      }
   };

   ACAccountStoreRequestAccessCompletionHandler accountStoreHandler =
   ^(BOOL granted, NSError *error) {
      if (granted) {
         NSArray *accounts = [accountStore accountsWithAccountType:twitterType];
         NSURL *url = [NSURL URLWithString:@"https://api.twitter.com"
                       @"/1.1/statuses/update_with_media.json"];
         NSDictionary *params = @{@"status" : @"status"};
         SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter
                                                 requestMethod:SLRequestMethodPOST
                                                           URL:url
                                                    parameters:params];
         NSData *imageData = UIImageJPEGRepresentation(Photo, 1.f);
         [request addMultipartData:imageData
                          withName:@"media[]"
                              type:@"image/jpeg"
                          filename:@"image.jpg"];
         [request setAccount:[accounts lastObject]];
         [request performRequestWithHandler:requestHandler];
      }
      else {
         NSLog(@"[ERROR] An error occurred while asking for user authorization: %@",
               [error localizedDescription]);
      }
   };

   [accountStore requestAccessToAccountsWithType:twitterType
                                              options:NULL
                                           completion:accountStoreHandler];

当Twitter设备设置中没有帐户时,有一种方法可以发送推文吗?也许完美的解决方案应该是调用api并使用用户名和密码作为参数发出登录请求。有办法做到这一点?还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

您要做的是尝试仅使用帐户框架发送推文。您还没有编写使用普通Twitter API发送推文的代码。

如果您可以使用帐户框架发送推文,请首先验证一件事。如果没有,则继续进行正常的OAuth身份验证

您可以使用

验证Twitter帐户
if ([TWTweetComposeViewController canSendTweet])
{
    TWTweetComposeViewController *tweetSheet = 
        [[TWTweetComposeViewController alloc] init];
    [tweetSheet setInitialText:@"Initial Tweet Text!"];
    [self presentModalViewController:tweetSheet animated:YES];
}

如果此条件失败,则使用OAuth API发布sweet。最简单的方法是使用此控件

https://github.com/malcommac/DMTwitterOAuth