我可以使用UIActivityViewController和本地UIActivityTypePostToTwitter发布动态GIF吗?

6

我有一个 UIActivityViewController,共享一个符合 UIActivityItemSource 协议的对象,并在适当的方法中返回 .gif 文件的 NSURLCFBridgingRelease(kUTTypeGIF)

如果我在新邮件消息中分享我的某个对象,我可以在模拟器中看到 GIF 动画。如果我尝试发布同样的内容到 Twitter,那么图像的一帧会作为推文附加,但它会上传为静态图像。

我需要等待苹果在未来的 iOS 版本中更新 UIActivityTypePostToTwitter,还是我错过了你们在某个地方看到的解决方法?(我意识到这种情况没有使用来自列表 "Twitter.com、Android 和 iPhone [应用程序]" 的任何内容。这可能是徒劳的请求。)

已经完成的作业:

我知道Twitter活动类型也可以与ALAsset对象一起使用,人们通过将数据包装在ALAssets中来将动画gif插入和提取出保存的照片,但如果可能的话,我希望能够在不触摸相机胶卷的情况下发布这些gif。 我查看了NSHipster。 我尝试根据Lyndsey有关Twitter API的提示返回NSData对象而不是NSURL以获取本地.gif文件。没有变化。在Twitter API文档中看到dataTypeIdentifierForActivityType后,我尝试返回kUTTypeData而不是kUTTypeGIF:图像应该传递为图像的原始二进制或二进制base64编码,只要Content-Type设置正确(当不确定时:“ application/octet-stream”)。但是,我的推文中没有显示图片。

谢谢!


我不确定是苹果阻止了这个。可能是Twitter主机API不接受来自苹果的动画GIF图像。Twitter是否接受来自基于浏览器的客户端或其他本机移动客户端(例如Android或Windows Mobile)的动画GIF? - Duncan C
@DuncanC,Twitter允许在浏览器和他们的Android应用程序中使用它们。 - origamike
1
@origamike 你好,你找到解决方案了吗? - Andrey Tarantsov
我发现了一个看起来像是bug的问题:如果你没有安装原生的Twitter应用程序,但是已经配置了Twitter账户,使用NSData方法会产生可工作的GIF。我使用Tweetbot,所以一开始没有注意到这个问题,但是另一个测试人员遇到了同样的问题,我也能够重现它。如果你找到了解决这个问题的方法,请告诉我。 - mga
有人有解决方案吗?SteppyPants似乎已经能够做到了。 - Richard Fu
显示剩余3条评论
2个回答

0

遇到了类似的问题并进行了很多谷歌搜索,但仍然没有找到完美的解决方案,最好的解决方案在这里:

使用UIActivityItemProvider并扩展-(id)item {}以用于不同的UIActivityType:

Twitter:默认的UIActivityViewController Twitter共享尚不支持它,它将“缩小”为静态JPG。 但是不知何故,对于小于100kb的GIF(在iOS 9中测试),它仍然可以工作。 因此,我必须使用SLRequest来上传GIF,如here所教授。 当SLRequest完成并返回时,关闭UIActivityViewController。 其缺点是没有预览共享表格,用户不能再键入自己的消息。

- (id)item
{    
    if ([self.activityType isEqualToString:UIActivityTypePostToFacebook]) {
        // Upload to Giphy
        ...
        return [NSURL URLWithString:giphyURL];
    }
    if ([self.activityType isEqualToString:UIActivityTypePostToTwitter]) {
        // Use SLRequest to share instead
        ...
        // Dismiss the UIActivityViewController (I am using Unity)
        [UnityGetGLViewController() dismissViewControllerAnimated:NO completion: NULL];
        return nil;
    }
}

完整代码在我的GitHub上,我其实是一个iOS新手,所以如果可能的话,请一些专家纠正我的代码。


0

Twitter API中“参数”所列:

image:个人资料的背景图像,以base64编码。必须是有效的GIF、JPG或PNG图像,大小不超过800千字节。宽度大于2048像素的图像将被强制缩小。图像必须作为原始多部分数据提供,而不是URL。


2
感谢您的努力,Lyndsey。这些大小限制不适用于推文中的图像,但是如果“原始数据”是一个提示,我已经尝试将UIActivityItem提供为NSData对象而不是NSURL,但是仍然会发生相同的情况:Twitter上传静态图像。我的理解是UIActivityTypePostToTwitter存在的目的是为了抽象出Twitter API的要求,但它还没有准备好支持动画GIF。 - origamike
虽然这并不完全回答问题,但我已经测试并确认UIActivityViewController上传的GIF在小于100kb时可以成功动画,否则它会被“缩小”为JPG..... - Richard Fu
@RichardFu 看起来我直接在评论串中回复了这个对话:“你是将图像作为数据还是作为URL发布的?- Lyndsey Scott 2014年6月23日1:44” “@LyndseyScott,作为本地.gif文件的URL - origamike 2014年6月23日4:54”。但似乎origamike在这个答案下的大小限制评论是不正确的,我发布的整个内容需要被遵循,以便gif不会被强制缩小为jpg。 - Lyndsey Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接