Search code examples
ios5twitter

Is auto share supported in iOS's twitter framework?


I have a button called twitter,when I click this normally a view is presented for tweeting i.e.TWTweetComposeViewController . I have two ways of tweeting a message i.e. auto-share and normal share.Normal share is working perfectly but I have the doubt on how to do the same in auto-share means automatically tweet some default message when I click twitter button instead of showing the TWTweetComposeViewController view and click on done button.


Solution

  • Finally I searched so many questions related to Twitter in ios5 and also read in twitter Developer Document and tried this answer.I think this is one of the solution to do auto share.

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