【问题标题】:iphone sdk upload video on facebookiphone sdk 在 facebook 上上传视频
【发布时间】:2011-09-24 14:22:04
【问题描述】:

我正在尝试使用 FBConnect 从 iPhone 应用程序上传视频。其实我也试过好几种方法,可惜都没有成功。

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

其次。使用“me/videos”GRAPH方法和下面的代码来启动上传

>

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

andParams:params andHttpMethod:@"POST" andDelegate:self];

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

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

b) 视频文件格式不 支持。

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

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

谢谢!

【问题讨论】:

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


【解决方案1】:

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

第一个问题是您不能在不登录的情况下将视频上传到 Facebook。您需要按照以下说明获取访问令牌,然后才能上传视频:http://developers.facebook.com/docs/authentication

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

我不确定第二个问题,但 Facebook 支持a number of video formats。大概您的视频是其中一种可能受支持的 Apple 格式。修复第一个问题,看看对第二个问题有没有影响。

【讨论】:

    【解决方案2】:
    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]);
    

    【讨论】:

      【解决方案3】:

      从官方 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];
      }
      

      祝你好运!

      【讨论】:

      • 上面的示例需要 GCC 仅供参考。
      【解决方案4】:

      此代码已在 FaceBook SDK 3.14.1 上成功测试

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

      设置 FacebookAppID、FacebookDisplayName、
      URL types->Item 0->URL Schemes 设置为带有 fb 前缀的 facebookappId 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-18
        • 2013-03-03
        • 1970-01-01
        • 1970-01-01
        • 2012-10-03
        • 1970-01-01
        • 2013-03-05
        • 1970-01-01
        相关资源
        最近更新 更多