简体   繁体   English

使用iOS SDK在Facebook上分享视频

[英]Share video on facebook with iOS SDK

I Need to share a video on facebook, and have fileURL of this video, but to share I need the asset URL of this video. 我需要在Facebook上共享视频,并具有该视频的fileURL,但是要共享,我需要此视频的资产URL。 How can I get the asset URL from a local video without using UIImagePickerViewController? 如何在不使用UIImagePickerViewController的情况下从本地视频获取资产URL?

Facebook SDK requires asset URL, so you have to pass your video file to asset library and get the new url from it. Facebook SDK需要资产URL,因此您必须将视频文件传递到资产库并从中获取新的URL。 The complete code look like: 完整的代码如下所示:

NSURL *_videoURL = [URL to local video file];
//initilize the asset library object and define the completion block
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
ALAssetsLibraryWriteVideoCompletionBlock videoWriteCompletionBlock =
^(NSURL *newURL, NSError *error) {
    if (error) {
        NSLog( @"Error writing image with metadata to Photo Library: %@", error );
    } else {
        NSLog( @"Wrote image with metadata to Photo Library %@", newURL.absoluteString);
        //share to facebook when we have new asset URL
        FBSDKShareVideo *shareVideo = [[FBSDKShareVideo alloc]init];
        shareVideo.videoURL = newURL;
        FBSDKShareVideoContent *shareContent = [[FBSDKShareVideoContent alloc] init];
        shareContent.video = shareVideo;
        [FBSDKShareDialog showFromViewController:self withContent:shareContent delegate:nil];
    }
};

//write video file and fire up facebook sharing diaglog when complete
if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:_videoURL])
{
    [library writeVideoAtPathToSavedPhotosAlbum:_videoURL
                                completionBlock:videoWriteCompletionBlock];
}

UPDATED (for iOS SDK 9.0+): 更新(适用于iOS SDK 9.0+):

 NSURL *_videoURL = [URL to local video file];
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    PHAssetChangeRequest *changeRequest= [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:_videoURL];
    _videoPlaceHolder= [changeRequest placeholderForCreatedAsset];

} completionHandler:^(BOOL success, NSError * _Nullable error) {
    if (error) {
        NSLog( @"Error writing image with metadata to Photo Library: %@", error );
    } else {
        NSLog( @"Wrote image with metadata to Photo Library %@", [_videoPlaceHolder localIdentifier]);
        //example for localidentifier:2BC8A8A8-E974-42D9-AD0F-2F463B353914/L0/001
        NSArray *id=[_videoPlaceHolder.localIdentifier componentsSeparatedByString:@"/"];
        NSString *path= [NSString stringWithFormat:@"assets-library://asset/asset.MOV?id=%@&ext=MOV",id[0]];
        _videoAssetURL = [NSURL URLWithString:path];

        dispatch_async(dispatch_get_main_queue(), ^{
            //share to facebook
            FBSDKShareVideo *shareVideo = [[FBSDKShareVideo alloc]init];
            shareVideo.videoURL = _videoAssetURL;
            FBSDKShareVideoContent *shareContent = [[FBSDKShareVideoContent alloc] init];
            shareContent.video = shareVideo;
            [FBSDKShareDialog showFromViewController:self withContent:shareContent delegate:nil];
        });
    }
}];
import FacebookShare

let shareDialog = ShareDialog(content: myContent)
shareDialog.mode = .Native
shareDialog.failsOnInvalidData = true
shareDialog.completion = { result in 
    // Handle share results
}

try shareDialog.show()

Refer Facebook Developer API for More Detail 有关更多详细信息,请参阅Facebook Developer API

https://developers.facebook.com/docs/swift/sharing/share-dialog https://developers.facebook.com/docs/swift/sharing/share-dialog

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM