iOS的Twitter框架是否支持自动共享?

时间:2012-08-20 12:23:23

标签: ios5 twitter

我有一个名为twitter的按钮,当我点击此按钮时,通常会显示一个视图,用于推文,即TWTweetComposeViewController。我有两种方式发送消息,即自动共享和正常共享。正常共享工作正常,但我怀疑如何在自动共享中执行相同操作意味着当我单击twitter按钮而不是显示时自动发送一些默认消息TWTweetComposeViewController视图,然后点击完成按钮。

2 个答案:

答案 0 :(得分:3)

最后,我在ios5中搜索了很多与Twitter有关的问题,并在twitter Developer Document中阅读并尝试了这个答案。我认为这是进行自动分享的解决方案之一。

ACAccountStore *account = [[ACAccountStore alloc] init];
        ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

        // Request access from the user to access their Twitter account
        [account requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
            // Did user allow us access?
            if (granted == YES)
            {
                // Populate array with all available Twitter accounts
                NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType];

                // Sanity check
                if ([arrayOfAccounts count] > 0) 
                {
                    // Keep it simple, use the first account available
                    ACAccount *acct = [arrayOfAccounts objectAtIndex:0];

                    NSURL *url = 
                    [NSURL URLWithString:
                     @"https://upload.twitter.com/1/statuses/update_with_media.json"];

                    //  Create a POST request for the target endpoint
                    TWRequest *request = 
                    [[TWRequest alloc] initWithURL:url 
                                        parameters:nil 
                                     requestMethod:TWRequestMethodPOST];

                    //  self.accounts is an array of all available accounts; 
                    //  we use the first one for simplicity
                    [request setAccount:acct];

                    //  The "larry.png" is an image that we have locally
                    UIImage *image = (UIImage *)[dictionarydata valueForKey:@"image"];
                    NSLog(@"%@",image);
                    if (image!=nil) {

                        //  Obtain NSData from the UIImage 
                        NSData *imageData = UIImagePNGRepresentation(image);


                        //  Add the data of the image with the 
                        //  correct parameter name, "media[]"
                        [request addMultiPartData:imageData 
                                         withName:@"media[]" 
                                             type:@"multipart/form-data"];

                        // NB: Our status must be passed as part of the multipart form data
                        NSString *status = [NSString stringWithFormat:@"%@ %@ %@",[dictionaryData valueForKey:@"firstname"],[dictionaryData valueForKey:@"lastname"],[dictionarydata valueForKey:@"title"]];

                        //  Add the data of the status as parameter "status"
                        [request addMultiPartData:[status dataUsingEncoding:NSUTF8StringEncoding] 
                                         withName:@"status" 
                                             type:@"multipart/form-data"];
                        //  Perform the request.  
                        //    Note that -[performRequestWithHandler] may be called on any thread,
                        //    so you should explicitly dispatch any UI operations to the main thread 
                        [request performRequestWithHandler:
                         ^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
                             NSDictionary *dict = 
                             (NSDictionary *)[NSJSONSerialization 
                                              JSONObjectWithData:responseData options:0 error:nil];

                             // Log the result
                             NSLog(@"%@", dict);

                             dispatch_async(dispatch_get_main_queue(), ^{
                                 // perform an action that updates the UI...
                             });
                         }];
                    }else{
                        NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/1/statuses/update.json"];
                        NSDictionary *p = [NSDictionary dictionaryWithObjectsAndKeys:
                                           [NSString stringWithFormat:@"%@ %@ %@",[dictionaryData valueForKey:@"firstname"],[dictionaryData valueForKey:@"lastname"],[dictionarydata valueForKey:@"title"]], @"status",
                                           nil
                                           ];
                        TWRequest *postRequest = [[TWRequest alloc]
                                                  initWithURL:   url
                                                  parameters:    p
                                                  requestMethod: TWRequestMethodPOST
                                                  ];

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

                        // Block handler to manage the response
                        [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
                            NSLog(@"Twitter response, HTTP response: %i", [urlResponse statusCode]);
                        }];
}
                }
            }
        }];

答案 1 :(得分:0)

以下是您可以做的事情如果您一直在使用Twitter框架:

NSString *statusesShowEndpoint = @"https://api.twitter.com/1.1/statuses/update.json";
NSDictionary *params = @{@"status": @"Great101 - https://share.livefrom.me/p/md5mrCp"};

NSError *clientError;
NSURLRequest *request = [[[Twitter sharedInstance] APIClient]
                         URLRequestWithMethod:@"POST"
                         URL:statusesShowEndpoint
                         parameters:params
                         error:&clientError];

if (request) {
    [[[Twitter sharedInstance] APIClient]
     sendTwitterRequest:request
     completion:^(NSURLResponse *response,
                  NSData  *data,
                  NSError *connectionError) {
         if (data) {
             // handle the response data e.g.
             NSError *jsonError;
             NSDictionary *dicResponse = [NSJSONSerialization
                                           JSONObjectWithData:data
                                           options:0
                                           error:&jsonError];
             NSLog(@"%@",[dicResponse description]);
         }
         else {
             NSLog(@"Error code: %ld | Error description: %@", (long)[connectionError code], [connectionError localizedDescription]);
         }
     }];
}
else {
    NSLog(@"Error: %@", clientError);
}