upload video to facebook using facebook sdk 3.1 on ios 6.0
我的一个应用是将视频上传到 facebook 帐户。
我在网上查了一下,但发现大多数解决方案都是旧的或已删除。
有没有更新的解决方案?
欢迎评论
- 这些 Facebook 示例项目尚未针对新的 SDK 进行更新。
-
请在此处使用新的 facebook SDK 检查:stackoverflow.com/a/29427089/2787452
语境
在您可以发布到 Facebook 之前,您必须获得发布(写入)权限,使用本机集成或 Facebook SDK,规则是您必须首先获得读取权限,然后才能写入权限。
因此,请确保在尝试上传视频之前,您应该已经请求了基本信息(例如电子邮件),然后,一旦您有了这些信息,您就可以请求写入权限。上传视频所需的权限是 publish_stream.
使用 iOS 6 原生 Facebook 集成
使用原生 iOS 6 Facebook 集成,您应该使用 requestForServiceType:requestMethod:URL:parameters:
SLRequest的方法,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
– (void)upload {
NSURL *videourl = [NSURL URLWithString :@ "https://graph.facebook.com/me/videos"];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"me" ofType:@"mov"]; NSURL *pathURL = [[NSURL alloc]initFileURLWithPath:filePath isDirectory:NO]; NSData *videoData = [NSData dataWithContentsOfFile:filePath];
NSDictionary *params = @{ @"title": @"Me being silly", @"description": @"Me testing the video upload to Facebook with the new system." };
SLRequest *uploadRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:videourl parameters:params]; [uploadRequest addMultipartData:videoData withName:@"source" type:@"video/quicktime" filename:[pathURL absoluteString]];
uploadRequest.account = self.facebookAccount;
[uploadRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; if(error){ NSLog(@"Error %@", error.localizedDescription); }else NSLog(@"%@", responseString); }]; } |
这里需要注意的是视频数据不进入参数字典,必须使用addMultipartData:withName:type:filename:方法添加到SLRequest对象中。
还要注意,添加视频数据时,文件名非常重要。这里我只是使用文件的完整路径。
使用 Facebook SDK 3.1 库
如果您必须支持比 iOS 6 更早的 iOS 版本,或者您出于任何其他原因希望使用 Facebook SDK 3.1,则上传视频有点不同。
您必须使用一个 FBRequest 对象和一个包含视频详细信息的 NSDictionary。我推荐使用的方法是 requestWithGraphPath:parameters:HTTPMethod:,尽管您应该能够使用其他一些方法来创建您的请求对象,但我还是出于偏好使用了此方法。
以下代码使用 Facebook SDK 3.1 上传视频:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
– (void)upload {
if (FBSession. activeSession. isOpen) {
NSString *filePath = [[NSBundle mainBundle ] pathForResource :@ "me" ofType :@ "mov"];
NSURL *pathURL = [[NSURL alloc ]initFileURLWithPath :filePath isDirectory :NO ];
NSData *videoData = [NSData dataWithContentsOfFile :filePath ];
NSDictionary *videoObject = @{ @"title": @"FB SDK 3.1", @"description": @"hello there !", [pathURL absoluteString]: videoData }; FBRequest *uploadRequest = [FBRequest requestWithGraphPath:@"me/videos" parameters:videoObject HTTPMethod:@"POST"];
[uploadRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) { if (!error) NSLog(@"Done: %@", result); else NSLog(@"Error: %@", error.localizedDescription); }]; } } |
如您所见,我们将视频数据添加到 parameters 字典中,这与之前的解决方案不同,它与 title 和 description(这是 2 个可选参数)一起存在。
另请注意,这里没有 Facebook 文档指定的密钥 source。
密钥的名称是视频的文件名。我不知道为什么这不应该是 source,但是使用 source 会导致 com.facebook.sdk 错误 5.
我提到的错误是我向 Facebook 提交的,您可以在此链接上查看此报告 – 除非我对文档的解释有误。如果您可以重现它,请尝试该错误并报告。谢谢!
- 我在 ios6 和 4,5 上测试了这两种方法,但它们(facebook 示例 [hackbook] )从未用于视频上传, – (void)request:(FBRequest *)request didReceiveResponse:(NSURLResponse *)response 永远不会被触发
-
您没有使用 Facebook iOS SDK 3.1。这是 Facebook 的一个新框架。您需要从 Facebook 开发者网站获取它,并且需要将其安装到您的 Mac 上,您还必须确保正确设置它。按照开发者网站上的说明进行操作。
-
我已经更新了问题,我在 fackbook ios sdk 中使用了 hackbook 示例,上传照片还可以,但是对于视频上传,- (void)request:(FBRequest *)request didReceiveResponse 从未触发并最终报告 http 状态错误 400,我改变了没有 Facebook 示例代码,我在山狮、xcode 4.5、iOS 6 基础 sdk、iOS 6 模拟器上工作
-
我刚刚在 SDK 中查看了 Facebook 提供的示例项目,而您正在使用的那个(我没有查看其他项目),它针对 iOS 4.0 并且正在使用 FBConnect。它包括新的 Facebook SDK 框架,但没有使用它。所以看起来 Facebook 没有为新的 SDK 更新他们的示例项目。我自己做了一个示例项目,在这里查看:bitbucket.org/danielphillips/fb-video-upload
-
您需要在上传之前”获取我”(在写入权限之前读取权限)
-
我们可以从 Facebook 获取墙帖列表吗…因为我想要在我的应用程序中使用图片和视频。或者我们可以从 iPhone 应用程序中的 Facebook 获取任何视频吗?
-
@Daniel您在这里有很好的答案,但是我被困在一个地方。您正在从文件系统中挑选视频,如何从 iPhone 的相册中挑选视频或使用相机?该行应该包含什么: NSString *filePath = [[NSBundle mainBundle] pathForResource:@”me” ofType:@”mov”];
-
@Daniel 请告诉我如何在这一行中添加”self.facebookAccount”?我在这一行添加了什么?请告诉我 。
-
@Daniel 请告诉我 ..self.facebookAccount 是什么意思。我可以在哪里定义。?
-
@Daniel 我怎么知道打开的会话具有 public_stream 权限?
-
是否可以添加视频数据以在 Twitter 上共享?
publish_stream 不足以上传(读取),需要请求”video_upload“权限。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/268699.html