我正在使用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];
}
}];
更新:如下面其他人所述,FB不再允许预填。以下是视频的另一个链接,其中提供了允许内容和不允许内容的示例:https://developers.facebook.com/docs/apps/review/prefill
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的其他部分相同的样式块。
我在iOS中用UIActivityViewController
分享了一个文本和图像。首先,我需要找到用户是否从UIActivityView
点击了facebook图标,然后用文本和图像打开facebook的分享对话框。这是分享文本和图像的唯一方法。以下是我的代码。我希望这可以节省开发人员的时间。由于Facebook已经改变了政策,而且很难分享预填文本。
请将.h文件中的UIActivityItemSource
添加为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];
当用户点击它的Facebook图标时。
- (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];
}
我发现当你安装了Facebook应用程序时会发生这种情况。通过删除Facebook应用程序,UIActivityViewController
正确显示预填充文本,图像预览也不同。它显示图像底部的网站网址。
这个扩展修复了问题,检查出来! https://github.com/alexruperez/ARFacebookShareKitActivity
从UIActivityViewController启动FBSDKShareKit而不是默认的Facebook共享表。
基于@Kashifs解决方案。这是Swift 4.2,Xcode 10和FacebookSDK 4.4中的一个版本。
import FBSDKShareKit
extension YourViewController: UIActivityItemSource{
//MARK: - ActionSheet
func showShareSheet(){
let shareStr = "Text you want to share"
let activItems = [self,shareStr, #imageLiteral(resourceName: "YourImageName")] as [Any]
let shareSheet = UIActivityViewController(activityItems: activItems, applicationActivities: nil)
self.shareSheet = shareSheet
self.present(shareSheet, animated: true, completion: nil)
}
//MARK: - FacebookPost
func postToFacebook() {
let quote = "Text you want to share"
if let URL = URL(string: "https://yourURL"){
let content : LinkShareContent = LinkShareContent(url: URL, quote: quote)
let dialog = ShareDialog(content: content)
dialog.mode = .shareSheet
dialog.presentingViewController = self
do{
try dialog.show()
}catch{
print("\(error)")
}
}
}
//MARK: - UIActivityItemSource Protocol
func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any?{
if activityType == UIActivity.ActivityType.postToFacebook{
self.shareSheet?.dismiss(animated: true, completion: {
self.postToFacebook()
})
}
return nil
}
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return ""
}
}//endReferral/Invite-Share
我欺骗UIActivityViewController
通过向共享数组添加预览图像来使用文本。