Я работаю над приложением, которое будет загружать видео на стену пользователей Facebook, однако успеха у меня не было.Я представляю расширенное диалоговое окно с разрешениями, а затем использую вызов метода face.video.upload.В отладчике кажется, что каждый параметр установлен правильно, однако диалоговое окно разрешений ext никогда не отображается полностью, а видеофайл никогда не загружается.
Видеофайл хранится в каталоге документов приложения (запись и воспроизведение работаютхорошо) но загрузка не работает.У меня есть параметры video.upload в методе dialogDidSucceed: и я изменил метод FBRequest.m generatePostBody: для приема видеофайлов.
Любая помощь будет огромной, поскольку я бьюсь головойстена на этом.Заранее спасибо.
Вот код контроллера вида:
-(IBAction)loginToFacebook
{
session = [[FBSession sessionForApplication:kAPIKey secret:kAPISecret delegate:self] retain];
FBLoginDialog *loginDialog = [[[FBLoginDialog alloc] initWithSession:session] autorelease];
[loginDialog show];
}
-(IBAction)askPermission
{
//---------------ask permission---------------------/
FBPermissionDialog *permDialog = [[[FBPermissionDialog alloc]init]autorelease];
permDialog.delegate = self;
permDialog.permission = @"video_upload";
[permDialog show];
}
-(void)dialogDidSucceed:(FBPermissionDialog *)dialog
{
//---------------video file path--------------------/
NSString *path = [NSString stringWithFormat:@"%@/Documents/%@.mov", NSHomeDirectory(), aSelectedQuote.quoteID];
//---------------video data converter---------------/
NSData *videoData = [NSData dataWithContentsOfFile:path];
videoFileName = [NSString stringWithUTF8String:[videoData bytes]];
//---------------dict for FB upload-----------------/
NSMutableDictionary *args = [[[NSMutableDictionary alloc] init] autorelease];
[args setObject:videoFileName forKey:@"video"];
[args setObject:aSelectedQuote.quoteTitle forKey:@"title"];
//---------------FBRequest--------------------------/
FBRequest *uploadVideoRequest = [FBRequest requestWithDelegate:self];
[uploadVideoRequest call:@"facebook.video.upload" params:args dataParam:videoData];
//[uploadVideoRequest call:@"facebook.video.upload" params:args];
NSLog(@"Upload video button pushed.");
}
-(void)dialogDidCancel:(FBDialog *)dialog
{
NSLog(@"user canceled request");
}
-(void)session:(FBSession *)session didLogin:(FBUID)uid
{
NSLog(@"user with id %lld logged in.",uid);
NSString *fql = [NSString stringWithFormat:@"select uid, name from user where uid == %lld", session.uid];
NSDictionary *params = [NSDictionary dictionaryWithObject:fql forKey:@"query"];
[[FBRequest requestWithDelegate:self] call:@"facebook.fql.query" params:params];
}
/*
-(void)sessionDidLogout:(FBSession *)session
{
}
*/
-(void)request:(FBRequest *)request didLoad:(id)result
{
if ([result isKindOfClass:[NSArray class]])
{
NSArray *users = result;
NSDictionary *user = [users objectAtIndex:0];
NSString *name = [user objectForKey:@"name"];
NSLog(@"FBRequest didLoad: - logged in as %@",name);
}
}
-(void)dialog:(FBDialog *)dialog didFailWithError:(NSError *)error
{
NSLog(@"Error (%d) %@", [error code], [error localizedDescription]);
}
Вот код FBRequest.m:
- (NSMutableData*)generatePostBody {
NSMutableData* body = [NSMutableData data];
NSString* endLine = [NSString stringWithFormat:@"\r\n--%@\r\n", kStringBoundary];
[self utfAppendBody:body data:[NSString stringWithFormat:@"--%@\r\n", kStringBoundary]];
for (id key in [_params keyEnumerator]) {
[self utfAppendBody:body
data:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key]];
[self utfAppendBody:body data:[_params valueForKey:key]];
[self utfAppendBody:body data:endLine];
}
if (_dataParam != nil) {
if ([_dataParam isKindOfClass:[UIImage class]]) {
NSData* imageData = UIImagePNGRepresentation((UIImage*)_dataParam);
[self utfAppendBody:body
data:[NSString stringWithFormat:@"Content-Disposition: form-data; filename=\"photo\"\r\n"]];
[self utfAppendBody:body
data:[NSString stringWithString:@"Content-Type: image/png\r\n\r\n"]];
[body appendData:imageData];
} else {
NSAssert([_dataParam isKindOfClass:[NSData class]], @"dataParam must be a UIImage or NSData");
/*
[self utfAppendBody:body
data:[NSString stringWithFormat:@"Content-Disposition: form-data; filename=\"data\"\r\n"]];
[self utfAppendBody:body
data:[NSString stringWithString:@"Content-Type: content/unknown\r\n\r\n"]];
[body appendData:(NSData*)_dataParam];
*/
if ([_method isEqualToString:@"facebook.video.upload"]) {
[self utfAppendBody:body
data:[NSString stringWithFormat:@"Content-Disposition: form-data; filename=\"data.mov\"\r\n"]];
[self utfAppendBody:body
data:[NSString stringWithString:@"Content-Type: video/quicktime\r\n\r\n"]];
}
else {
[self utfAppendBody:body
data:[NSString stringWithFormat:@"Content-Disposition: form-data; filename=\"data\"\r\n"]];
[self utfAppendBody:body
data:[NSString stringWithString:@"Content-Type: content/unknown\r\n\r\n"]];
}
}
[self utfAppendBody:body data:endLine];
}
FBLOG2(@"Sending %s", [body bytes]);
return body;
}