解决方法
根据
documentation需要通过命令进行3个呼叫:INIT,APPEND和FINALIZE.
-(void) shareOnTwitterWithVideo:(NSDictionary*) params{ NSString *text = params[@"text"]; NSData* dataVideo = params[@"video"]; NSString *lengthVideo = [NSString stringWithFormat:@"%d",[params[@"length"] intValue]]; NSString* url = @"https://upload.twitter.com/1.1/media/upload.json"; __block NSString *mediaID; if([[Twitter sharedInstance] session]){ TWTRAPIClient *client = [[Twitter sharedInstance] APIClient]; NSError *error; // First call with command INIT NSDictionary *message = @{ @"status":text,@"command":@"INIT",@"media_type":@"video/mp4",@"total_bytes":lengthVideo}; NSURLRequest *preparedRequest = [client URLRequestWithMethod:@"POST" URL:url parameters:message error:&error]; [client sendTwitterRequest:preparedRequest completion:^(NSURLResponse *urlResponse,NSData *responseData,NSError *error){ if(!error){ NSError *jsonError; NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonError]; mediaID = [json objectForKey:@"media_id_string"]; client = [[Twitter sharedInstance] APIClient]; NSError *error; NSString *videoString = [dataVideo base64EncodedStringWithOptions:0]; // Second call with command APPEND message = @{@"command" : @"APPEND",@"media_id" : mediaID,@"segment_index" : @"0",@"media" : videoString}; NSURLRequest *preparedRequest = [client URLRequestWithMethod:@"POST" URL:url parameters:message error:&error]; [client sendTwitterRequest:preparedRequest completion:^(NSURLResponse *urlResponse,NSError *error){ if(!error){ client = [[Twitter sharedInstance] APIClient]; NSError *error; // Third call with command FINALIZE message = @{@"command" : @"FINALIZE",@"media_id" : mediaID}; NSURLRequest *preparedRequest = [client URLRequestWithMethod:@"POST" URL:url parameters:message error:&error]; [client sendTwitterRequest:preparedRequest completion:^(NSURLResponse *urlResponse,NSError *error){ if(!error){ client = [[Twitter sharedInstance] APIClient]; NSError *error; // publish video with status NSString *url = @"https://api.twitter.com/1.1/statuses/update.json"; NSMutableDictionary *message = [[NSMutableDictionary alloc] initWithObjectsAndKeys:text,@"status",@"true",@"wrap_links",mediaID,@"media_ids",nil]; NSURLRequest *preparedRequest = [client URLRequestWithMethod:@"POST" URL:url parameters:message error:&error]; [client sendTwitterRequest:preparedRequest completion:^(NSURLResponse *urlResponse,NSError *error){ if(!error){ NSError *jsonError; NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonError]; NSLog(@"%@",json); }else{ NSLog(@"Error: %@",error); } }]; }else{ NSLog(@"Error command FINALIZE: %@",error); } }]; }else{ NSLog(@"Error command APPEND: %@",error); } }]; }else{ NSLog(@"Error command INIT: %@",error); } }]; } }