我正在使用UIActivityViewController
几个自定义 UIActivityProviders。我的提供程序返回NSString
、UIImage
和自定义数据对象。UIActivityViewController excludedActivityTypes
我通过设置和 Apple 的内置活动类型排除了我不想共享的活动。
我不喜欢的是出现在呈现的 UIActivityViewController 上的应用程序,这些应用程序不是在活动类型中构建的。我假设这些出现是因为应用程序已经通知 iOS 8 他们可以处理文本和图像数据。例如 Flickr、Evernote 和 FaceBook 的共享扩展。这些活动有自己的活动 URL 类型,我不想对其进行硬编码。
我不希望在我的活动共享中使用这些应用程序的原因是大多数都不能正常工作,最终给我的用户带来糟糕的体验,并可能将我的应用程序实施不当归咎于我的应用程序。现实情况是,这些应用程序无法处理他们声称可以处理的数据。例如,Evernote 总是只显示一个空的帖子对话框。有些,比如 Facebook 的共享扩展,如果他们无法处理数据类型(真的吗?),甚至会记录错误。
是否可以阻止所有第 3 方共享扩展程序?
如果答案是否定的,我似乎只有两个选择:
- 仅与 Apple 的内置活动和我的自定义活动共享
- 允许 3 方分机搞砸手
- 将我所有的内容包装在一个自定义类中,这样扩展就无法识别它。这会从 Facebook 生成一个记录错误
困难来自initWithPlaceholderItem:(id)placeholderItem
。我传回了一个通用的 NSString 或 UIImage ,扩展程序说它们可以处理,但通常不会或在发布时记录错误。这将是一个检测共享扩展的可怕地方。
我想为我的用户提供最灵活的共享体验,但不以糟糕的第三方实施为代价。
我知道我们喜欢在 SO 上显示代码,但想不出任何不仅仅是样板UIActivityController
素材。