简体   繁体   中英

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. How can I get the asset URL from a local video without using UIImagePickerViewController?

Facebook SDK requires asset URL, so you have to pass your video file to asset library and get the new url from it. 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+):

 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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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