【问题标题】:How to share NSData or phasset video using Facebook iOS SDK 4.0 FBSDKShareDialog如何使用 Facebook iOS SDK 4.0 FBSDKShareDialog 共享 NSData 或 phasset 视频
【发布时间】:2015-06-05 20:17:26
【问题描述】:

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

NSData *videoData = [NSData dataWithContentsOfURL:localVideoUrl];
[FBSDKMessengerSharer shareVideo:videoData withOptions:options];

但我在分享到 Facebook 提要时遇到了困难 使用本地视频文件或 phasset。

FBSDKShareVideo *video = [FBSDKShareVideo videoWithVideoURL:localVideoUrl];
FBSDKShareVideoContent *content = [[FBSDKShareVideoContent alloc] init];
[content setVideo: video];
[FBSDKShareDialog showFromViewController:nil withContent:content delegate:self];

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

如何使用 phasset 视频获得类似的良好应用切换行为?

谢谢!

【问题讨论】:

    标签: ios facebook video nsdata


    【解决方案1】:

    请检查: 1) 视频大小必须小于 12MB。 2)分享的人应该安装Facebook for iOS客户端,26.0或更高版本。

    您应该使用以下行:

    NSURL *movieUrl = [info objectForKey:UIImagePickerControllerReferenceURL];
    

    而不是

    NSURL *movieUrl = [info objectForKey:UIImagePickerControllerMediaURL];
    

    【讨论】:

      【解决方案2】:

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

      第一步:

      NSURL *videoURL=[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"IMG_1007" ofType:@"mp4"]];
      [self saveToCameraRoll:videoURL];
      

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

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

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

      谢谢!

      【讨论】:

      • 感谢您的建议!这会起作用,但我想分享的视频已经存在于照片库中,因为它是一个 PHAsset。我不想创建另一个副本。我可以暂时在本地保存 PHAsset 视频(我如何解决其他一些相关的共享问题)或使用它的数据。但是据我所知,真的没有办法将 PHAsset 连接到 ALAsset 吗?无法使用 Facebook SDK 4.0 FBSDKShareDialog 分享 PhotoKit 视频?
      • 这是生成的新网址!! assets-library://asset/asset.mp4?id=E121FF88-B0AB-4EE9-BD60-E676617BDC54&ext=mp4
      • 可以在下面不显示任何模式并在视频中添加描述和标题的情况下执行此操作吗?
      • 我不认为您可以覆盖模式呈现样式并使用共享对话框附加任何文本或链接。
      • 如果我想从我自己的服务器 url 分享视频,比如-myownserverurl.com/myvide.mp4 怎么办?
      猜你喜欢
      • 2015-11-07
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 2017-09-28
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多