top button
Flag Notify
    Connect to us
      Site Registration

Site Registration

Unable to post an article with Facebook SDK on iOS with UIActivityViewController?

+1 vote
1,380 views

Building an iOS app for reading articles. I’m using Facebook SDK to share the article link and image on Facebook.

This is the process:

  1. After clicking on bar button item on top right, UIActivityViewController gets opened on the bottom of the screen which gives option to share via fb, google , linked in etc.

  2. On clicking the Facebook button in UIActivityVIewController, default screen opens for sharing but ideally fb SDK code should get executed.

The following "if condition” does not executed.

  [AVC setCompletionHandler:^(NSString *activityType, BOOL completed)

 {
    if([activityType isEqualToString: UIActivityTypePostToFacebook]){
     FBLinkShareParams *params = [[FBLinkShareParams alloc] init];
  1. But when clicked on the cancel button of the default screen, “if condition" gets executed and app is able to share the article as expected.

Here is the code.

- (IBAction)ysshareAction:(id)sender {

NSURL *Imageurl = [NSURL URLWithString:_DetailModal1[2]];
NSData *data =  [NSData dataWithContentsOfURL:Imageurl];

UIImage *image = [[UIImage alloc] initWithData:data];

      NSURL *linkURL = [NSURL URLWithString:_DetailModal1[4]];//article url

 NSMutableAttributedString *stringText = [[NSMutableAttributedString alloc] initWithString:_DetailModal1[0]];//_DetailModal1[0] contain article title////
  [stringText addAttribute:NSLinkAttributeName value:linkURL range:NSMakeRange(0, stringText.length)];

NSArray *itemArrany = @[stringText,image,];//title is displayed but not as hyperlink.
  UIActivityViewController *AVC = [[UIActivityViewController alloc] initWithActivityItems:itemArrany applicationActivities:nil];
   AVC.excludedActivityTypes=@[];
   [AVC setCompletionHandler:^(NSString *activityType, BOOL completed)

  {
   if([activityType isEqualToString: UIActivityTypePostToFacebook]){

          FBLinkShareParams *params = [[FBLinkShareParams alloc] init];
          params.link = [NSURL URLWithString:@"https://www.youtube.com/watch?v=pa8lsBNG31c"];
                //    // If the Facebook app is installed and we can present the share dialog
        if ([FBDialogs canPresentShareDialogWithParams:params]) {

            // Present share dialog
            [FBDialogs presentShareDialogWithLink:params.link
                                          handler:^(FBAppCall *call, NSDictionary *results, NSError *error) {
                                              if(error) {
                                                  // An error occurred, we need to handle the error
                                                  // See: https://developers.facebook.com/docs/ios/errors
                                                  NSLog(@"Error publishing story: %@", error.description);
                                              } else {
                                                  // Success
                                                  NSLog(@"result %@", results);
                                              }
                                          }];

            // If the Facebook app is NOT installed and we can't present the share dialog
        } else {
            // FALLBACK: publish just a link using the Feed dialog

            // Put together the dialog parameters
            NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       @"YourStory", @"name",
                                           _DetailModal1[0], @"caption",
                                           _DetailModal1[4], @"link",
                                           _DetailModal1[2], @"picture",
                                           nil];

            // Show the feed dialog
            [FBWebDialogs presentFeedDialogModallyWithSession:nil
                                                   parameters:params
                                                      handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
                                                        if (error) {
                                                              // An error occurred, we need to handle the error
                                                              // See: https://developers.facebook.com/docs/ios/errors
                                                              NSLog(@"Error publishing story: %@", error.description);
                                                          } else {
                                                              if (result == FBWebDialogResultDialogNotCompleted) {
                                                                  // User canceled.
                                                                  NSLog(@"User cancelled.");
                                                              } else {
                                                                  // Handle the publish feed callback
                                                                  //   NSDictionary *urlParams = [self parseURLParams:[resultURL query]];

                                                                  //  if (![urlParams valueForKey:@"post_id"]) {
                                                                  // User canceled.
                                                                  NSLog(@"User cancelled.");

                                                                  //    } else {
                                                                  // User clicked the Share button
                                                                  //         NSString   *result = [NSString stringWithFormat: @"Posted story, id: %@", [urlParams valueForKey:@"post_id"]];
                                                                 //        
                                                              }
                                                          }



                                                      }];


        }
           }
            }];
 [self presentViewController:AVC animated:YES completion:nil];
      }

Any help is really appreciated.

posted Aug 7, 2014 by Daljeet

Share this question
Facebook Share Button Twitter Share Button LinkedIn Share Button

2 Answers

0 votes

You should use completed BOOL to check whether ActivityController is completed or not.

[AVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
 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.");
}
}
};
answer Aug 7, 2014 by Raju
@thanks Raju,I have applied Your code but same thing is happening.
[AVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
if(completed)
        if([activityType isEqualToString: UIActivityTypePostToFacebook]){
            FBLinkShareParams *params = [[FBLinkShareParams alloc] init];
            params.link = [NSURL URLWithString:@""];
0 votes

You can check this demo

answer Aug 11, 2014 by Raju
Similar Questions
0 votes

Here i want to know any simple way to check whether NSMutableArray contains specified object. I used for loop to find the object at index is same or not, but its get sucks processing because my array contains plenty of objects.

+1 vote

I want to check specified table contains value or its empty. I used number of complex method to find but no luck, any body can help me.

0 votes

How to convert NSMutableData to NSString.

0 votes

I am developing my project which enables ARC feature but still some api am using is not having ARC featured code, So its throughs lot of error.

Here I need help from you to disable ARC for some class.

+1 vote

I am trying to get index path of cell when we make swipe.

I used below code to recognise cell swipe

in cellForRowAtIndexPath

UISwipeGestureRecognizer *cellRightSwipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self   action:@selector(cellRightSwipeGeture:)];
    [cellRightSwipe setDirection:UISwipeGestureRecognizerDirectionRight];
    [cell addGestureRecognizer:cellRightSwipe];

and action for RightSwipe

-(void)cellRightSwipeGeture:(UISwipeGestureRecognizer *)gestureRecognizer {
NSIndexPath *indexPath ;
UITableViewCell *cell = [_subItemTbl cellForRowAtIndexPath:indexPath];}

Here i can't identify that which cell was i swiped .

...