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

iOS通用URL Scheme配置问题:NativeScript+Angular应用无法跳转

iOS 通用 HTTP/HTTPS 链接唤起 NativeScript 应用问题解决方案

你踩了iOS处理通用链接的一个常见坑——HTTP/HTTPS 这类系统级 URL Scheme 不能通过普通的 CFBundleURLSchemes 配置来唤起应用,这和Android的Intent Filter逻辑完全不同。下面给你一步步梳理遗漏的配置和正确的实现方式:

1. 先纠正你当前 info.plist 的错误配置

你之前在 CFBundleURLSchemes 里填了 http://www.test.com,这是无效的。URL Scheme 只需要填协议前缀(比如自定义的 test),而完整的带host的HTTP链接属于**Universal Links(通用链接)**范畴,需要单独配置。先把这段错误的配置删掉,或者改成自定义scheme留作备用。

2. 配置 iOS Universal Links(通用链接)

这是iOS实现HTTP/HTTPS链接直接唤起已安装应用的标准方式,步骤如下:

步骤1:开启开发者账号的 Associated Domains 功能

  • 登录 Apple Developer 后台,找到你的 App ID,勾选 Associated Domains 选项,然后重新生成并下载配置文件,导入到你的NativeScript项目中。

步骤2:在 info.plist 中添加 Associated Domains

添加以下配置,替换成你的域名:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <!-- 如果你需要更严格的ATS配置,也可以单独允许你的域名 -->
</dict>
<key>AssociatedDomains</key>
<array>
    <string>applinks:www.test.com</string>
</array>

注意:applinks: 是固定前缀,后面跟你的域名,不要加http/https。

步骤3:在服务器上部署 apple-app-site-association 文件

在你的域名 www.test.com 的根目录或者 .well-known 目录下放置一个名为 apple-app-site-association 的文件(无后缀),内容格式如下:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "你的TeamID.你的BundleID",
                "paths": ["*", "/app/*"] // 这里配置允许唤起应用的路径,*表示所有路径
            }
        ]
    }
}
  • TeamID 可以在Apple Developer后台的账号信息里找到;
  • BundleID 是你App的唯一标识,要和info.plist里的 CFBundleIdentifier 一致;
  • 这个文件必须通过HTTPS访问(苹果要求),且不能有任何重定向。

步骤4:在NativeScript中处理通用链接跳转

你需要监听应用通过Universal Links打开的事件,把链接路径映射到Angular路由:

  1. 安装 nativescript-urlhandler 插件:
    npm install nativescript-urlhandler --save
    
  2. 在 app.module.ts 中初始化插件,并监听跳转事件:
    import { UrlHandler } from 'nativescript-urlhandler';
    
    // 在NgModule的初始化代码里添加
    UrlHandler.init();
    
    // 监听链接打开事件
    UrlHandler.addListener((url) => {
        // 解析url的路径部分,比如http://www.test.com/home 解析出/home
        const path = url.replace('http://www.test.com', '');
        // 跳转到对应的Angular路由
        this.router.navigate([path]);
    });
    

3. 为什么自定义Scheme能生效?

自定义的 test:// 这类Scheme属于应用私有的协议,iOS允许通过 CFBundleURLSchemes 注册,所以分享后能直接唤起应用。但HTTP/HTTPS是系统级协议,默认会交给Safari处理,必须通过Universal Links把你的域名和应用绑定,才能让系统知道这个域名的链接应该打开你的应用。

测试注意事项

  • 测试时必须用真实的iOS设备(模拟器对Universal Links支持有限);
  • 确保你的应用已经通过Ad Hoc或者App Store安装到设备上;
  • 可以用苹果的官方验证工具检查你的配置是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:41:28