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

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这类格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:22:48