Hi,
Recently I have integrated UIActivityViewController in my one of the applications for iOS 6.0 and later versions. For iOS 5.1.1, I used default "twitter.framework".
Please check below code to share information in your application through social media.
//******* Place below code into Implementation part *********//
UIPopoverController *popup;
UIActionSheet *actionSheet;
#define HTML_STR @"" //Any html string which you want to set at the time of sending an email for iOS 5.1.1 and below iOS.
#pragma mark -------------------
#pragma mark Share Button Click event
#pragma mark -------------------
-(IBAction)btnShareClick:(id)sender
{
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))
{
[self showActivityView]; // For iOS 6.0 & later ....
}
else
{
[self showActionSheet]; // For iOS 5.1.1 & below ....
}
}
#pragma mark -------------------
#pragma mark UIActivityViewController Delegate methods
#pragma mark -------------------
-(void)showActivityView // For iOS 6.0 & later ....
{
NSMutableDictionary *dictInfo = [array objectAtIndex:index];
//-- set up the data objects
NSString *Title = [NSString stringWithFormat:@"Promotion Title : %@\n",[dictInfo valueForKey:@"Title"]];
NSString *fullAddress = [NSString stringWithFormat:@"%@, %@",[dictInfo valueForKey:@"City"],[dictInfo valueForKey:@"StateName"]];
NSString *validDate = [NSString stringWithFormat:@"Date : %@ To %@ \n",[dictInfo valueForKey:@"strStartDate"],[dictInfo valueForKey:@"strEndDate"]];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.xyz.com/%@",[dictInfo valueForKey:@"url"]]];
UIImage *image = [UIImage imageNamed:@"title.png"];
NSArray *activityItems = [NSArray arrayWithObjects:Title,
fullAddress,
validDate,
url,
image,nil];
//-- initialising the activity view controller
UIActivityViewController *activityView = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
//-- define the activity view completion handler
activityView.completionHandler = ^(NSString *activityType, BOOL completed)
{
NSLog(@"Activity Type selected: %@", activityType);
if (completed)
{
NSLog(@"Selected activity was performed.");
}
else
{
if (activityType == NULL) {
NSLog(@"User dismissed the view controller without making a selection.");
}
else {
NSLog(@"Activity was not performed.");
}
}
}
};
//-- define activity to be excluded (if any)
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
activityView.excludedActivityTypes = [NSArray arrayWithObjects:UIActivityTypeAddToReadingList,UIActivityTypeAirDrop,nil];
}
else
{
activityView.excludedActivityTypes = [NSArray arrayWithObjects:UIActivityTypeSaveToCameraRoll,nil];
}
if (IS_IPAD)
{
if (self.popup) {
[self.popup dismissPopoverAnimated:NO];
popup = nil;
}
self.popup = [[UIPopoverController alloc] initWithContentViewController:activityView];
//UIBarButtonItem *barBtn = (UIBarButtonItem *)[self.navigationItem.rightBarButtonItems objectAtIndex:3];
self.popup.delegate = self;
[self.popup presentPopoverFromRect:selectedButton.frame inView:selectedButton.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
else
{
//-- show the activity view controller
[self presentViewController:activityView
animated:YES completion:^{
Appdel.objTab.hidden=YES;
}];
}
}
#pragma mark ------------------------------
#pragma mark UIPopoverController delegate method
#pragma mark ------------------------------
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
if (self.popup) {
[self.popup dismissPopoverAnimated:NO];
popup = nil;
}
}
#pragma mark ------------------------------
#pragma mark UIActionSheet delegate method
#pragma mark ------------------------------
-(void)showActionSheet // For iOS 5.1.1 & below
{
if (actionSheet) {
[actionSheet dismissWithClickedButtonIndex:3 animated:YES];
actionSheet = nil;
}
actionSheet = [[UIActionSheet alloc]initWithTitle:@"Share with"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:@"Email",@"Facebook",@"Twitter",@"Cancel",nil];
if (IS_IPAD)
{
[actionSheet showFromRect:selectedButton.frame inView:selectedButton.superview animated:YES];
}
else
{
[actionSheet showInView:self.view];
}
}
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex // For iOS 5.1.1 & below
{
switch (buttonIndex)
{
case 0:
NSLog(@"Email");
{
[self openMailComposer];
}
break;
case 1:
NSLog(@"Facebook");
{
[Appdel.HUD show:YES];
[self performSelector:@selector(dofacebookLogin) withObject:nil afterDelay:0.5];
}
break;
case 2:
NSLog(@"Twitter");
{
[self sendTwitToYourAccout];
}
break;
case 3:
NSLog(@"Cancel");
break;
default:
break;
}
}
- (void)actionSheet:(UIActionSheet *)actionSheet1 didDismissWithButtonIndex:(NSInteger)buttonIndex // For iOS 5.1.1 & below
{
if (actionSheet) {
[actionSheet dismissWithClickedButtonIndex:3 animated:YES];
actionSheet = nil;
}
}
#pragma mark ------------------------------
#pragma mark MFMailComposeViewController delegate method
#pragma mark ------------------------------
-(void)openMailComposer // For iOS 5.1.1 & below
{
NSMutableDictionary *dictInfo = [array objectAtIndex:index];
NSString *Title = [NSString stringWithFormat:@"Title : %@</br></br>",[dictInfo valueForKey:@"Title"]];
NSString *fullAddress = [NSString stringWithFormat:@"%@, %@",[dictInfo valueForKey:@"City"],[dictInfo valueForKey:@"State"]];
NSString *validDate = [NSString stringWithFormat:@"Date : %@ To %@ </br></br>",[dictInfo valueForKey:@"strStartDate"],[dictInfo valueForKey:@"strEndDate"]];
NSString *strUrl = [NSString stringWithFormat:@"http://www.xyz.com/%@",[dictInfo valueForKey:@"url_name"]];
NSString *combinedString = [NSString stringWithFormat:@"%@ %@ %@ %@",Title,fullAddress,validDate,strUrl];
NSString *string = [NSString stringWithFormat:HTML_STR,combinedString,strUrl,[dictInfo valueForKey:@"ImageUrl"]];
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:@"Send Mail"];
NSArray *toRecipients = [NSArray arrayWithObject:@""];
[picker setToRecipients:toRecipients];
NSString *emailBody = [NSString stringWithFormat:@"%@",string];
[picker setMessageBody:emailBody isHTML:YES];
picker.navigationBar.tintColor=[UIColor colorWithRed:0.976 green:0.612 blue:0.067 alpha:1];
[self presentModalViewController:picker animated:YES];
picker = nil;
toRecipients = nil;
}
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
[controller dismissModalViewControllerAnimated:NO];
}
#pragma mark ------------------------------
#pragma mark TWTweetComposeViewController delegate method
#pragma mark ------------------------------
-(void)sendTwitToYourAccout// For iOS 5.1.1 & below
{
if ([TWTweetComposeViewController canSendTweet])
{
NSMutableDictionary *dictInfo = [array objectAtIndex:index];
NSString *promotionTitle = [NSString stringWithFormat:@"Title : %@",[dictInfo valueForKey:@"Title"]];
NSString *validDate = [NSString stringWithFormat:@"Date : %@ To %@",[dictInfo valueForKey:@"strStartDate"],[dictInfo valueForKey:@"strEndDate"]];
NSString *strUrl = [NSString stringWithFormat:@"http://www.xyz.com/%@",[dictInfo valueForKey:@"url_name"]];
// Initialize Tweet Compose View Controller
TWTweetComposeViewController *vc = [[TWTweetComposeViewController alloc] init];
// Settin The Initial Text
[vc setInitialText:[NSString stringWithFormat:@"%@\n %@",Title,validDate]];
// Adding an Image
UIImage *image = [UIImage imageNamed:@"title.png"];
[vc addImage:image];
// Adding a URL
NSURL *url = [NSURL URLWithString:strUrl];
[vc addURL:url];
// Setting a Completing Handler
[vc setCompletionHandler:^(TWTweetComposeViewControllerResult result) {
[self dismissModalViewControllerAnimated:YES];
}];
// Display Tweet Compose View Controller Modally
[self presentViewController:vc animated:YES completion:nil];
}
else
{
// Show Alert View When The Application Cannot Send Tweets
NSString *message = @"The application cannot send a tweet at the moment. This is because it cannot reach Twitter or you don't have a Twitter account associated with this device.";
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Warning !" message:message delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
[alertView show];
}
}
#pragma mark ------------------------------
#pragma mark FacebookSDK delegate method
#pragma mark ------------------------------
-(void) dofacebookLogin // For iOS 5.1.1 & below
{
[SCFacebook loginCallBack:^(BOOL success, id result) {
if (success) {
[self sendFeedTofacebook];
}
else
{
Alert(@"Warning !", result);
}
}];
}
- (void)sendFeedTofacebook // For iOS 5.1.1 & below
{
NSMutableDictionary *dictPromotionInfo = [array objectAtIndex:index];
NSString *Title = [NSString stringWithFormat:@"Title : %@\n",[dictInfo valueForKey:@"Title"]];
UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[dictInfo valueForKey:@"Image"]]]];
NSString *validDate = [NSString stringWithFormat:@"Date : %@ To %@ \n",[dictInfo valueForKey:@"strStartDate"],[dictInfo valueForKey:@"strEndDate"]];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.xyz.com/%@",[dictInfo valueForKey:@"url_name"]]];
[SCFacebook feedPostWithPhoto:image caption:[NSString stringWithFormat:@"%@ %@ %@ %@",Title,validDate,url] callBack:^(BOOL success, id result)
{
if (success) {
Alert(@"Info !", @"Your feed has been posted successfully over Facebook.");
}
else
{
Alert(@"Warning !", result);
}
}];
}
Thanks & Regards,
-----------------------------
Nilesh M. Prajapati