iPhone Facebook视频上传
我已经在这方面工作了几天,但似乎在任何地方都找不到一个直接的答案或例子。我正试图从我的iPhone应用程序中上传一段视频到facebook。我可以通过以下方式连接到facebook(并上传图片):iPhone Facebook视频上传,iphone,objective-c,xcode,facebook,Iphone,Objective C,Xcode,Facebook,我已经在这方面工作了几天,但似乎在任何地方都找不到一个直接的答案或例子。我正试图从我的iPhone应用程序中上传一段视频到facebook。我可以通过以下方式连接到facebook(并上传图片): _facebook = [[Facebook alloc] initWithAppId:kAppID]; _permissions = [[NSArray arrayWithObjects:@"publish_stream", @"offline_access",nil] retain]; [_fa
_facebook = [[Facebook alloc] initWithAppId:kAppID];
_permissions = [[NSArray arrayWithObjects:@"publish_stream", @"offline_access",nil] retain];
[_facebook authorize:_permissions delegate:self];
然而,我似乎无法让我的视频上传工作。我目前的代码是:
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];
由于视频上传呼叫必须打到不同的服务器,我将facebook.m文件中的restserver url更改为:
static NSString* kRestserverBaseURL = @"https://api-video.facebook.com/method/";
当我运行此命令时,上载崩溃并出现错误:
facebookErrDomain err 353.
任何帮助都将不胜感激
编辑:
在Zoul的帮助下,我现在实现了以下代码(我没有做任何事情来更改他的upload类或它附带的SDK版本)。请求不再收到错误,但是没有上载任何内容
我初始化facebook对象和上载对象:
_facebook = [[Facebook alloc] initWithAppId:kAppID];
_permissions = [NSArray arrayWithObjects:@"publish_stream", @"offline_access",nil];
[_facebook authorize:_permissions delegate:self];
_upload = [[FBVideoUpload alloc] init];
一旦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];
}
你有没有试着按照facebook的建议将其发送到电子邮件 您可以使用电子邮件主题来设置视频的标题。我在GitHub上的FacebookSDK中找到了一个。我有好几个星期没碰它,但它过去工作得很好(只是它需要老式的身份验证,请参阅)。在中有一些注释,但界面几乎是不言自明的。在my下还进行了一些有益的讨论,特别是关于
api video
集群上的SSL证书的讨论,这可以使整个问题变得更容易,但我还没有回顾代码
[Rant:很遗憾,Facebook的iOS SDK并没有在GitHub上蓬勃发展。有很多pull请求,但官方开发者似乎从不合并任何东西,甚至文档中的一些小错误。大多数情况下,pull请求只是停留在那里,直到被拒绝。]
是的,我提到过视频上传代码是一个混乱的黑客吗?视频上传代码是一个混乱的黑客行为。它解析了一些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];
这是“正确的方法”™, 以前的解决方案只是一个临时的破解。您可以使用新的graph api上传视频:
- 将我/视频用作图形路径
- 向你的应用程序添加用户\u视频权限
- 将文件名设置为与POST请求中的文件扩展名匹配(内容处置后:)
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:movieData, @"source", @"File.mov", @"filename", nil];
[m_facebook requestWithGraphPath:@"me/videos" andParams:params andHttpMethod:@"POST" andDelegate:self];
我还为这个fork添加了一个跟踪上传状态的方法(通过示例与进度条一起使用)事实上,值得一提的是要密切关注Facebook的各种工程博客。此版本的日期为2011年10月,因此没有“当前”SDK: 但如果您修改bundle ID,将URL方案添加到plist,并将自己的App ID添加到view controller,则示例仍然有效:
这是我在视频上传中发现的最有用的信息——我不知道Facebook为什么会在他们的主要SDK文档中隐藏这一点!奇怪的是,它没有链接到任何地方,我不得不四处挖掘…谢谢zoul的回复。我现在来试一试,看看效果如何。@zoul-我已经用Facebook IOS SDK的版本实现了你的FBVideoUpload类。虽然我不再收到任何错误(通过NSLog我知道请求确实到达了didLoad方法),但我在facebook上什么也没有得到。有什么想法吗?我将把我的当前代码添加到我的问题中。我刚刚试用了我的应用程序,它使用了视频上传代码,并且运行正常。试着去掉
数据
参数,这里不需要它。您确定请求成功吗?服务器的响应是什么?我将尝试不使用数据参数。我会仔细检查服务器的响应,并在收到后将其发布到这里。事情就这么简单。确保我的应用程序设置为HTML/Web,而不是本地应用程序,并且它可以像一个魔咒一样工作。谢谢你的帮助,zoul。因为据我所知,没有办法从facebook的graph API中提取用户的个人上传电子邮件地址。如果有,这将是一个非常简单的解决方案。我无法添加此代码,因为在我的facebook ios sdk FBVideoUpload类中不存在。。你能帮我一下吗?我现在遇到了错误无法从访问令牌中检索会话密钥。
但是我的更新获取了ok没有会话错误。在这种情况下,我有一个非常简单的修复方法,你可以插入当前iOS Facebook SDK的一个功能:John我想你已经成功使用graph API上传视频了?您能分享一些示例代码吗?只需使用上面提到的fork代码,m_facebook是一个已经授权的facebook对象(具有用户_视频权限),movieData是您想要上传的视频的原始数据。
- (void)viewDidLoad
{
facebook = [[Facebook alloc] initWithAppId:@"276907032339239"];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (IBAction)buttonClicked:(id)sender
{
NSArray* permissions = [[NSArray alloc] initWithObjects:
@"publish_stream", nil];
[facebook authorize:permissions delegate:self];
[permissions release];
}
- (void)fbDidLogin
{
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mov"];
NSData *videoData = [NSData dataWithContentsOfFile:filePath];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
videoData, @"video.mov",
@"video/quicktime", @"contentType",
@"Video Test Title", @"title",
@"Video Test Description", @"description",
nil];
[facebook requestWithGraphPath:@"me/videos"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
NSLog(@"hiiiiiiiii");
}
-(void)fbDidNotLogin:(BOOL)cancelled
{
NSLog(@"did not login");
}
- (void)request:(FBRequest *)request didLoad:(id)result
{
if ([result isKindOfClass:[NSArray class]])
{
result = [result objectAtIndex:0];
}
NSLog(@"Result of API call: %@", result);
}
- (void)request:(FBRequest *)request didFailWithError:(NSError *)error
{
NSLog(@"Failed with error: %@", [error localizedDescription]);
}