2010-06-23 4 views
1

Я работаю над приложением, которое будет загружать видео на стене пользователей Facebook, однако у меня не было большого успеха. Я представляю диалоговое окно с расширенными разрешениями, а затем использую вызов метода face.video.upload. В отладчике кажется, что каждый параметр настроен правильно, однако диалог разрешения на использование не отображается полностью, а видеофайл никогда не загружается.Попытка загрузить видео на facebook с помощью FBConnect для iPhone

Видеофайл хранится в каталоге документов приложения (запись и воспроизведение прекращаются), но загрузка не работает. У меня есть параметры 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; 
} 
+0

omg Что случилось с вашим форматированием? – user102008

+0

Просто исправлено форматирование, но поскольку у меня нет прав на редактирование, он не будет отображаться до тех пор, пока он не будет рассмотрен. –

ответ

0

Вы установка videoFileName к необработанным байтам видеофайла:

videoFileName = [NSString stringWithUTF8String:[videoData bytes]]; 
.... 
[args setObject:videoFileName forKey:@"video"]; 

Я думаю, вы имели в виду:

videoFileName = [path lastPathComponent]; 

Я надеюсь, что это исправить вашу проблему.

+1

Спасибо, tonclon. Я фактически полностью удалил эту строку, и мне удалось получить эту работу с несколькими другими дополнениями кода. Я отправлю полный код чуть позже на этой неделе. Я ценю вашу помощь! – SliceofPy

+0

Не могли бы вы рассказать нам, что именно вы исправили в своем коде? Я сильно застрял в загрузке видео. – Tariq

+0

SliceofPy любой шанс взглянуть на рабочий код? Был бы очень признателен! –

Смежные вопросы