ale*_*lex 4 video facebook ios6 social-framework
我想将视频文件发布到Facebook.以前我使用Facebook iOS SDK3.0,它的工作原理.但是,对于iOS6社交框架,存在问题.
__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
}
}];
Run Code Online (Sandbox Code Playgroud)
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSConcreteData _fastCharacterContents]:无法识别的选择器发送到实例0x2097ead0'
小智 5
以下是我的研究:首先,视频数据不能成为参数列表的一部分,因为它会使SLRequest无效,这就是您遇到的崩溃.
视频数据必须包含在请求的多部分部分中.
现在,需要将参数与多部分数据相关联,这是棘手的部分.因此有必要使用source属性来建立该链接.
Source需要一个字符串格式的URL,在参数中设置它,并在multipart请求的filename字段中设置相同的值.
应该这样做.
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]];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2827 次 |
最近记录: |