如何使用Facebook iOS SDK 4.0 FBSDKShareDialog分享NSData或phasset视频

Fab*_*abe 5 video facebook nsdata ios

我注意到你可以简单地将NSData视频分享给facebook messenger:

NSData *videoData = [NSData dataWithContentsOfURL:localVideoUrl];
[FBSDKMessengerSharer shareVideo:videoData withOptions:options];
Run Code Online (Sandbox Code Playgroud)

但是当我使用本地视频文件或phasset分享到Facebook Feed时,我遇到了同样的困难.

FBSDKShareVideo *video = [FBSDKShareVideo videoWithVideoURL:localVideoUrl];
FBSDKShareVideoContent *content = [[FBSDKShareVideoContent alloc] init];
[content setVideo: video];
[FBSDKShareDialog showFromViewController:nil withContent:content delegate:self];
Run Code Online (Sandbox Code Playgroud)

com.facebook.sdk:FBSDKErrorDeveloperMessageKey =原生对话框只允许使用资产文件URL

我如何使用phasset视频进行类似的不错的应用切换行为?

谢谢!

小智 12

使用新的Facebook SDK 4.0,视频必须作为资产URL传递.您必须将本地视频路径复制到资产库,并使用生成的URL在Facebook上共享.

步骤1:

NSURL *videoURL=[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"IMG_1007" ofType:@"mp4"]];
[self saveToCameraRoll:videoURL];
Run Code Online (Sandbox Code Playgroud)

第2步:

- (void)saveToCameraRoll:(NSURL *)srcURL
{
    NSLog(@"srcURL: %@", srcURL);

    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);
            url_new  = newURL;
        }
    };

    if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:srcURL])
    {
        [library writeVideoAtPathToSavedPhotosAlbum:srcURL
                                    completionBlock:videoWriteCompletionBlock];
    }
}
Run Code Online (Sandbox Code Playgroud)

第3步:

FBSDKShareDialog *shareDialog = [[FBSDKShareDialog alloc] init];    
NSURL *videoURL = url_new;
FBSDKShareVideo *video = [[FBSDKShareVideo alloc] init];
video.videoURL = videoURL;
FBSDKShareVideoContent *content = [[FBSDKShareVideoContent alloc] init];   
content.video = video;
shareDialog.shareContent = content;
shareDialog.delegate = self;
[shareDialog show];
Run Code Online (Sandbox Code Playgroud)

如果您有任何其他疑问,请告诉我.

谢谢!

  • 谢谢你的建议!这可行,但我想分享的视频已经存在于照片库中,因为它是PHAsset.我不想创建另一个副本.我可以暂时在本地保存PHAsset视频(我如何解决其他一些相关的共享问题)或使用其数据.但根据我的知识,还没有办法将PHAsset与ALAsset联系起来?使用Facebook SDK 4.0 FBSDKShareDialog无法分享PhotoKit视频? (3认同)