如何防止操作扩展出现在我自己的 iOS 应用程序中?

Posted

技术标签:

【中文标题】如何防止操作扩展出现在我自己的 iOS 应用程序中?【英文标题】:How to prevent an action extension from appearing in my own iOS app? 【发布时间】:2019-10-22 19:38:46 【问题描述】:

我有一个带有操作扩展的 ios 应用程序,用于在其他应用程序内的图像呈现 UIActivityViewController 时对其执行操作。一切都按预期工作 - 如果我在另一个应用程序中展示活动表,我的操作扩展会出现在系统操作旁边的列表中(例如保存到文件创建表盘 等等)。

但是,当我在其中的图像上显示UIActivityViewController 时,操作扩展也会出现在我自己的应用程序中,这是我不希望发生的。有什么方法可以防止我自己的操作扩展出现在我自己的应用程序内的UIActivityViewController 中?

我尝试在呈现UIActivityViewController 时向excludedActivityTypes 添加一个条目,如下所示,但这不起作用:

let activity = UIActivityViewController(activityItems: [media], applicationActivities: nil)
activity.excludedActivityTypes = [UIActivity.ActivityType("com.example.ActionExtensionIdentifier")]
// other setup code
present(activity, animated: true)

【问题讨论】:

【参考方案1】:

这是我最终使用的解决方案,以防其他人需要。 (代码取自这篇博文:https://pspdfkit.com/blog/2016/hiding-action-share-extensions-in-your-own-apps/,因此也请查看该文章以了解更多详细信息,但我在此处提供的解决方案包含完成这项工作所需的一切。)

1.首先,创建这个类

class ActionExtensionBlockerItem: NSObject, UIActivityItemSource 
    func activityViewController(_ activityViewController: UIActivityViewController, dataTypeIdentifierForActivityType activityType: UIActivity.ActivityType?) -> String 
        return String()
    

    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? 
        return NSObject()
    

    func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String 
        return String()
    

    func activityViewController(_ activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: UIActivity.ActivityType?, suggestedSize size: CGSize) -> UIImage? 
        return nil
    

    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any 
        return String()
    

2。应用该类的实例

当您呈现UIActivityViewController 时,创建ActionExtensionBlockerItem 的实例并将其包含在activityItems 数组中,如下所示:

func share(_ image: UIImage) 
    let activity = UIActivityViewController(activityItems: [image, ActionExtensionBlockerItem()], applicationActivities: nil)
    activity.popoverPresentationController?.sourceView = view // change to something appropriate for your app
    activity.popoverPresentationController?.sourceRect = view.bounds // change to something appropriate for your app
    present(activity, animated: true)

【讨论】:

不适合我,仍然在活动视图控制器中显示“复制到...” 您是否按照 pspdfkit 链接中的指南进行操作?里面有更多信息。

以上是关于如何防止操作扩展出现在我自己的 iOS 应用程序中?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 React Native 中的静态图像在 iOS 上出现卡顿/异步加载

php如何防止sql注入

出现叠加时防止背景滚动

如何从 iOS 键盘扩展中检测到通过在 iMessage 中点击“发送”等操作清除了文本字段?

iOS 8 移除今日扩展

如何防止meteor.local的负载(使用phonegap构建ios应用程序时)