在 iOS 8 上将视频分享到 Facebook

Posted

技术标签:

【中文标题】在 iOS 8 上将视频分享到 Facebook【英文标题】:Sharing video to Facebook on iOS 8 【发布时间】:2014-09-15 19:57:58 【问题描述】:

我有一些在 ios 7 上可以正常工作的共享代码,但从 iOS 8 开始,就不再工作了。

@IBAction func onShareButton(sender: UIButton) 
    let movie = NSBundle.mainBundle().URLForResource("IMG_0564", withExtension: "mp4")!
    let items = [movie]
    let activity = UIActivityViewController(activityItems: items, applicationActivities: nil)
    if activity.respondsToSelector("popoverPresentationController") 
        activity.popoverPresentationController?.sourceView = sender
    
    self.presentViewController(activity, animated: true, completion: nil)

正如我所说,这在 iOS 7 中运行良好,但在 iOS 8 中,当我选择分享到 Facebook 时,视频剪辑不再附加到帖子(或在分享面板中可见)。所有其他选项都有效,邮件、保存到视频、AirDrop 等似乎都可以正常工作。

我也尝试过将项目作为 AVAssets 传递:

    let items = [movie].map  AVAsset.assetWithURL($0) 

和 NSData:

    let items = [movie].map  NSData(contentsOfURL: $0) 

这两种方法都没有对问题产生任何影响。

如果我在 Objective-C 中使用道德等价物,也会出现问题,它与语言无关。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,我发现关键点是文件类型。我试图分享一个 .mp4 视频,它不会将视频附加到帖子中。一旦我使用 .mov 视频,它就对我有用。

【讨论】:

@JamesWoolfenden 我对你的评论感到困惑。林海洋的回答怎么被认为不是问题的答案?问题是如何修复在 iOS8 中不起作用的 FB 共享。 Ocean Lin 的回答是看是否是因为共享不适用于 iOS8 中的 mp4 文件,而 is 却适用于 .mov 文件。这怎么没有帮助?【参考方案2】:

好的,我尝试了一种解决方法,它对我有用。

我首先将视频数据保存到文档目录中的文件中,然后附加该文件。

//write to a file
[videoData writeToFile:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.mov"] atomically:YES];

- (IBAction)ShareVideoWihFacebook:(id)sender


    //get the file url
    NSString* path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.mov"];

    NSURL *videoURL = [NSURL fileURLWithPath:path];

    UIActivityViewController * activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[videoURL,@"Created by ..."] applicationActivities:NULL];


    [activityVC setExcludedActivityTypes:@[ UIActivityTypeMail,UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypePrint, UIActivityTypePostToWeibo,UIActivityTypeMessage,UIActivityTypeAirDrop,UIActivityTypeSaveToCameraRoll]];

    [activityVC setValue:@"My Video" forKey:@"subject"];

    [activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) 
        //NSLog(@"completed dialog - activity: %@ - finished flag: %d", activityType, completed);
    ];

    [self presentViewController:activityVC animated:TRUE completion:nil];

【讨论】:

就我而言,它们已经是文件网址。我已经尝试将它们放在应用程序资源和文档目录中,没有区别。我看到的主要区别是我使用的是 mp4 而你使用的是 .mov

以上是关于在 iOS 8 上将视频分享到 Facebook的主要内容,如果未能解决你的问题,请参考以下文章

分享视频链接到 facebook ios

通过 FB SDK for iOS 将视频分享到 facebook

如何在 iOS 6 上将多个 URL 共享到 Facebook

使用 Facebook SDK 分享视频

如何在 iOS6 上将 Facebook 框架集成到应用程序中?

iOS分享到第三方应用方法整理