iOS - 无法使用 Twitter/Fabric New SDK 上传媒体

标签 ios objective-c twitter twitter-rest-api

我想从我的 iOS 应用程序将照片发布到 Twitter。我可以在没有媒体的情况下发布推文,但是当我尝试附加媒体时它会引发错误。

我正在关注 Twitter 文档,根据该文档,我首先需要将媒体上传到 https://upload.twitter.com/1.1/media/upload.json然后我就可以使用 media-id 将其附加到推文中。

这是我上传媒体的代码。

应用在调用 URLRequestWithMedthod 时崩溃。

帮我解决问题。

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

最佳答案

其实很简单。所缺少的只是将图像数据转换为 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
    }];

关于iOS - 无法使用 Twitter/Fabric New SDK 上传媒体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29555971/

相关文章:

ios - SceneKit – 应用程序崩溃

objective-c - 使用 GL3_Text 示例方法在 Mac OSX 上的 OpenGL 中绘制文本

ios - UIImage 上的形状/蒙版?

ios - Wordpress 自定义 css 无法在 iOS 上加载

objective-c - 在另一个方法中使用在 viewDidLoad 中创建的 NSString 变量

c# - Twitter API 获取用户提要

python - Twitter API - 获取关注者的关注者数量

c# - 如何实时跟踪 Twitter feed?

ios - 如何让 UITableView 向上滚动以容纳键盘?

ios - 使用适用于 ios 的 google drive api 检索 "Google doc"创建的文件大小