用于Facebook的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]; } }]; 

更新:正如其他人在下面说的,FB不再允许预填充。 这里是另一个video的链接,给出了什么是允许的,什么不是: https : //developers.facebook.com/docs/apps/review/prefill

看起来Facebook不再希望开发人员用文本预先填写post。 从https://developers.facebook.com/docs/sharing/ios#ios-integration

iOS共享表的使用受Facebook平台政策的约束,其中包括第2.3节,其中指出,应用程序可能不会预先填写。 在分享表的上下文中,这意味着应用程序可能不会预先在分享表的initialText字段中填入早些时候在他们使用应用程序时未input的内容。

似乎他们宁愿开发者使用SDK:

虽然您可以直接使用iOS本机视图控制器API(共享表单),但使用Facebook SDK提供的本机iOS共享对话框有以下几个原因。 使用本地共享对话框提供了一种快速testing方式,即人们在其iOS 6+设备上loginFacebook。 该API也使用与Facebook SDK的其他部分相同的样式块。

我已经发现,当你有Facebook应用程序安装。 通过删除Facebook应用程序UIActivityViewController正确显示预填充文本和图像预览也是不同的。 它显示图像底部的网站url。

我已经做了一个窍门,从iOS中的UIActivityViewController共享文本和图像。 首先,我需要find用户是否从UIActivityView点击了Facebook图标,然后用文本和图像打开Facebook的共享对话框。 这是分享文字和图片的唯一方法。 以下是我的代码。 我希望这可以为开发人员节省时间。 由于Facebook已经改变了政策,很难分享预填文本。

请将UIActivityItemSource作为Delegate添加到.h文件中

当用户点击共享button来显示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的图标。

编译标记 – UIActivityItemSource协议

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

这个扩展修复了这个问题,查看一下! https://github.com/alexruperez/ARFacebookShareKitActivity

从UIActivityViewController启动FBSDKShareKit而不是默认的Facebook共享表。

我欺骗UIActivityViewController通过向共享数组添加预览图像来使用文本。