如何与 iOS 共享文件?

Posted

技术标签:

【中文标题】如何与 iOS 共享文件?【英文标题】:How can I share a file with iOS? 【发布时间】:2014-10-16 22:17:13 【问题描述】:

所以我让我的应用程序创建一个文件,在这种情况下它实际上是一个动画 .gif。此动画 .gif 已保存在设备上,一切就绪 - 我现在要做的是在用户单击“共享”按钮时共享此文件。

简单地说,我该如何做到这一点?

有没有办法告诉 ios 打开共享窗口并且我正在共享图像?现在我找不到这样做的方法,所以我正在创建一个新的 UIImage ,并在设备上使用此动画 .gif 的路径,但这最终会将我的动画文件转换为静态图片。

再说一遍 - 我已经在用户的设备上创建并保存了动画 .gif 文件

任何帮助表示赞赏。

编辑:澄清一下,我已经习惯了 Android,我只是调用一个共享文件的意图,然后弹出一个 Gmail、Facebook、Twitter 等列表......我基本上想要如果可能的话,等价的。

【问题讨论】:

UIDocumentInteractionController. 分享给什么?文件需要应用程序才能运行。命名一个。 看我已经习惯了 android,我只是调用一个共享文件的意图,然后弹出一个 Gmail、Facebook、Twitter 等列表......我基本上想要相当于如果可能的话。 【参考方案1】:

您可能想查看 UIActivityViewController 文档。这将打开一个工作表,其中包含可在设备上共享的所有方式。见这里https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIActivityViewController_Class/index.html#//apple_ref/doc/uid/TP40011976-CH1-SW2。您可能希望使用图像或 UIActivityItemSource 初始化 ActivityViewController

【讨论】:

看,谢谢你的回答,但这对我没有帮助。如果我不够清楚,我很抱歉,但虽然这是我想要的(为了分享),但我要问的是如何专门分享动画 .gif?在 Android 中,我所要做的就是指定文件的路径,说“这是一张图片”,然后调用共享意图。在 iOS 中,您似乎可以共享文本、URL 或 UIImage (即静态图像),至少我所看到的就是这些。【参考方案2】:

Facebook 和 twitter 不支持 UIActivityViewController,仍然在这个仅使用有限的应用程序中。现在这段代码非常有用。

-(void)uploadImageToTwitter

ACAccountStore *account = [[ACAccountStore alloc] init];
ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:
                              ACAccountTypeIdentifierTwitter];

[account requestAccessToAccountsWithType:accountType options:nil
                              completion:^(BOOL granted, NSError *error)
 
     if (granted == YES)
     
         NSArray *arrayOfAccounts = [account
                                     accountsWithAccountType:accountType];

         if ([arrayOfAccounts count] > 0)
         
             ACAccount *twitterAccount =
             [arrayOfAccounts lastObject];

// // NSURL *furl = [NSURL fileURLWithPath:NSTemporaryDirectory()]; // NSURL *fileURL = [furl URLByAppendingPathComponent:@"animation.gif"];

               NSData *imageData = [NSData dataWithContentsOfURL:_GIFURL];

              NSURL *requestURL = [NSURL URLWithString:@"https://upload.twitter.com/1.1/media/upload.json"];

             SLRequest *postRequest = [SLRequest
                                       requestForServiceType:SLServiceTypeTwitter
                                       requestMethod:SLRequestMethodPOST
                                       URL:requestURL parameters:nil];

             postRequest.account = twitterAccount;

             [postRequest addMultipartData:imageData
                                  withName:@"media"
                                      type:@"image/gif"
                                  filename:@"test.gif"];

             [postRequest
              performRequestWithHandler:^(NSData *responseData,
                                          NSHTTPURLResponse *urlResponse, NSError *error)
              


                  NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];

                  NSString *mediaID = [json objectForKey:@"media_id_string"];


                  if (mediaID!=nil) 


                      NSURL *requestURL2 = [NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/update.json"];
                      NSDictionary *message2 = @@"status": @"Here is the image",
                                                 @"media_ids": mediaID ;

                      SLRequest *postRequest2 = [SLRequest
                                                 requestForServiceType:SLServiceTypeTwitter
                                                 requestMethod:SLRequestMethodPOST
                                                 URL:requestURL2 parameters:message2];
                      postRequest2.account = twitterAccount;

                      [postRequest2
                       performRequestWithHandler:^(NSData *responseData,
                                                   NSHTTPURLResponse *urlResponse, NSError *error)
                       
                           // DONE!!!

                           UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Notification" message:@"Upload Twitter Account" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                           [alert show];


                       ];

                  

              ];
         
     
 ];

【讨论】:

以上是关于如何与 iOS 共享文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ios中与ms word共享文件夹?

在 Agora IO 中与参与者共享屏幕共享控件

java.io 如何访问一个共享文件夹?(该文件夹有限制,我有相关账号)最好有举例...

如何使用React Native接收在iOS上导出/共享的文件

如何在 iOS 中使用 swift 共享远程音频文件

如何使用 iTunes 文件共享以编程方式将文件传输到 iOS 设备?