Ios 将视频共享到Facebook
我正在编写一个简单的测试应用程序,将视频从iOS上传到Facebook 我发现很难在网上找到有关如何使用Swift的示例/教程,因为FacebookSDK的所有文档都是Objective-C 到目前为止,我已经在UI上设置了一个共享按钮,但它看起来是禁用的,从我读到的来看,这是因为没有内容集,但我看不出这是怎么可能的Ios 将视频共享到Facebook,ios,swift,swift2,facebook-sdk-4.0,Ios,Swift,Swift2,Facebook Sdk 4.0,我正在编写一个简单的测试应用程序,将视频从iOS上传到Facebook 我发现很难在网上找到有关如何使用Swift的示例/教程,因为FacebookSDK的所有文档都是Objective-C 到目前为止,我已经在UI上设置了一个共享按钮,但它看起来是禁用的,从我读到的来看,这是因为没有内容集,但我看不出这是怎么可能的 let video_content : FBSDKShareVideoContent = FBSDKShareVideoContent() video_conte
let video_content : FBSDKShareVideoContent = FBSDKShareVideoContent()
video_content.video = FBSDKShareVideo(videoURL: getVideoURL())
let button : FBSDKShareButton = FBSDKShareButton()
button.shareContent = video_content
button.frame = CGRectMake((UIScreen.mainScreen().bounds.width - 100) * 0.5, 50, 100, 25)
self.view.addSubview(button)
mygetVideoURL()
函数返回一个NSURL,其中肯定包含视频的url(我已将其打印到console中,并检查它是否指向先前存储在文件夹中的视频)
我查看了社交框架,很遗憾我不能使用它,因为它似乎只用于共享照片,而不能共享视频
我使用的是最新版本的Xcode、Swift和Facebook SDK。我在objective c中使用过,我遇到了类似的问题。不知道这对swift是否有效 问题是,如果出于某种原因,视频必须存储在
NSDocumentDirectory
或NSTemporaryDirectory
中,这样她才能工作。如果是你的情况就不会了
尽管在最坏的情况下,您可以将FBSDKGraphRequest与/me/Videos一起使用
我发现,通过这种方式分享你正在尝试使用的视频,可以直接从照片库中获取链接。正如你在书中看到的
目前只有objective-c
中的示例,我希望这能对您有所帮助
- (void)uploadVideoWithoutSettingsCredentials:(NSURL *)videoUrl withTitle:(NSString *)title withDesc:(NSString *)desc withPrivacy:(NSString *)privacy
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^{
NSError * error = nil;
NSData * videoData = [NSData dataWithContentsOfURL:videoUrl options:0 error:&error];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:4L];
[params setObject:videoData forKey:[NSString stringWithFormat:@"%@.MOV",title]];
[params setObject:desc forKey:@"description"];
NSString *privacyString = @"EVERYONE";
if (privacy.length > 0)
privacyString = privacy;
NSDictionary *privacyDict = [[NSDictionary alloc] initWithObjectsAndKeys: privacyString, @"value", nil];
[params setObject:[Utils objectToJsonString:privacyDict] forKey:@"privacy"];
dispatch_async(dispatch_get_main_queue(), ^{
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"/me/videos" parameters:params HTTPMethod:@"POST"] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
NSLog(@"RESPONSE!!! /me/videos");
NSLog(@"result %@",result);
NSLog(@"error %@",error);
dispatch_async(dispatch_get_main_queue(), ^{
if (!error) {
[[[UIAlertView alloc] initWithTitle:@"Success" message:@"Your clip was posted!" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil] show];
} else {
[[[UIAlertView alloc] initWithTitle:@"Error!" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil] show];
}
});
}];
});
});
}
您可以使用Xcode自动完成功能更改为swift sintax
你可以用swift的语法来帮助自己,我已经在我的应用程序中使用了这段代码,这对我来说很好 此代码用于Objective-C,但在转换为swift语法后,您可以在swift中使用相同的代码 我希望这对你有帮助 请尝试下面的代码
-(void) uploadVideoOnFacebook
{
NSURL *pathURL;
NSData *videoData;
pathURL = [NSURL URLWithString:self.strUploadVideoURL];
videoData = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.strUploadVideoURL]];
NSString *strDesc;
strDesc = txtCaption.text;
NSDictionary *videoObject = @{@"title": @"application Name",@"description": strDesc,[pathURL absoluteString]: videoData};
FBRequest *uploadRequest = [FBRequest requestWithGraphPath:@"me/videos" parameters:videoObject HTTPMethod:@"POST"];
[self.view setUserInteractionEnabled:NO];
[uploadRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if (!error)
NSLog("Success");
else
NSLog("Error");
}];
}
@愤怒的鸭子
试试这个代码,它会工作的
func uploadVideoOnFacebook() {
var pathURL: NSURL
var videoData: NSData
pathURL = NSURL(string: self.strUploadVideoURL)!
videoData = NSData.dataWithContentsOfURL(NSURL(string: self.strUploadVideoURL)!)
NSString * strDesc
strDesc = txtCaption.text!
var videoObject: [NSObject : AnyObject] = ["title": "application Name", "description": strDesc, pathURL.absoluteString(): videoData]
var uploadRequest: FBRequest = FBRequest(graphPath: "me/videos", parameters: videoObject, HTTPMethod: "POST")
self.view!.userInteractionEnabled = false
uploadRequest.startWithCompletionHandler({(connection: FBRequestConnection, result: AnyObject, error: NSError) -> Void in
if !error {
NSLog("Success")
}
else {
NSLog("Error")
}
})
}
转换成swift 3和swift 4:- 试试这个
func uploadVideoOnFacebook() {
var pathURL: URL
var videoData: Data
pathURL = URL(string: "Your video url string")!
do {
videoData = try Data(contentsOf: URL(string: "Your video url string")!)
print(videoData)
var strDesc : String
strDesc = ""
let videoObject: [String : Any] = ["title": "application Name", "description": strDesc, pathURL.absoluteString: videoData]
let uploadRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me/videos", parameters: videoObject, httpMethod: "POST")
self.view!.isUserInteractionEnabled = false
uploadRequest.start(completionHandler: {(connection: FBSDKGraphRequestConnection, result: AnyObject, error: NSError) -> Void in
if error == error {
NSLog("Error")
}
else {
NSLog("Success")
}
} as! FBSDKGraphRequestHandler)
} catch {
print(error)
}
}
使用SDK Facebook:
视频URL videoURL必须是资源URL。您可以从UIImagePickerController获取视频资源URL
import FBSDKCoreKit
import FBSDKShareKit
import MobileCoreServices
import Photos
func createAssetURL(url: URL, completion: @escaping (String) -> Void) {
let photoLibrary = PHPhotoLibrary.shared()
var videoAssetPlaceholder:PHObjectPlaceholder!
photoLibrary.performChanges({
let request = PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: url)
videoAssetPlaceholder = request!.placeholderForCreatedAsset
},
completionHandler: { success, error in
if success {
let localID = NSString(string: videoAssetPlaceholder.localIdentifier)
let assetID = localID.replacingOccurrences(of: "/.*", with: "", options: NSString.CompareOptions.regularExpression, range: NSRange())
let ext = "mp4"
let assetURLStr =
"assets-library://asset/asset.\(ext)?id=\(assetID)&ext=\(ext)"
completion(assetURLStr)
}
})
}
func shareFacebbok() {
let content: FBSDKShareVideoContent = FBSDKShareVideoContent()
let videoURLs = Bundle.main.url(forResource: "video", withExtension: "mp4")!
createAssetURL(url: videoURLs) { url in
let video = FBSDKShareVideo()
video.videoURL = URL(string: url)
content.video = video
let shareDialog = FBSDKShareDialog()
shareDialog.shareContent = content
shareDialog.mode = .native
shareDialog.delegate = self
shareDialog.show()
}
}
我试图上传的视频在documents目录中,但我也有NSURL,我已经将其保存到相册中,我尝试过,但仍然显示禁用,好像我没有设置任何媒体内容?你有没有一个使用graph request的例子?如果你能翻译的话,有没有可能发布视频公共群组搜索swift?谢谢,我不能,因为我还没有做过任何关于swift语言的项目。@AngryDuck-你试过把上面的代码转换成swift吗?我遇到了完全相同的问题,我解决了它!视频URL应该来自库,而不是您的应用程序,所以请保存您的视频并从库中获取URL。然后它会工作。如何附加place/placeId?它对我有效。但现在我有一个问题,我可以将视频发布到我的组。但我不能将视频发布到其他组[如果我是管理员,我可以发布,否则我不能],你能帮我吗。是否可以将视频发布到公共组