如何从UIActivityViewController获取title和messageBody元数据到自定义UIActivity?
自定义UIActivity获取UIActivityItemsConfiguration元数据的现状与问题
核心问题
iOS 13及以上版本中,使用UIActivityItemsConfiguration构建UIActivityViewController时,通过perItemMetadataProvider回调配置的title和messageBody元数据,仅能被系统自带活动(如Messages、Mail)正常读取:
messageBody会被加入共享项列表,自定义UIActivity可通过canPerform(withActivityItems:)和prepare(withActivityItems:)方法获取title未被纳入共享项,且UIActivity无公开API可访问该元数据,自定义活动无法获取
尝试过的方案及局限
- 为自定义
UIActivity添加title/subject属性:系统不会自动为这些属性赋值,无法解决问题 - 创建自定义活动时直接传入
subject:这种方式不符合规范,且无法适配第三方库提供的自定义UIActivity
补充说明
- 目前关于
UIActivityItemsConfiguration的公开技术讨论极少,仅相关提问涉及该API的这类场景 - 通过
UIActivityItemSource协议的activityViewController(_:subjectForActivityType:)方法提供的主题信息,同样没有公开API允许自定义UIActivity读取
调试发现的底层逻辑
通过调试可见,系统自带的UIMailActivity是调用UIActivity的私有方法_subjectForActivityItem:来获取title元数据的。这说明苹果仅为自家系统活动开放了私有接口读取这类元数据,当前无官方公开API支持自定义UIActivity获取UIActivityItemsConfiguration中的title或UIActivityItemSource返回的subject。
内容的提问来源于stack exchange,提问作者HangarRash
相关产品推荐
相关产品推荐

