繁体   English   中英

使用iOS SDK在Facebook上分享视频

[英]Share video on facebook with iOS SDK

我需要在Facebook上共享视频,并具有该视频的fileURL,但是要共享,我需要此视频的资产URL。 如何在不使用UIImagePickerViewController的情况下从本地视频获取资产URL?

Facebook SDK需要资产URL,因此您必须将视频文件传递到资产库并从中获取新的URL。 完整的代码如下所示:

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

更新(适用于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()

有关更多详细信息,请参阅Facebook Developer API

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

暂无
暂无

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

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