限制UIActivityViewController分享扩展活动

10
我正在使用UIActivityViewController和一些自定义的UIActivityProviders,我的提供者返回NSStringUIImage和自定义数据对象。我通过设置 UIActivityViewController excludedActivityTypes 和苹果内置的活动类型来排除我不想分享的活动。
我不喜欢的是在显示的UIActivityViewController中出现的应用程序不是内置活动类型。我假设这些应用程序已告知iOS 8可处理文本和图像数据。例如,Flickr、Evernote和Facebook的共享扩展程序就是这样的应用程序。这些活动有它们自己的活动URL类型,我不想硬编码。
我不想让这些应用程序在我的活动共享中出现,因为大多数应用程序无法正常工作,最终会给我的用户带来不好的体验,并且可能会将我的应用程序归咎于糟糕的实现。事实是这些应用程序不能处理它们所声称能够处理的数据。例如,Evernote总是只呈现一个空的发布对话框。有些应用程序,如Facebook的共享扩展程序,甚至在无法处理数据类型时记录错误(真的吗?)。 是否可能阻止所有第三方共享扩展程序? 如果答案是否定的,似乎我只有两个选择:
  • 只与苹果内置的活动和我的自定义活动共享
  • 允许第三方扩展程序破坏传递
  • 将所有内容都包装在一个自定义类中,这样扩展程序就无法识别。这会导致Facebook记录错误。
困难在于initWithPlaceholderItem:(id)placeholderItem方法。我传回一个通用的NSString或UIImage,扩展程序称它们可以处理,但通常不会或在发布时记录错误。这将是检测共享扩展的可怕地方。
我想为我的用户提供最灵活的共享体验,但不以牺牲差劲的第三方实现为代价。
2个回答

1

我不确定这样做是否明智,但是你可以设置一个可信的活动提供者“白名单”。然后使用UIActivityItemSource协议的UIActivityItemProvider。你会得到以下调用:

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

检查activityType。如果它在您信任的提供程序白名单中,则返回数据项。如果无法识别activityType,则返回nil(或返回一些中性的“安全”数据元素)。 不受信任的活动仍可能出现在Activity表中,但它们将无法获取可用于对您的应用程序造成问题的数据。

-4

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

是的,可以。但是需要使用私有 API。 我不能告诉你细节,但是这是可能的。


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