Facebook Share Dialog in iOS

前端 未结 4 958
粉色の甜心
粉色の甜心 2021-01-14 05:56

I am trying to implement the native Share dialog from Facebook in a sample application.

Seem to have some problem in doing so.

Things I have done so far:

相关标签:
4条回答
  • 2021-01-14 06:23

    This works for me:

    NSString *url = @"myUrl";
    FBLinkShareParams* params = [[FBLinkShareParams alloc]init];
    params.link = [NSURL URLWithString:url];
    
    if([FBDialogs canPresentShareDialogWithParams:params]){
            [FBDialogs presentShareDialogWithLink:  [NSURL URLWithString:url]
            name:   @"Name"
            caption:    @"Caption"
            description:    @"Description"
            picture:    nil
            clientState:    nil
            handler:    nil];
        }
    
        else{
              [...]
        }
    
    0 讨论(0)
  • 2021-01-14 06:34

    Do you have Facebook App installed on your device? The Share dialog only works if you have the Facebook app installed.

    From the Share dialog documentation :

    Tip 1: What if people don't have the Facebook app installed?

    The Share dialog can't be displayed if people don't have the Facebook app installed. Apps can detect this by calling [FBDialogs canPresentShareDialogWithParams:nil]; and may disable or hide a sharing button or fall back to the Feed dialog to share on the web. See the HelloFacebookSample included with the iOS SDK for an example.

    From what I saw, iOS 6 will return NO for + canPresentShareDialogWithParams:. It only responds to + canPresentOSIntegratedShareDialogWithSession:. But I could be wrong here.

    Anyways, this is how I do it - 1. For sharing links :

    if ([FBDialogs canPresentShareDialogWithParams:nil]) {
    
        NSURL* url = [NSURL URLWithString:link.url];
        [FBDialogs presentShareDialogWithLink:url
                                  handler:^(FBAppCall *call, NSDictionary *results, NSError *error) {
                     if(error) {
                           NSLog(@"Error: %@", error.description);
                     } else {
                           NSLog(@"Success");
                     }
         }];
    }
    

    2.For OpenGraph calls :

    id<FBGraphObject> pictureObject =
        [FBGraphObject openGraphObjectForPostWithType:@"your_namespace:picture"
                                                title:image.title
                                                image:image.thumbnailUrl
                                                  url:image.url
                                          description:@""];
    
        id<FBOpenGraphAction> action = (id<FBOpenGraphAction>)[FBGraphObject graphObject];
        [action setObject:pictureObject forKey:@"picture"];
    
        [FBDialogs presentShareDialogWithOpenGraphAction:action
                                              actionType:@"your_namespace:action_name"
                                     previewPropertyName:@"picture"
                                                 handler:^(FBAppCall *call, NSDictionary *results, NSError *error) {
                                                     if(error) {
                                                         NSLog(@"Error: %@", error.description);
                                                     } else {
                                                         NSLog(@"Success");
                                                     }
                                                 }];
    

    Check out other ways to share on iOS here

    Hope this helps.

    0 讨论(0)
  • 2021-01-14 06:38
    - (IBAction)shareButtonClicked:(id)sender
    {
        // if the session is closed, then we open it here, and establish a handler for state changes
    
        [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *session,FBSessionState state, NSError *error)
         {
             if (error)
             {
                 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                 [alertView show];
             }
             else if(session.isOpen)
             {
                 NSString *str_img = [NSString stringWithFormat:@"https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png"];
    
                 NSDictionary *params = @{
                                          @"name" :[NSString stringWithFormat:@"Facebook SDK for iOS"],
                                          @"caption" : @"Build great Apps",
                                          @"description" :@"Welcome to iOS world",
                                          @"picture" : str_img,
                                          @"link" : @"",
                                          };
    
                 // Invoke the dialog
                 [FBWebDialogs presentFeedDialogModallyWithSession:nil
                                                        parameters:params
                                                           handler:
                  ^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
                      if (error) {
                          //NSLog(@"Error publishing story.");
                          [self.indicator stopAnimating];
                      } else {
                          if (result == FBWebDialogResultDialogNotCompleted) {
                              //NSLog(@"User canceled story publishing.");
                              [self.indicator stopAnimating];
                          } else {
                              //NSLog(@"Story published.");
                              [self.indicator stopAnimating];
                          }
                      }}];
             }
    
         }];
    
        return;
    }
    
    0 讨论(0)
  • 2021-01-14 06:47
    - (IBAction)btn_facebook:(id)sender {
        [self performSelector:@selector(fb_func) withObject:nil afterDelay:0.0];
    }
    
    -(void)fb_func
    {
        // if the session is closed, then we open it here, and establish a handler for state changes
    
        [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *session,FBSessionState state, NSError *error)
         {
             if (error)
             {
                 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                 [alertView show];
             }
             else if(session.isOpen)
             {
                 NSString *str_link = @"";
                 NSLog(@"%@",str_link);
    
                 NSDictionary *params = @{
                                          @"name" :@"name",
                                          @"caption" : @"Description",
                                          @"description" :@"test",
                                          @"picture" : PostimageToPintresrAndFacebook,
                                          @"link" : @"url",
                                          };
    
                 // Invoke the dialog
                 [FBWebDialogs presentFeedDialogModallyWithSession:nil
                                                        parameters:params
                                                           handler:
                  ^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
                      if (error) {
                          NSLog(@"Error publishing story.");
                      } else {
                          if (result == FBWebDialogResultDialogNotCompleted) {
                              NSLog(@"User canceled story publishing.");
                          } else {
                              NSLog(@"Story published.");
                          }
                      }}];
             }
         }];
        return;
    
    }
    
    0 讨论(0)
提交回复
热议问题