Как я могу проверить ход загрузки на Facebook с iOS? - PullRequest
2 голосов
/ 29 октября 2011

Я использую Facebook iOS SDK и использую Graph API для загрузки видео в Facebook.

Загрузка работает отлично, но я могу следить за ходом загрузки, чтобы отразить прогресс в индикаторе выполнения.

Ответы [ 2 ]

5 голосов
/ 27 октября 2013

Это старый вопрос, но то, что вы пытаетесь сделать, возможно с последней версией Facebook iOS SDK v3.9.(27 октября 2013 г.)

По сути, FBRequestConnection предоставляет свойство urlRequest (NSMutableURLRequest), которое можно использовать для отправки данных любым другим сторонним сетевым средам или даже тем, которые предоставила Apple.

https://developers.facebook.com/docs/reference/ios/current/class/FBRequestConnection#urlRequest

Вот пример того, как я получаю обратные вызовы прогресса с помощью AFNetworking 1.x.

Подготовка тела запроса

NSDictionary *parameters = @{ @"video.mov": videoData,
                              @"title": @"Upload Title",
                              @"description": @"Upload Description" };

Создание FBRequest

FBRequest *request = [FBRequest requestWithGraphPath:@"me/videos" 
                                          parameters:parameters
                                          HTTPMethod:@"POST"];

Создать FBRequestConnection (отменить и извлечь URLRequest)

FBRequestConnection *requestConnection = [request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
}];
[requestConnection cancel];

NSMutableURLRequest *urlRequest = requestConnection.urlRequest;

Использовать AFNetworking HTTPRequestOperation

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
  // Do your success callback.
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  // Do your failure callback.
}];

Установить обратный вызов процесса

[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
  NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];

Запустить операцию

[[APIClient sharedInstance] enqueueHTTPRequestOperation:operation];
// APIClient is a singleton class for AFHTTPClient subclass
0 голосов
/ 04 мая 2012

Я наконец нашел способ сделать это после осмотра в NSURLConnection.Это означает добавление следующего кода в файлы FBRequest.h и FBRequest.m для создания нового делегата.

В нижней части файла FBRequest.m есть все методы для NSURLConnectionDelegate.Добавьте этот код здесь:

- (void)connection:connection
   didSendBodyData:(NSInteger)bytesWritten
 totalBytesWritten:(NSInteger)totalBytesWritten
totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
{
    float percentComplete = ((float)totalBytesWritten/(float)totalBytesExpectedToWrite);

    if ([_delegate respondsToSelector:@selector(request:uploadPercentComplete:)])
    {
        [_delegate request:self uploadPercentComplete:percentComplete];
    }
}

Теперь поместите это в класс FBRequest.h для создания нового делегата FBRequest:

/**
 * Called a data packet is sent
 *
 * The result object is a float of the percent of data sent
 */
- (void)request:(FBRequest *)request uploadPercentComplete:(float)per;

Это идет в нижней части файла FBRequest.hпосле:

@protocol FBRequestDelegate <NSObject>

@optional

Теперь все, что вам нужно сделать, это вызвать этого нового делегата в любом месте вашего кода, как и любой другой делегат FBRequest, и он даст вам значение с плавающей запятой от 0,0 до 1,0 (от 0% до 100%).).

Странно, что API Facebook не имеет этого (наряду с отменой загрузки, которую я узнал, как это сделать здесь Как отменить процесс загрузки видео с помощью iOS iOS SDK Facebook? ) поскольку это не так сложно.

Наслаждайтесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...