4

我想将视频文件发布到 Facebook。以前我使用 Facebook iOS SDK3.0 并且它可以工作。但是,对于 iOS6 Social Framework,存在问题。

 __block ACAccount * facebookAccount;
    ACAccountStore* accountStore = [[ACAccountStore alloc] init];
    NSDictionary *options = @{
    ACFacebookAppIdKey: @"MY APP ID",
    ACFacebookPermissionsKey: @[@"publish_actions", ], 
    @"ACFacebookAudienceKey": ACFacebookAudienceFriends
    };
    ACAccountType *facebookAccountType = [accountStore
                                          accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    [accountStore requestAccessToAccountsWithType:facebookAccountType options:options completion:^(BOOL granted, NSError *error) {

        if (granted) {
            NSArray *accounts = [accountStore
                                 accountsWithAccountType:facebookAccountType];
            facebookAccount = [accounts lastObject];



            NSLog(@"access to facebook account ok %@", facebookAccount.username);

            NSData *videoData = [NSData dataWithContentsOfFile:[self videoFileFullPath]];
            NSLog(@"video size = %d", [videoData length]);
            NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                                     videoData, @"video.mov",
                                    @"video/quicktime", @"contentType" ,
                                    @"Video title", @"title",
                                    @"Video description", @"description",nil];

            NSURL *requestURL = [NSURL URLWithString:@"https://graph.facebook.com/me/videos"];
            SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                                                         requestMethod:SLRequestMethodPOST
                                                                                   URL:requestURL
                                                                            parameters:params];
            request.account = facebookAccount;
            [request performRequestWithHandler:^(NSData *data,                                                                  NSHTTPURLResponse *response,NSError * error){
                NSLog(@"response = %@", response);
                NSLog(@"error = %@", [error localizedDescription]);

            }];


        } else {
            NSLog(@"access to facebook is not granted");
            // extra handling here if necesary

        }

    }];

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSConcreteData _fastCharacterContents]:无法识别的选择器发送到实例 0x2097ead0”

4

2 回答 2

5

这是我的研究:首先,视频数据不能成为参数列表的一部分,因为它会使 SLRequest 无效,这就是您遇到的崩溃。

视频数据必须放在请求的多部分部分。

现在,需要将参数与多部分数据相关联,这是棘手的部分。因此,有必要使用源属性来建立该链接。

Source 需要一个字符串格式的 URL 在参数中设置它,并在多部分请求的文件名字段中设置相同的值。

那应该这样做。

NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/me/videos"];

NSURL *videoPathURL = [[NSURL alloc]initFileURLWithPath:videoPath isDirectory:NO];
NSData *videoData = [NSData dataWithContentsOfFile:videoPath];

NSString *status = @"One step closer.";
NSDictionary *params = @{@"title":status, @"description":status};

SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                        requestMethod:SLRequestMethodPOST 
                                                  URL:url 
                                           parameters:params];

[request addMultipartData:videoData
                 withName:@"source"
                     type:@"video/quicktime" 
                 filename:[videoPathURL absoluteString]];
于 2012-10-09T04:33:59.683 回答
0

我正在处理同样的问题。我认为您的错误来自 ARC,并NSData *videoData在从performRequestWithHandler.

于 2012-10-05T22:52:51.263 回答