iOS系统级自定义分享动作实现:所需API及Pinterest方案问询
全系统自定义分享动作实现方案
一、核心API与正确配置方式
- UIActivity(兼容iOS全版本):你之前用它没在其他应用显示,大概率是配置不到位,要做好这几点:
- 自定义
UIActivity子类,必须重写activityType(设唯一标识符,比如com.yourapp.custom-share)、activityTitle、activityImage这三个核心属性。 - 在
Info.plist里添加NSUserActivityTypes数组,把你的自定义activity类型加进去。 - 关键:实现
canPerform(withActivityItems:)方法,根据分享内容类型返回true——比如支持图片、链接、文本的话,只要传入的activityItems里包含这些类型,就返回true,这样其他应用的分享面板才会加载你的动作。
- 自定义
- App Intents(iOS 16+推荐):iOS 16及以上用这个更简洁,步骤如下:
- 创建继承自
ShareIntent的结构体,用@Parameter定义支持的输入内容(比如@Parameter(title: "分享内容") var content: [Any])。 - 实现
perform()方法处理具体的分享逻辑。 - 在
Info.plist中添加NSExtension配置,类型设为com.apple.intents-ui-service,关联你的Intent处理类,同时在IntentsSupported数组里声明你的ShareIntent类型。配置完成后,系统分享面板会自动识别并显示你的动作。
- 创建继承自
二、Pinterest的全场景适配逻辑
Pinterest能覆盖几乎所有分享场景,核心靠这几个操作:
- 全数据类型兼容:它的分享动作在
canPerform(withActivityItems:)里做了宽泛的判断,支持图片、URL、文本、各类文件等几乎所有常见分享数据类型,只要有可分享内容就会显示选项。 - 注册Share Extension(系统级扩展):这是关键——它通过iOS的分享扩展能力,直接注册成系统级的分享选项。配置时在
Info.plist里加NSExtension,类型设为com.apple.share-services,并指定支持的输入类型(比如public.image、public.url),这样任何应用调用系统分享时,只要数据类型匹配,Pinterest的选项就会出现。 - 多API组合适配:同时结合UIActivity、Share Extension和App Intents,覆盖不同iOS版本;另外还支持拖拽分享、快捷指令调用等系统能力,进一步扩大覆盖场景。
三、你的UIActivity问题排查点
- 检查
Info.plist的NSUserActivityTypes数组是否包含你的自定义activity类型。 - 确认
canPerform(withActivityItems:)的逻辑是否太严格——比如如果只判断了图片类型,分享文本时就不会显示,要根据需求放宽判断。 - 确保
activityImage是有效图标(建议用矢量图适配多尺寸),activityTitle不为空。
内容的提问来源于stack exchange,提问作者gngrwzrd
相关产品推荐
相关产品推荐

