iPhone Facebook视频上传

Bre*_*rse 9 iphone xcode facebook objective-c

我已经在这方面工作了几天,似乎无法在任何地方找到直接的答案或例子.我正试图从我的iPhone应用程序中将视频上传到Facebook.我可以连接到Facebook(并上传图片)没有问题使用:

_facebook = [[Facebook alloc] initWithAppId:kAppID];
_permissions =  [[NSArray arrayWithObjects:@"publish_stream", @"offline_access",nil] retain];
[_facebook authorize:_permissions delegate:self];
Run Code Online (Sandbox Code Playgroud)

但是我似乎无法让我的视频上传工作.我目前的代码是:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"TestMovie" ofType:@"mp4"];
NSData *data = [NSData dataWithContentsOfFile:filePath];

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               data, @"video",
                               nil, @"callback",
                               @"test", @"title",
                               @"upload testing", @"description",
                               @"EVERYONE", @"privacy",
                               nil];

[_facebook requestWithMethodName:@"video.upload"
                       andParams:params
                   andHttpMethod:@"POST"
                     andDelegate:self];
Run Code Online (Sandbox Code Playgroud)

由于必须将视频上传调用发送到不同的服务器,我将facebook.m文件中的restserver url更改为:

static NSString* kRestserverBaseURL = @"https://api-video.facebook.com/method/";
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,上传崩溃并出现错误:

facebookErrDomain err 353.
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

编辑:

在Zoul的帮助下,我现在实现了以下代码(我没有做任何改变他的上传类和它附带的SDK的版本).请求不再出错,但是没有上传任何内容.

我初始化facebook对象和上传对象:

_facebook = [[Facebook alloc] initWithAppId:kAppID];
_permissions =  [NSArray arrayWithObjects:@"publish_stream", @"offline_access",nil];
[_facebook authorize:_permissions delegate:self];
_upload = [[FBVideoUpload alloc] init];  
Run Code Online (Sandbox Code Playgroud)

一旦facebook登录,我就会使用它:

- (void)fbDidLogin{
    _upload.accessToken = _facebook.accessToken;
    _upload.apiKey = kApiKey;
    _upload.appSecret = kApiSecret;

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"mp4"];
    NSURL *fileURL = [NSURL fileURLWithPath:filePath];
    NSData *data = [NSData dataWithContentsOfFile:filePath];

    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               data, @"",
                               @"test", @"title",
                               @"upload testing", @"description",
                               @"EVERYONE", @"privacy",
                               nil];

    [_upload startUploadWithURL:fileURL params:params delegate:self];
}
Run Code Online (Sandbox Code Playgroud)

zou*_*oul 10

我在GitHub上的Facebook SDK的分支中有一个视频上传分支.我好几周都没有触摸它,但它曾经工作正常(只需要旧式身份验证,请参阅此分支).FBVideoUpload类头中有一些注释,但界面几乎是不言自明的.在我的拉取请求下也有一些有用的讨论- 特别是关于api-video群集上的SSL证书可以使整个问题更容易,但我还没有检查代码.

[Rant:很遗憾,Facebook SDK for iOS并没有完全在GitHub上茁壮成长.有许多拉取请求,但官方开发人员似乎永远不会合并任何东西,甚至文档中甚至没有琐碎的拼写错误修复.大部分时间拉动请求只是坐在那里直到被拒绝.

是的,我是否提到视频上传代码是一个混乱的黑客?视频上传代码是一个混乱的黑客.它解析了一些auth令牌,它可能很快就会崩溃,但这是我能让它恢复正常工作的唯一方法.


更新:视频上传分支已不复存在,您现在可以使用官方SDK轻松上传视频:

NSData *videoData = [NSData dataWithContentsOfURL:movieURL];
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
    …, @"title", 
    …, @"description", 
    …, @"file",
    videoData, @"clip.mov",
    nil];
[facebook requestWithGraphPath:@"me/videos" andParams:params andHttpMethod:@"POST" andDelegate:self];
Run Code Online (Sandbox Code Playgroud)

这是"正确的方法",以前的解决方案只是暂时的黑客攻击.