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

iOS13不使用UIActivityViewController能否直接打开指定社交分享扩展

iOS13 下唤起指定社交平台分享的实现方案

完全可以在不使用UIActivityViewController全量列表、也不依赖已废弃的 Social 框架的前提下,直接唤起 Telegram、Twitter(X)等指定平台的分享能力,目前有两种稳定的兼容方案,均支持 iOS13 及以上系统:

方案1:通过自定义 URL Scheme 跳转分享

这种方案实现最轻量,完全适配自定义分享布局的交互需求,只需要提前在 Info.plist 的 LSApplicationQueriesSchemes 数组中添加你要用到的平台 Scheme 白名单即可。
常用平台分享 Scheme 参考:

  • Telegram:tg://msg?text=编码后的分享内容
  • Twitter(X):x://post?message=编码后的分享内容
  • WhatsApp:wa://send?text=编码后的分享内容

Swift 实现示例:

let shareContent = "需要分享的文本内容"
// 对分享内容做URL编码处理
guard let encodedContent = shareContent.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
      let shareUrl = URL(string: "tg://msg?text=\(encodedContent)"),
      UIApplication.shared.canOpenURL(shareUrl) else {
    // 未安装对应App时的自定义兜底逻辑
    return
}
UIApplication.shared.open(shareUrl)

方案2:直接调用指定平台的分享扩展

如果你需要分享图片、文件等复杂内容,不想记忆各平台的 Scheme 规则,可以直接匹配目标平台的分享扩展 ID,只展示指定的分享入口,过滤掉其他所有系统和第三方分享项。
常用平台分享扩展 ID 参考:

  • Telegram:ph.telegra.Telegraph.Share
  • Twitter(X):com.atebits.Tweetie2.ShareExtension

Swift 实现示例:

// 组装分享内容,支持文本、图片、文件等多种类型
let shareItems: [Any] = ["分享文本", UIImage(named: "share_img")!]
let targetActivityType = UIActivity.ActivityType(rawValue: "ph.telegra.Telegraph.Share")
let activityVC = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
// 过滤除目标分享扩展外的所有其他分享项
activityVC.excludedActivityTypes = UIActivity.ActivityType.allCases.filter { $0 != targetActivityType }
// 弹出仅含目标分享项的面板,也可根据需求自定义触发逻辑不展示系统面板
present(activityVC, animated: true)

注意事项

  • 两种方案均使用系统公开API,没有调用废弃接口的风险,符合App Store审核规则
  • 若使用URL Scheme方案,未安装对应App时可以自定义引导下载逻辑,交互自由度更高
  • 若使用分享扩展方案,无需处理URL编码等逻辑,复杂内容分享的兼容性更好

内容的提问来源于stack exchange,提问作者Alexander Nikolaychuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:54:04