iphone sdk在facebook上传视频

时间:2011-06-28 18:58:19

标签: iphone objective-c facebook facebook-graph-api

我正在尝试使用FBConnect从iPhone应用程序上传视频。实际上我已经尝试了几种方法,但遗憾的是没有任何成功。

首先。使用“ facebook.video.upload ”这里描述的REST方法和技巧iPhone Facebook Video Upload。结果,服务器返回一个空响应,之后发生更多事情。视频不会出现在Facebook上。顺便尝试了不同类型的Facebook应用程序,例如WebApp和Native one。

第二。使用“ me / videos ”GRAPH方法和以下代码启动上传

>

     NSMutableDictionary *params = [NSMutableDictionary
 dictionaryWithObjectsAndKeys:movieData,
 @"source", @"File.mov", @"filename",
 nil];
[m_facebook requestWithGraphPath:@"me/videos"
     

andParams:params andHttpMethod:@“POST”   andDelegate:自];

在这种情况下,我遇到了下一个错误:

  

a)必须使用活动访问令牌来查询有关的信息   当前用户。

     

b)视频文件格式不是   支撑。

第三。只需发送附有video@facebook.com视频文件的电子邮件。不行。然而,这个解决方案并不像以前那么感兴趣。

我花了两天时间把这些事情搞清楚,这让我发疯了。有人可以分享一个视频上传的工作示例,或者至少指出我的样本中我错了。

谢谢!

4 个答案:

答案 0 :(得分:4)

您应该使用Graph方法,因为旧的API已被弃用,并且在不久的将来会在某个时候消失。因此,我将解决这个问题。

第一个问题是,如果不以某种方式登录,您无法将视频上传到Facebook。在上传视频之前,您需要按照这些说明获取访问令牌:http://developers.facebook.com/docs/authentication

您还需要upload_video权限,由于某种原因未在“权限”页面上列出。

我不确定第二个问题,但Facebook支持a number of video formats。据推测,您的视频采用的是Apple格式之一,可能会受到支持。修复第一个问题,看看是否对第二个问题有任何影响。

答案 1 :(得分:1)

NSURL *urlvideo = [info objectForKey:UIImagePickerControllerMediaURL];
NSString *urlString=[urlvideo path];

NSLog(@"urlString=%@",urlString);
NSString *str = [NSString stringWithFormat:@"you url of server"];
NSURL *url = [NSURL URLWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setFile:urlString forKey:@"key foruploadingFile"];
[request setRequestMethod:@"POST"];
[request setDelegate:self];
[request startSynchronous];
NSLog(@"responseStatusCode %i",[request responseStatusCode]);
NSLog(@"responseStatusCode %@",[request responseString]);

答案 2 :(得分:0)

从官方Facebook开发者网站上找到了上传视频的简单来源。

他们有点老了,但仍然工作正常。 http://developers.facebook.com/attachment/VideoUploadTest.zip 也许这个来源对某人有帮助。 但不要忘记将AppID更改为您的。我已经在3个地方做到了

facebook = [[Facebook alloc] initWithAppId:@“...”]; 和plist文件中的2个属性 - FacebookAppID,URL类型数组 http://i.stack.imgur.com/yZAXQ.png

- (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:@"buf-3" 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];
}
祝你好运!

答案 3 :(得分:0)

此代码已在 FaceBook SDK 3.14.1

上成功测试

建议: .plist文件中的3个属性

设置FacebookAppID,FacebookDisplayName,
网址类型 - >项目0->网址方案设置为facebookappId前缀fb See

-(void)shareOnFaceBook
{
    //sample_video.mov is the name of file
    NSString *filePathOfVideo = [[NSBundle mainBundle] pathForResource:@"sample_video" ofType:@"mov"];

    NSLog(@"Path  Of Video is %@", filePathOfVideo);
    NSData *videoData = [NSData dataWithContentsOfFile:filePathOfVideo];
    //you can use dataWithContentsOfURL if you have a Url of video file
    //NSData *videoData = [NSData dataWithContentsOfURL:shareURL];
    //NSLog(@"data is :%@",videoData);
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               videoData, @"video.mov",
                               @"video/quicktime", @"contentType",
                               @"Video name ", @"name",
                               @"description of Video", @"description",
                               nil];

   if (FBSession.activeSession.isOpen)
   {
        [FBRequestConnection startWithGraphPath:@"me/videos"
                                 parameters:params
                                 HTTPMethod:@"POST"
                          completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                              if(!error)
                              {
                                  NSLog(@"RESULT: %@", result);
                                  [self throwAlertWithTitle:@"Success" message:@"Video uploaded"];
                              }
                              else
                              {
                                  NSLog(@"ERROR: %@", error.localizedDescription);
                                  [self throwAlertWithTitle:@"Denied" message:@"Try Again"];
                              }
                          }];
    }
    else
    {
        NSArray *permissions = [[NSArray alloc] initWithObjects:
                            @"publish_actions",
                            nil];
        // OPEN Session!
        [FBSession openActiveSessionWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceEveryone  allowLoginUI:YES
                                     completionHandler:^(FBSession *session,
                                                         FBSessionState status,
                                                         NSError *error) {
                                         if (error)
                                         {
                                             NSLog(@"Login fail :%@",error);
                                         }
                                         else if (FB_ISSESSIONOPENWITHSTATE(status))
                                         {
                                             [FBRequestConnection startWithGraphPath:@"me/videos"
                                                                          parameters:params
                                                                          HTTPMethod:@"POST"
                                                                   completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                                                                       if(!error)
                                                                       {
                                                                           [self throwAlertWithTitle:@"Success" message:@"Video uploaded"];

                                                                           NSLog(@"RESULT: %@", result);
                                                                       }
                                                                       else
                                                                       {
                                                                           [self throwAlertWithTitle:@"Denied" message:@"Try Again"];

                                                                           NSLog(@"ERROR: %@", error.localizedDescription);
                                                                       }

                                                                   }];
                                         }
                                     }];
        }
}

当应用程序第一次运行时出现错误:

 The operation couldn’t be completed. (com.facebook.sdk error 5.)

当facebook正在进行时就会发生这种情况。下次我打开我的应用程序,它工作正常,它始终是第一次。尝试了应用程序中的所有内容,但似乎是在Facebook SDK端。

看到com.facebook.sdk error 5的几个原因:

  • 会话未公开。验证
  • Facebook检测到您发送了垃圾邮件系统。更改视频名称。
  • Facebook使用SDK定义了限制。尝试使用其他应用。
  • 错误的发布权限。给publish_actions一个旋转。