SwiftUI使用openURL打开外链
SwiftUI使用openURL打开外链

SwiftUI使用openURL打开外链

在 SwiftUI 里,openURL 是一个用于打开外部链接(URL)的环境动作(Environment Action)。它可以在 App 内部轻松地打开网页、邮件、电话、App Scheme 等各种 URL,而不需要直接使用 UIKit 的 UIApplication.shared.open()。。

openURL 是通过环境对象 OpenURLAction 实现的:

@Environment(\.openURL) var openURL

使用方法:

@Environment(\.openURL) var openURL

Button("打开我的网站") {
    openURL(URL(string: "https://www.fangjunyu.com")!)
}

可以在Safari中打开网页。

支持类型

只要是系统能识别的 URL Scheme 都可以:

网页:https://apple.com,在 Safari 打开网页;

电话:tel:123456789,打开拨号界面;

邮件:mailto:test@example.com,打开邮件应用并填写收件人;

App Scheme:twitter://user?screen_name=apple,打开指定的 App(若安装)。

1、打开电话

if let phoneURL = URL(string: "tel://1234567890") {
    openURL(phoneURL)
}

2、打开短信

if let smsURL = URL(string: "sms:1234567890") {
    openURL(smsURL)
}

3、打开邮件

if let mailURL = URL(string: "mailto:fangjunyu.com@gmail.com") {
    openURL(mailURL)
}

4、打开地图位置

if let mapURL = URL(string: "maps://?q=Rizhao") {
    openURL(mapURL)
}

.environment(\.openURL) 自定义行为

可以拦截 openURL 的默认行为,比如让链接在 App 内部 WebView 打开,而不是跳转 Safari:

.environment(\.openURL, OpenURLAction { url in
    // 自定义逻辑,比如用 WebView 展示
    print("准备打开 \(url)")
    return .handled
})

OpenURLAction.Result 有三种返回值:

.handled:自行处理了这个 URL。

.discarded:忽略掉,不处理。

.systemAction:交回系统默认处理。

注意事项

1、确保传递给 openURL 的 URL 是有效的,避免崩溃。

2、某些 URL Scheme(例如 tel: 和 sms:)可能在模拟器上无效,但会在真机上正常运行。

3、对于复杂的深度链接,建议解析 URL 并根据参数进行操作。

总结

openURL是SwiftUI推荐的方式:

@Environment(\.openURL) var openURL
openURL(URL(string: "https://www.apple.com")!)

系统自动在 Safari 打开。

在UIKit中,可以使用UIApplication.shared.open打开网页:

if let url = URL(string: "https://www.apple.com") {
    UIApplication.shared.open(url)
}

相比openURL更底层,但是没有办法通过 Environment 拦截或自定义。

也可选择封装openURL的Link方法。

相关文章

1、SwiftUI超链接Link:https://fangjunyu.com/2024/12/31/swift%e5%ba%94%e7%94%a8%e5%86%85%e5%88%9b%e5%bb%ba%e8%b6%85%e9%93%be%e6%8e%a5%e7%9a%84link%e6%96%b9%e6%b3%95/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注