1

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

3.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.

Daljeet
  • 1,573
  • 2
  • 20
  • 40
  • Did you find any workaround for this? I am trying to achieve something similar. Any leads will be helpful – Shantanu Dec 04 '14 at 09:24
  • @Shantanu yes tell me how can i help you.. – Daljeet Dec 09 '14 at 12:15
  • I actually did some R & D on the problem and figured out that we cant control the activity controller. I instead built a custom view which looks like a activity controller and handled the actions accordingly. – Shantanu Dec 10 '14 at 07:28

0 Answers0