Ios 将视频共享到Facebook

Ios 将视频共享到Facebook,ios,swift,swift2,facebook-sdk-4.0,Ios,Swift,Swift2,Facebook Sdk 4.0,我正在编写一个简单的测试应用程序,将视频从iOS上传到Facebook 我发现很难在网上找到有关如何使用Swift的示例/教程,因为FacebookSDK的所有文档都是Objective-C 到目前为止,我已经在UI上设置了一个共享按钮,但它看起来是禁用的,从我读到的来看,这是因为没有内容集,但我看不出这是怎么可能的 let video_content : FBSDKShareVideoContent = FBSDKShareVideoContent() video_conte

我正在编写一个简单的测试应用程序,将视频从iOS上传到Facebook

我发现很难在网上找到有关如何使用Swift的示例/教程,因为FacebookSDK的所有文档都是Objective-C

到目前为止,我已经在UI上设置了一个共享按钮,但它看起来是禁用的,从我读到的来看,这是因为没有内容集,但我看不出这是怎么可能的

    let video_content : FBSDKShareVideoContent = FBSDKShareVideoContent()

    video_content.video = FBSDKShareVideo(videoURL: getVideoURL())

    let button : FBSDKShareButton = FBSDKShareButton()
    button.shareContent = video_content

    button.frame = CGRectMake((UIScreen.mainScreen().bounds.width - 100) * 0.5, 50, 100, 25)
    self.view.addSubview(button)
my
getVideoURL()
函数返回一个NSURL,其中肯定包含视频的url(我已将其打印到console中,并检查它是否指向先前存储在文件夹中的视频)

我查看了社交框架,很遗憾我不能使用它,因为它似乎只用于共享照片,而不能共享视频


我使用的是最新版本的Xcode、Swift和Facebook SDK。

我在objective c中使用过,我遇到了类似的问题。不知道这对swift是否有效

问题是,如果出于某种原因,视频必须存储在
NSDocumentDirectory
NSTemporaryDirectory
中,这样她才能工作。如果是你的情况就不会了

尽管在最坏的情况下,您可以将FBSDKGraphRequest与/me/Videos一起使用

我发现,通过这种方式分享你正在尝试使用的视频,可以直接从照片库中获取链接。正如你在书中看到的

目前只有
objective-c
中的示例,我希望这能对您有所帮助

- (void)uploadVideoWithoutSettingsCredentials:(NSURL *)videoUrl withTitle:(NSString *)title withDesc:(NSString *)desc withPrivacy:(NSString *)privacy
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^{
        NSError * error = nil;

        NSData * videoData = [NSData dataWithContentsOfURL:videoUrl options:0 error:&error];
        NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:4L];
        [params setObject:videoData forKey:[NSString stringWithFormat:@"%@.MOV",title]];
        [params setObject:desc forKey:@"description"];

        NSString *privacyString = @"EVERYONE";
        if (privacy.length > 0)
            privacyString = privacy;

        NSDictionary *privacyDict = [[NSDictionary alloc] initWithObjectsAndKeys: privacyString, @"value", nil];
        [params setObject:[Utils objectToJsonString:privacyDict] forKey:@"privacy"];
        dispatch_async(dispatch_get_main_queue(), ^{
            [[[FBSDKGraphRequest alloc] initWithGraphPath:@"/me/videos" parameters:params HTTPMethod:@"POST"] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {

                NSLog(@"RESPONSE!!! /me/videos");
                NSLog(@"result %@",result);
                NSLog(@"error %@",error);

                dispatch_async(dispatch_get_main_queue(), ^{
                    if (!error) {
                        [[[UIAlertView alloc] initWithTitle:@"Success" message:@"Your clip was posted!" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil] show];
                    } else {
                        [[[UIAlertView alloc] initWithTitle:@"Error!" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil] show];
                    }
                });
             }];
        });
    });
} 
您可以使用Xcode自动完成功能更改为swift sintax


你可以用swift的语法来帮助自己,我已经在我的应用程序中使用了这段代码,这对我来说很好

此代码用于Objective-C,但在转换为swift语法后,您可以在swift中使用相同的代码

我希望这对你有帮助

请尝试下面的代码

-(void) uploadVideoOnFacebook 
{
    NSURL *pathURL;
    NSData *videoData;


    pathURL = [NSURL URLWithString:self.strUploadVideoURL];
    videoData = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.strUploadVideoURL]];

    NSString *strDesc;
    strDesc = txtCaption.text;

    NSDictionary *videoObject = @{@"title": @"application Name",@"description": strDesc,[pathURL absoluteString]: videoData};
    FBRequest *uploadRequest = [FBRequest requestWithGraphPath:@"me/videos" parameters:videoObject HTTPMethod:@"POST"];
    [self.view setUserInteractionEnabled:NO];

    [uploadRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
           if (!error)
               NSLog("Success");
           else
               NSLog("Error");
    }];
}
@愤怒的鸭子

