iOS: no se pueden cargar medios con Twitter / Fabric New SDK

Quiero publicar una foto en Twitter desde mi aplicación iOS. Puedo publicar un tweet sin medios, pero cuando estoy intentando adjuntar medios arroja un error.

Estoy siguiendo la documentation de twitter y de acuerdo con eso primero necesito upload los medios a https://upload.twitter.com/1.1/media/upload.json y luego podré adjuntarlo al tweet usando media-id.

aquí está mi código para cargar medios.

La aplicación se está estrellando en la llamada URLRequestWithMedthod.

Ayúdame a resolver el problema.

UIImage *image = [UIImage imageNamed:@"shareit.png"]; NSData *imageData = UIImageJPEGRepresentation(image, 0.7); NSString *statusesShowEndpoint = @"https://upload.twitter.com/1.1/media/upload.json"; NSDictionary *params = @{@"media" : imageData}; NSError *clientError; NSURLRequest *request = [[[Twitter shanetworkingInstance] APIClient] URLRequestWithMethod:@"POST" URL:statusesShowEndpoint parameters:params error:&clientError]; if (request) { [[[Twitter shanetworkingInstance] APIClient] sendTwitterRequest:request completion:^(NSURLResponse *response, NSData *data, NSError *connectionError) { if (data) { // handle the response data eg NSError *jsonError; NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError]; NSLog(@"%@",json); } else { NSLog(@"Error: %@", connectionError); } }]; } else { NSLog(@"Error: %@", clientError); } 

Bueno, fue bastante simple. Todo lo que faltaba es la conversión de imagedata en base64EncodedString. Esta es la solución.

  NSString *media = @"https://upload.twitter.com/1.1/media/upload.json"; NSData *imageData = UIImageJPEGRepresentation(image, 0.9); NSString *imageString = [imageData base64EncodedStringWithOptions:0]; NSError *error; NSURLRequest *request = [[[Twitter shanetworkingInstance] APIClient] URLRequestWithMethod:@"POST" URL:media parameters:@{@"media":imageString} error:&error]; [[[Twitter shanetworkingInstance] APIClient] sendTwitterRequest:request completion:^(NSURLResponse *urlResponse, NSData *data, NSError *connectionError) { NSError *jsonError; NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError]; NSLog(@"Media ID : %@",[json objectForKey:@"media_id_string"]); // Post tweet With media_id }]; 

Completando la respuesta de Saani

 // Post tweet With media_id mediaID = [json objectForKey:@"media_id_string"]; client = [[Twitter shanetworkingInstance] APIClient]; message = @{@"status": title, @"wrap_links": @"true", @"media_ids": mediaID}; NSURLRequest *request = [client URLRequestWithMethod:@"POST" URL:@"https://api.twitter.com/1.1/statuses/update.json" parameters:message error:&error]; [client sendTwitterRequest:request completion:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { if (connectionError) { NSLog(@"error %@",[connectionError localizedDescription]); } else { NSError *jsonError; NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError]; NSLog(@"json Finish! %@",json); } }]; 

Compartir el código Swift 2.2 (Xcoe 7.3.2) si alguien todavía está buscando ayuda.

  let client = TWTRAPIClient.init(userID:<Twitter_User_Id_Here>) let imgData = UIImageJPEGRepresentation(UIImage(named:"Home")!, 0.7) client.uploadMedia(imgData!, contentType: "image/jpeg", completion: {(media_ids,error) in if error == nil{ //prints the media_ids in String. //Pass them into the params of status update params ["media_ids":<MEDIA_ID>] print(media_ids) } else{ print(error?.localizedDescription) } }) 

Para enviar con actualización de estado.

  let request = client.URLRequestWithMethod("POST", URL: "https://api.twitter.com/1.1/statuses/update.json", parameters: ["status":"Hello World","media_ids":<Media_Ids_Here>], error: nil) client.sendTwitterRequest(request, completion: { (response,data,error)in if error == nil { print(data) } else{ print("Error") } }) }