在 ios 6.0 上使用 facebook sdk 3.1 将视频上传到 facebook [英] upload video to facebook using facebook sdk 3.1 on ios 6.0

查看:30
本文介绍了在 ios 6.0 上使用 facebook sdk 3.1 将视频上传到 facebook的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的一个应用程序是将视频上传到 Facebook 帐户.我在网上查了一下,但发现大部分解决方案都是旧的或已删除.有没有更新的解决方案?

One of my app is to upload video to facebook account. I checked on web, but found that most of solution are old or removed. Is there any updated solution?

欢迎任何评论

推荐答案

Context

在您可以发布到 Facebook 之前,您必须获得发布(写入)权限,使用本机集成或 Facebook SDK,规则是您必须先获得读取权限,然后再写入权限.

Context

Before you can publish onto Facebook, you must get publish (write) permissions, using either native integration or the Facebook SDK, the rule is you must first acquire read permissions before write permissions.

因此,请确保在尝试上传视频之前,您应该已请求基本信息(例如电子邮件),然后,一旦获得此信息,您就可以请求写入权限.上传视频所需的权限是publish_stream.

Thus, make sure that before you attempt to upload a video, you should have requested basic info (email for example), then, once you have this, you can request write permissions. The permission necessary for uploading videos is publish_stream.

使用原生 iOS 6 Facebook 集成,您应该使用 requestForServiceType:requestMethod:URL:parameters:SLRequest的方法,如下:

Using the native iOS 6 Facebook integration, you should use the requestForServiceType:requestMethod:URL:parameters: method of SLRequest, as follows:

- (void)upload{
    NSURL *videourl = [NSURL URLWithString:@"https://graph.facebook.com/me/videos"];

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"me" ofType:@"mov"];
    NSURL *pathURL = [[NSURL alloc]initFileURLWithPath:filePath isDirectory:NO];
    NSData *videoData = [NSData dataWithContentsOfFile:filePath];

    NSDictionary *params = @{
                            @"title": @"Me being silly",
                            @"description": @"Me testing the video upload to Facebook with the new system."
                            };

    SLRequest *uploadRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                                  requestMethod:SLRequestMethodPOST
                                                            URL:videourl
                                                     parameters:params];
    [uploadRequest addMultipartData:videoData
                           withName:@"source"
                               type:@"video/quicktime"
                           filename:[pathURL absoluteString]];

    uploadRequest.account = self.facebookAccount;

    [uploadRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
        if(error){
            NSLog(@"Error %@", error.localizedDescription);
        }else
            NSLog(@"%@", responseString);
    }];
}

这里需要注意的是,视频数据没有进入参数字典,必须使用addMultipartData:withName:type:filename:添加到SLRequest对象中:代码>方法.

Here it's important to note that the video data does not go into the parameters dictionary, it must be added to the SLRequest object using the addMultipartData:withName:type:filename: method.

另请注意,添加视频数据时文件名非常重要.这里我只是使用了文件的完整路径.

Also note that the filename is very important when adding the videos data. Here I am just using the full path of the file.

如果您必须支持早于 iOS 6 的 iOS 版本,或者您出于任何其他原因希望使用 Facebook SDK 3.1,则上传视频略有不同.

If you must support iOS versions earlier then iOS 6 or you wish to use the Facebook SDK 3.1 for any other reason, uploading a video is a little different.

您必须使用 FBRequest 对象和包含视频详细信息的 NSDictionary.我推荐使用的方法是 requestWithGraphPath:parameters:HTTPMethod:,我出于偏好使用了此方法,尽管您应该能够使用其他一些方法来创建请求对象.

You must use a FBRequest object and a NSDictionary that contains the videos details. The method I recommend using is requestWithGraphPath:parameters:HTTPMethod:, I've used this method out of preference although you should be able to use some of the other methods to create your request object.

以下代码适用于 Facebook SDK 3.1 上传视频:

The following code works with Facebook SDK 3.1 to upload a video:

- (void)upload{
    if (FBSession.activeSession.isOpen) {
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"me" ofType:@"mov"];
        NSURL *pathURL = [[NSURL alloc]initFileURLWithPath:filePath isDirectory:NO];
        NSData *videoData = [NSData dataWithContentsOfFile:filePath];

        NSDictionary *videoObject = @{
                                      @"title": @"FB SDK 3.1", 
                                      @"description": @"hello there !", 
                                      [pathURL absoluteString]: videoData
                                     };
        FBRequest *uploadRequest = [FBRequest requestWithGraphPath:@"me/videos"
                                                        parameters:videoObject
                                                        HTTPMethod:@"POST"];

        [uploadRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
            if (!error)
                NSLog(@"Done: %@", result);
            else
                NSLog(@"Error: %@", error.localizedDescription);
        }];
    }
}

这里如您所见,与之前的解决方案不同,我们将视频数据添加到 parameters 字典中,它与 titledescription (这是 2 个可选参数).另请注意,此处没有关键 source,如 Facebook 文档所指定.密钥的名称是视频的文件名.我不知道为什么这不应该是 source,但是使用 source 会导致 com.facebook.sdk 错误 5.

Here as you can see, we add the videos data into the parameters dictionary unlike the previous solution, it's there along with title and description (which are 2 optional parameters). Also note that here there is no key source, as specified by the Facebook documentation. The key's name is the filename of the video. I don't know why this shouldn't be source, but using source results in a com.facebook.sdk error 5.

我提到的错误是我向 Facebook 提交的,您可以在 此链接 上查看此报告 -除非我对文档的解释有误.请尝试该错误并报告是否可以重现它.谢谢!

The bug I mentioned I filed with Facebook, you can see this report on this link - unless I'm mistaken in my interpretation of the documentation. Please try out that bug and report if you can reproduce it. Thanks !

这篇关于在 ios 6.0 上使用 facebook sdk 3.1 将视频上传到 facebook的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