用于Facebook的UIActivityViewController不显示默认文本

C6S*_*ver 43 xcode facebook objective-c uiactivityviewcontroller

我正在使用UIActivityViewController,它提供了一些默认文本和链接.使用所有社交媒体(短信,电子邮件,推特),将显示默认文本和URL.但是,在显示URL图像时使用FB,默认文本不显示(它只是空白).以下是代码:

    NSString *shareStr = [NSString stringWithFormat:@""some text"];
    NSURL *website = [NSURL URLWithString:@"website"];
    NSArray *shareAray = @[shareStr,website];

    [self viewWillDisappear:YES];

    UIActivityViewController *activityController = [[UIActivityViewController alloc]initWithActivityItems:shareAray
                                                                                    applicationActivities:nil];

    if([activityController respondsToSelector:@selector(popoverPresentationController)] )
        activityController.popoverPresentationController.barButtonItem = self.shareButton;


    [self presentViewController:activityController
                       animated:YES completion:nil];

    [activityController setCompletionHandler:^(NSString *activityType, BOOL completed){
        if (!activityType || UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        {
            [self viewWillAppear:YES];
        }
    }];
Run Code Online (Sandbox Code Playgroud)

更新:如下面其他人所述,FB不再允许预填.以下是视频的另一个链接,其中提供了允许内容和不允许内容的示例:https: //developers.facebook.com/docs/apps/review/prefill

Dee*_*kie 46

Facebook似乎不再希望开发人员用文字预填帖子.来自https://developers.facebook.com/docs/sharing/ios#ios-integration:

iOS共享表的使用受Facebook平台政策的约束,包括2.3节规定应用程序可能不预先填写.在共享表的上下文中,这意味着应用程序可能不会预先填写共享表的initialText字段,其中包含之前使用该应用程序的人员未输入的内容.

似乎他们更喜欢开发人员使用SDK:

虽然您可以直接使用iOS本机视图控制器API(共享表),但有几个原因可以使用Facebook SDK提供的本机iOS共享对话框.使用本机共享对话框提供了一种快速方法来测试人们已在iOS 6+设备上登录Facebook.此API还使用与Facebook SDK的其他部分相同的样式块.


Kas*_*hif 5

我已经做了一个技巧来分享UIActivityViewControlleriOS中的文本和图像.首先,我需要找到用户是否点击了facebook图标UIActivityView,然后用文本和图像打开facebook的分享对话框.这是分享文本和图像的唯一方法.以下是我的代码.我希望这可以节省开发人员的时间.由于Facebook已经改变了政策,而且很难分享预填文本.

请将UIActivityItemSource.h文件添加为Delegate

当用户单击共享按钮显示时,将调用此方法UIActivityViewController.

NSString *textObject = [NSString stringWithFormat:@"%@, %@",shareString,timeDuration];
NSMutableArray *activityItems = [NSMutableArray arrayWithObjects:self, textObject, shareImage, nil];
activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

当用户点击它的Facebook图标时.

pragma mark - UIActivityItemSource Protocol

- (id)activityViewController:(UIActivityViewController )activityViewController itemForActivityType:(NSString )activityType {

    if ([activityType isEqualToString:UIActivityTypePostToFacebook]) {

        [self dismissViewControllerAnimated:activityController completion:nil];
        [self performSelector:@selector(postToFacebook) withObject:self afterDelay:1.0];}
    return nil;
}

-(void)postToFacebook {

    [FBSDKSettings setAppID:@""];
    NSArray *imagesListingArray = [[item objectForKey:@"imgs"] valueForKey:@"img"];
    NSString * shareImage = [imagesListingArray objectAtIndex:0];

    FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
    content.contentTitle = @"F-Spot";
    content.contentDescription = [NSString stringWithFormat:@"%@  %@", [item valueForKey:@"event_name"],[item valueForKey:@"duration"]];
    content.imageURL = [NSURL URLWithString:shareImage];

    FBSDKShareDialog *shareDialog = [[FBSDKShareDialog alloc] init];
    shareDialog.mode = FBSDKShareDialogModeNative;
    if(shareDialog.canShow) {
        shareDialog.mode = FBSDKShareDialogModeFeedBrowser;
    }
    shareDialog.shareContent = content;
    shareDialog.delegate = self;
    [shareDialog show];

}
Run Code Online (Sandbox Code Playgroud)