试试这个代码,它会工作的

func uploadVideoOnFacebook() {
    var pathURL: NSURL
    var videoData: NSData
    pathURL = NSURL(string: self.strUploadVideoURL)!
    videoData = NSData.dataWithContentsOfURL(NSURL(string: self.strUploadVideoURL)!)
    NSString * strDesc
    strDesc = txtCaption.text!
    var videoObject: [NSObject : AnyObject] = ["title": "application Name", "description": strDesc, pathURL.absoluteString(): videoData]
    var uploadRequest: FBRequest = FBRequest(graphPath: "me/videos", parameters: videoObject, HTTPMethod: "POST")
    self.view!.userInteractionEnabled = false
    uploadRequest.startWithCompletionHandler({(connection: FBRequestConnection, result: AnyObject, error: NSError) -> Void in
        if !error {
            NSLog("Success")
        }
        else {
            NSLog("Error")
        }
    })
}

转换成swift 3和swift 4:- 试试这个

func uploadVideoOnFacebook() {
        var pathURL: URL
        var videoData: Data
        pathURL = URL(string: "Your video url string")!
        do {
            videoData = try Data(contentsOf: URL(string: "Your video url string")!)
            print(videoData)
            var strDesc : String
            strDesc = ""
            let videoObject: [String : Any] = ["title": "application Name", "description": strDesc, pathURL.absoluteString: videoData]
            let uploadRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me/videos", parameters: videoObject, httpMethod: "POST")
            self.view!.isUserInteractionEnabled = false
            uploadRequest.start(completionHandler: {(connection: FBSDKGraphRequestConnection, result: AnyObject, error: NSError) -> Void in
                if error == error {
                    NSLog("Error")

                }
                else {
                    NSLog("Success")
                }
            } as! FBSDKGraphRequestHandler)
        } catch {
            print(error)
        }

    }
使用SDK Facebook:

视频URL videoURL必须是资源URL。您可以从UIImagePickerController获取视频资源URL

import FBSDKCoreKit
import FBSDKShareKit
import MobileCoreServices
import Photos

        func createAssetURL(url: URL, completion: @escaping (String) -> Void) {
            let photoLibrary = PHPhotoLibrary.shared()
            var videoAssetPlaceholder:PHObjectPlaceholder!
            photoLibrary.performChanges({
                let request = PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: url)
                videoAssetPlaceholder = request!.placeholderForCreatedAsset
            },
                completionHandler: { success, error in
                    if success {
                        let localID = NSString(string: videoAssetPlaceholder.localIdentifier)
                        let assetID = localID.replacingOccurrences(of: "/.*", with: "", options: NSString.CompareOptions.regularExpression, range: NSRange())
                        let ext = "mp4"
                        let assetURLStr =
                        "assets-library://asset/asset.\(ext)?id=\(assetID)&ext=\(ext)"

                        completion(assetURLStr)
                    }
            })
        }

        func shareFacebbok() {
            let content: FBSDKShareVideoContent = FBSDKShareVideoContent()
            let videoURLs = Bundle.main.url(forResource: "video", withExtension: "mp4")!
            createAssetURL(url: videoURLs) { url in
                let video = FBSDKShareVideo()
                video.videoURL = URL(string: url)
                content.video = video

                let shareDialog = FBSDKShareDialog()
                shareDialog.shareContent = content
                shareDialog.mode = .native
                shareDialog.delegate = self
                shareDialog.show()
            }
        }

我试图上传的视频在documents目录中,但我也有NSURL,我已经将其保存到相册中,我尝试过,但仍然显示禁用,好像我没有设置任何媒体内容?你有没有一个使用graph request的例子?如果你能翻译的话,有没有可能发布视频公共群组搜索swift?谢谢,我不能,因为我还没有做过任何关于swift语言的项目。@AngryDuck-你试过把上面的代码转换成swift吗?我遇到了完全相同的问题,我解决了它!视频URL应该来自库,而不是您的应用程序,所以请保存您的视频并从库中获取URL。然后它会工作。如何附加place/placeId?它对我有效。但现在我有一个问题,我可以将视频发布到我的组。但我不能将视频发布到其他组[如果我是管理员,我可以发布,否则我不能],你能帮我吗。是否可以将视频发布到公共组