推文,不使用推文表

时间:2013-09-06 05:53:54

标签: iphone ios twitter

我正在使用以下代码通过推特分享内容(来自UITextViewUIImageView

-(void)shareViaTweet:(NSString *)shareMessage{
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
    SLComposeViewController *tweetSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
    [tweetSheet setInitialText:[NSString stringWithFormat:@"%@",shareMessage]];
    if (self.imageString)
    {
        [tweetSheet addImage:[UIImage imageNamed:self.imageString]];
    }

    if (self.urlString)
    {
        [tweetSheet addURL:[NSURL URLWithString:self.urlString]];
    }
    [self presentViewController:tweetSheet animated:YES completion:nil];
}
else
{
    UIAlertView *alertView = [[UIAlertView alloc]
                              initWithTitle:@"Sorry"
                              message:@"You can't send a tweet right now, make sure your device has an internet connection and you have at least one Twitter account setup"
                              delegate:self
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil];
    [alertView show];
}

}

但我需要分享这个,而不使用弹出视图(我认为推文表)。它正在发生,因为下面的代码,

[self presentViewController:tweetSheet animated:YES completion:nil];

当我点击我的应用程序的“分享”按钮时,我需要在Twitter上发布。

编辑:

- (IBAction)doneButtonClicked:(id)sender
{
ACAccountStore *account = [[ACAccountStore alloc] init];
ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
NSString *message = messageTextView.text;
//hear before posting u can allow user to select the account
NSArray *arrayOfAccons = [account accountsWithAccountType:accountType];
for(ACAccount *acc in arrayOfAccons)
{
    NSLog(@"%@",acc.username); //in this u can get all accounts user names provide some UI for user to select,such as UITableview
}


NSURL *url = [NSURL URLWithString:@"https://api.twitter.com"
              @"/1.1/statuses/user_timeline.json"];
             NSDictionary *params = @{@"screen_name" : message,
                                     @"forKey":@"status",
                                      @"trim_user" : @"1",
                                      @"count" : @"1"};
// Request access from the user to access their Twitter account

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

 {
     if (granted == YES)
     {
         // Populate array with all available Twitter accounts
         NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType];
         if ([arrayOfAccounts count] > 0)
         {
             //use the first account available
             ACAccount *acct = [arrayOfAccounts objectAtIndex:0]; //hear this line replace with selected account. than post it :)




             SLRequest *request =
             [SLRequest requestForServiceType:SLServiceTypeTwitter
                                requestMethod:SLRequestMethodPOST
                                          URL:url
                                   parameters:params];


             //Post the request
             [request setAccount:acct];

             //manage the response
             [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
              {
                  if(error)
                  {
                      //if there is an error while posting the tweet
                      UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"Error in posting" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                      [alert show];

                  }
                  else
                  {
                      // on successful posting the tweet
                      NSLog(@"Twitter response, HTTP response: %i", [urlResponse statusCode]);
                      UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"Successfully posted" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                      [alert show];


                  }
              }];

         }
         else
         {
             UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"You have no twitter account" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
             [alert show];

         }
     }
     else
     {
         //suppose user not set any of the accounts
         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"Permission not granted" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
         [alert show];

     }
 } ];


//[widgetsHandler closeWidget:nil];


//[self postImage:shareImageView.image withStatus:messageTextView.text];
}

更新:错误

enter image description here

2 个答案:

答案 0 :(得分:4)

要发送图片,你需要做这样的事情


  [account requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error)
 {
   if (granted == YES)
    {
      // Populate array with all available Twitter accounts
     NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType];
     if ([arrayOfAccounts count] > 0)
      {
           //use the first account available
       ACAccount *acct = [arrayOfAccounts objectAtIndex:0];

       //create this request 
       SLRequest *postRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:[NSURL   URLWithString:@"https://api.twitter.com"@"/1.1/statuses/update_with_media.json"] parameters:  [NSDictionary dictionaryWithObject:message forKey:@"status"]];
       UIImage *imageToPost = [UIImage imageNamed:@"image.jpg"];
       NSData *imageData = UIImageJPEGRepresentation(imageToPost, 1.0f);//set the compression quality
      [postRequest addMultipartData:imageData withName:@"media" type:@"image/jpeg" filename:@"image.jpg"];

   //set account and same as above code 

....
 ....


答案 1 :(得分:1)

如果您想在不使用推文表的情况下分享推文,请参阅我的回答,它将在Twitter壁上发布而不使用推文表,请参阅hear并在设备中设置推特账户。希望这有帮助

不幸的是,在iOS 6中不推荐使用类TWRequest,但我们可以使用社交框架中的SLRequest

这个答案类似于旧答案 我评论了一些我不想要的东西,但如果你想选择使用哪个帐户,那么取消注释评论代码


 - (IBAction)doneButtonClicked:(id)sender
    {
      ACAccountStore *account = [[ACAccountStore alloc] init];
      ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
      NSString *message = _textView.text;

    //    NSArray *arrayOfAccons = [account accountsWithAccountType:accountType];
    //    for(ACAccount *acc in arrayOfAccons)
    //    {
    //        NSLog(@"%@",acc.username);
    //        NSDictionary *properties = [acc dictionaryWithValuesForKeys:[NSArray arrayWithObject:@"properties"]];
    //        NSDictionary *details = [properties objectForKey:@"properties"];
    //        NSLog(@"user name = %@",[details objectForKey:@"fullName"]);
    //        NSLog(@"user_id  =  %@",[details objectForKey:@"user_id"]);
    //    }


    // Request access from the user to access their Twitter account
    [account requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error)
    {
        if (granted == YES)
        {
         // Populate array with all available Twitter accounts
            NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType];
            if ([arrayOfAccounts count] > 0)
             {
               //use the first account available
               ACAccount *acct = [arrayOfAccounts objectAtIndex:0];

               // Build a twitter request
               // TWRequest *postRequest = [[TWRequest alloc] initWithURL:
               // [NSURL URLWithString:@"http://api.twitter.com/1/statuses/update.json"] parameters:[NSDictionary dictionaryWithObject:message forKey:@"status"] requestMethod:TWRequestMethodPOST]; //commented the  deprecated method of TWRequest class

             SLRequest *postRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/update.json"] parameters:[NSDictionary dictionaryWithObject:message forKey:@"status"]]; //use this method instead



             //Post the request
             [postRequest setAccount:acct];//set account

             //manage the response
             [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
              {
                 if(error)
                  {
                      //if there is an error while posting the tweet
                      UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"Error in posting" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                      [alert show];
                      [alert release];
                  }
                  else
                  {
                      // on successful posting the tweet
                      NSLog(@"Twitter response, HTTP response: %i", [urlResponse statusCode]);
                      UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"Successfully posted" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                      [alert show];
                      [alert release];

                  }
              }];

         }
         else
         {
             UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"You have no twitter account" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
             [alert show];
             [alert release];
         }
     }
     else
     {
         //suppose user not set any of the accounts
         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"You have no twitter account" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
         [alert show];
         [alert release];
     }
 } ];

[account release];

 }