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

React Native iOS端扫码唤起App/网页异常问题求助

问题核心分析

你当前的问题出在HTTPS链接的唤起逻辑上:iOS对于HTTPS这类通用Scheme的链接,默认会优先打开Safari,而非唤起你的App。你现在的配置混淆了普通URL Scheme和Universal Links的用法,导致iOS无法识别该链接属于你的App。

具体修正步骤

1. 修正Info.plist中的URL Types配置

你当前的URL Types配置使用了https作为Scheme,这是系统通用Scheme,无法触发App唤起。需要改为自定义Scheme,并修正CFBundleURLName:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>com.yourcompany.yourapp</string> <!-- 替换为你的App Bundle ID -->
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myapp</string> <!-- 自定义Scheme,比如你的App简称 -->
        </array>
    </dict>
</array>

注:这个自定义Scheme用于直接通过myapp://formulario.153cidadao.com.br/assedio?cidade=2这类链接唤起App,但你需要的是HTTPS链接唤起,所以还需要配置Universal Links。

2. 配置Universal Links(关键)

要让HTTPS链接唤起App,必须配置Universal Links:

  • 开启Associated Domains权限:
    登录Apple开发者后台,找到你的App ID,勾选Associated Domains权限,然后重新生成Provisioning Profile并安装到Xcode。
  • 添加Associated Domains到Info.plist:
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <false/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>formulario.153cidadao.com.br</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <false/>
            </dict>
        </dict>
    </dict>
    <key>Associated Domains</key>
    <array>
        <string>applinks:formulario.153cidadao.com.br</string>
    </array>
    
  • 部署apple-app-site-association文件到服务器:
    在你的服务器根目录或.well-known目录下放置一个无后缀的apple-app-site-association文件,内容示例:
    {
        "applinks": {
            "apps": [],
            "details": [
                {
                    "appID": "TEAMID.com.yourcompany.yourapp", <!-- 替换为你的Team ID + Bundle ID -->
                    "paths": ["/assedio*"] <!-- 匹配需要唤起App的路径 -->
                }
            ]
        }
    }
    
    确保该文件能通过对应域名路径正常访问,且返回的Content-Type为application/json。

3. 调整AppDelegate代码逻辑

将continueUserActivity的返回顺序调整,确保RCTLinkingManager优先处理:

// Universal Links
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
  BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
  return result || [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
}

4. 测试注意事项

  • 必须使用真机测试,模拟器对Universal Links的支持有限;
  • 清除Safari缓存(设置 -> Safari -> 清除历史记录与网站数据),iOS会缓存关联文件,修改后需要清除缓存才能生效;
  • 测试时不要直接在Safari地址栏输入链接,而是通过二维码、其他App跳转或短信链接打开,直接输入地址栏会强制打开网页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:42:42