10

我正在使用UIActivityViewController几个自定义 UIActivityProviders。我的提供程序返回NSStringUIImage和自定义数据对象。UIActivityViewController excludedActivityTypes我通过设置和 Apple 的内置活动类型排除了我不想共享的活动。

我不喜欢的是出现在呈现的 UIActivityViewController 上的应用程序,这些应用程序不是在活动类型中构建的。我假设这些出现是因为应用程序已经通知 iOS 8 他们可以处理文本和图像数据。例如 Flickr、Evernote 和 FaceBook 的共享扩展。这些活动有自己的活动 URL 类型,我不想对其进行硬编码。

我不希望在我的活动共享中使用这些应用程序的原因是大多数都不能正常工作,最终给我的用户带来糟糕的体验,并可能将我的应用程序实施不当归咎于我的应用程序。现实情况是,这些应用程序无法处理他们声称可以处理的数据。例如,Evernote 总是只显示一个空的帖子对话框。有些,比如 Facebook 的共享扩展,如果他们无法处理数据类型(真的吗?),甚至会记录错误。

是否可以阻止所有第 3 方共享扩展程序?

如果答案是否定的,我似乎只有两个选择:

  • 仅与 Apple 的内置活动和我的自定义活动共享
  • 允许 3 方分机搞砸手
  • 将我所有的内容包装在一个自定义类中,这样扩展就无法识别它。这会从 Facebook 生成一个记录错误

困难来自initWithPlaceholderItem:(id)placeholderItem。我传回了一个通用的 NSString 或 UIImage ,扩展程序说它们可以处理,但通常不会或在发布时记录错误。这将是一个检测共享扩展的可怕地方。

我想为我的用户提供最灵活的共享体验,但不以糟糕的第三方实施为代价。

我知道我们喜欢在 SO 上显示代码,但想不出任何不仅仅是样板UIActivityController素材。

4

2 回答 2

1

不确定这样做是否明智,但您可以设置受信任活动提供者的“白名单”。然后使用 UIActivityItemProvider 和 UIActivityItemSource 协议。你会接到电话:

- (id)activityViewController:(UIActivityViewController *)activityViewController
     itemForActivityType:(NSString *)activityType

检查activityType. 如果它在您的受信任提供商白名单上,请返回数据项。如果activityType无法识别,则返回 nil(或返回一些已绝育的“安全”数据元素)。

不受信任的活动可能仍会显示在活动表中,但它们不会获取导致您的应用出现问题的数据。

于 2015-03-09T19:03:07.557 回答
-4

是否可以阻止所有第 3 方共享扩展程序?

是的,可能。但是通过私有API。我不能告诉你细节,但这是可能的。

于 2015-02-20T09:47:44.953 回答