Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone Facebook视频上传_Iphone_Objective C_Xcode_Facebook - Fatal编程技术网

iPhone 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

我已经在这方面工作了几天,但似乎在任何地方都找不到一个直接的答案或例子。我正试图从我的iPhone应用程序中上传一段视频到facebook。我可以通过以下方式连接到facebook(并上传图片):

_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请求中的文件扩展名匹配(内容处置后:)
您可以使用此fork并拥有如下参数字典:

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