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

查看:144
本文介绍了使用facebook sdk 3.1在ios 6.0上传视频到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?

欢迎任何评论

推荐答案

上下文



在您发布到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版本早于iOS 6,或者您希望使用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);
        }];
    }
}

这里可以看到,我们添加视频数据进入参数字典不同于以前的解决方案,它与标题描述(这是2个可选参数)。
另请注意,这里没有密钥,由Facebook文档指定。
密钥的名称是视频的文件名。我不知道为什么这不应该是,但是使用源代码结果在一个 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 !

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

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