IOS - Unable to load media using Twitter / Fabric New SDK

I want to post a photo on twitter from my iOS application. I can publish a tweet without media, but when I try to connect the media, it gives an error.

I follow the documentation on twitter, and in accordance with this, I first need to upload the media to https://upload.twitter.com/1.1/media/upload.json , after which I can connect it with a tweet using media-id.

here is my code to download media.

Application crashes when calling URLRequestWithMedthod.

Help solve the problem.

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 sharedInstance] APIClient] 
                         URLRequestWithMethod:@"POST"
                         URL:statusesShowEndpoint
                         parameters:params
                         error:&clientError];

if (request) {
    [[[Twitter sharedInstance] APIClient]
     sendTwitterRequest:request
     completion:^(NSURLResponse *response,
                  NSData *data,
                  NSError *connectionError) {
         if (data) {
             // handle the response data e.g.
             NSError *jsonError;
             NSDictionary *json = [NSJSONSerialization
                                   JSONObjectWithData:data
                                   options:0
                                   error:&jsonError];
             NSLog(@"%@",json);
         }
         else {
             NSLog(@"Error: %@", connectionError);
         }
     }];
}
else {
    NSLog(@"Error: %@", clientError);
}
+4
source share
3 answers

, . - imagedata base64EncodedString. .

   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 sharedInstance] APIClient] URLRequestWithMethod:@"POST" URL:media parameters:@{@"media":imageString} error:&error];

   [[[Twitter sharedInstance] 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
    }];
+9

// Post tweet With media_id

mediaID = [json objectForKey:@"media_id_string"];
client = [[Twitter sharedInstance] 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);
    }
}];
+1

Exchange fast code 2.2 (Xcoe 7.3.2) if someone is still looking for help.

 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)
        }
    })

Submit with status update.

   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")
        }
    })
}
0
source

All Articles