iOS Swift中通过Universal Link跳转至购买页面的实现方案
实现Universal Link跳转至购买页面的解决方案
既然已经能通过Universal Link打开App,只需补充路径匹配和页面导航逻辑即可,具体步骤如下:
1. 配置Universal Link的路径规则
先在对应平台的配置文件中添加购买页面的路径规则,确保App能识别目标链接:
iOS(apple-app-site-association)
{ "applinks": { "apps": [], "details": [ { "appID": "你的团队ID.你的BundleID", "paths": [ "/buy", "/purchase/*" ] } ] } }
这里的paths对应你用来跳转购买页的链接路径,比如https://你的域名.com/buy或https://你的域名.com/purchase/商品ID这类格式。
Android(assetlinks.json + Manifest配置)
assetlinks.json配置:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "你的包名", "sha256_cert_fingerprints": ["你的证书指纹"] } }]
同时在AndroidManifest.xml的目标Activity中添加路径匹配规则:
<activity android:name=".ui.PurchaseActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" android:host="你的域名.com" android:pathPrefix="/purchase" /> </intent-filter> </activity>
2. 在App内处理跳转逻辑
iOS(Swift,SceneDelegate场景)
在SceneDelegate中解析URL,判断路径后导航到购买页面:
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else { return } // 判断是否为购买页链接 if url.path == "/buy" || url.path.hasPrefix("/purchase/") { // 根据App页面结构获取根导航控制器 guard let window = (scene as? UIWindowScene)?.windows.first, let navVC = window.rootViewController as? UINavigationController else { return } // 实例化购买页面并跳转,支持参数传递 let purchaseVC = PurchaseViewController() if let productId = url.queryParameters?["productId"] { purchaseVC.productId = productId } navVC.pushViewController(purchaseVC, animated: true) } } // 扩展URL方便解析Query参数 extension URL { var queryParameters: [String: String]? { guard let components = URLComponents(url: self, resolvingAgainstBaseURL: true), let queryItems = components.queryItems else { return nil } return queryItems.reduce(into: [String: String]()) { $0[$1.name] = $1.value } } }
旧版UIKit项目(使用AppDelegate)则在application(_:continue:restorationHandler:)中处理相同逻辑。
Android(Kotlin,单Activity+Navigation架构)
在主Activity中解析URL并触发页面导航:
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) handleDeepLink(intent) } override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) handleDeepLink(intent) } private fun handleDeepLink(intent: Intent?) { intent?.data?.let { uri -> if (uri.path?.startsWith("/purchase") == true) { // 提取商品参数并跳转 val productId = uri.getQueryParameter("productId") val navController = findNavController(R.id.nav_host_fragment) val action = HomeFragmentDirections.actionHomeToPurchase(productId) navController.navigate(action) } } } }
3. 测试验证
- 确认配置文件已部署到域名根目录或
.well-known目录,且能通过HTTPS正常访问 - 用手机备忘录输入完整Universal Link,点击测试是否直接跳转至购买页
- iOS端可通过Xcode的Scheme功能,输入测试链接启动App调试逻辑
4. 常见问题排查
- 检查URL路径与配置文件中的
paths是否完全匹配(注意大小写、斜杠) - 若App处于后台,确保跳转逻辑能正确获取当前页面栈,避免页面未初始化导致失败
- 传递参数时,确认Query参数解析正确,且购买页面能正常接收使用
内容的提问来源于stack exchange,提问作者sejn
相关产品推荐
相关产品推荐

