You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS开发:如何手动触发指定应用的共享扩展,定向发送文件

分享面板截图
更多应用列表截图

实现方案

该需求有两种成熟的实现路径,分别适配不同的分享场景:

方案1:使用目标应用的自定义URL Scheme(适合文本、轻量内容分享)

这是最常用的直达跳转方案,需要目标应用公开了跳转规则:

  • 第一步:确认目标应用公开的URL Scheme和传参规范,例如Slack的公开Scheme为slack://,官方会提供不同跳转场景对应的路径、参数规则。
  • 第二步:在项目的Info.plist中添加LSApplicationQueriesSchemes数组,将目标应用的Scheme(例如slack)加入数组,否则iOS会拦截应用的安装状态检测请求。
  • 第三步:添加按钮点击逻辑,先校验应用是否安装,再执行跳转传参:
// Swift 示例代码
guard let slackUrl = URL(string: "slack://open"), UIApplication.shared.canOpenURL(slackUrl) else {
    // 未安装Slack,可自定义提示逻辑
    return
}
// 要分享的内容可以先写入系统剪贴板,Slack唤起后会自动读取剪贴板内容
// 文本分享
UIPasteboard.general.string = "要分享的文本内容"
// 文件分享
// UIPasteboard.general.setData(fileData, forPasteboardType: "public.file-url")
UIApplication.shared.open(slackUrl)

方案2:使用UIDocumentInteractionController(更适合文件分享,无需记忆Scheme)

该方案不需要提前查询目标应用的Scheme,只要拿到对应应用的Bundle ID即可直接唤起,更适配文件分享场景:

  • 第一步:获取目标应用的Bundle ID,例如Slack iOS版的Bundle ID为com.tinyspeck.chatlyio,可通过公开资料、导出已安装应用IPA包两种方式查询。
  • 第二步:初始化文档交互控制器,直接调用指定应用打开方法:
// Swift 示例代码
let fileUrl = URL(fileURLWithPath: "待分享文件的本地存储路径")
guard let docController = UIDocumentInteractionController(url: fileUrl) else {
    return
}
// 直接指定Bundle ID唤起应用,不会弹出系统选择面板
let openSuccess = docController.open(
    inApplicationWithBundleIdentifier: "com.tinyspeck.chatlyio",
    animated: true
)
if !openSuccess {
    // 打开失败,通常是未安装应用、或应用不支持当前分享的文件格式
}

注意事项

  • 两种方案都要求目标应用本身支持接收你分享的文件格式,否则即使唤起应用也无法正常加载内容。
  • 如果需要提前判断目标应用是否安装,还是需要在LSApplicationQueriesSchemes中添加对应应用的Scheme,通过canOpenURL接口检测状态。
  • 若目标应用未公开Scheme也无法获取到Bundle ID,则无法实现直达分享,只能使用系统原生UIActivityViewController。

内容的提问来源于stack exchange,提问作者Kevin Renskers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 20:54:02