返回

如何修复 Capacitor iOS 应用中的通用链接问题?

IOS

修复 Capacitor iOS 应用中的通用链接问题

问题概述

通用链接是让用户通过点击链接直接打开你的应用程序的强大工具。然而,在 Capacitor iOS 应用程序中实现通用链接可能是一个挑战,尤其是当应用处于开发者模式下时。本文将探讨导致通用链接在 Capacitor iOS 应用中不起作用的常见问题以及解决这些问题的步骤。

排查步骤

1. 验证 Apple App Site Association (AASA) 文件

AASA 文件是连接你的网站和应用程序的桥梁。使用浏览器或 curl 命令验证是否可以从 https://my-domain.com/.well-known/apple-app-site-association 正确下载 AASA 文件。

2. 使用 swcutil 下载 AASA 文件

使用 swcutil 命令下载 AASA 文件:

sudo swcutil dl -d https://my-domain.com

3. 检查 swcutil_show.txt 文件

检查 swcutil_show.txt 文件以确保你的应用程序已列出:

sudo swcutil show -a

4. 验证通用链接关联

在 Xcode 的 "Info" 选项卡中,导航到 "Associated Domains" 部分,确保你的通用链接已列出。

5. 清理缓存

清除 Safari 和应用程序的缓存,然后重新启动设备。

6. 验证证书

确保你的应用程序已使用有效的 SSL 证书签名。

7. 启用 App Transport Security (ATS)

在你的 Info.plist 文件中启用 ATS:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

8. 重新启动设备

重新启动你的设备以使更改生效。

附加步骤

如果以上步骤无法解决问题,请尝试以下附加步骤:

  • 确保你的应用程序已在 App Store 中发布。
  • 检查你的 Apple 开发者帐户中的关联域。
  • 联系 Apple 开发者支持寻求帮助。

示例代码

// 在 AppDelegate.swift 中
import UserNotifications

// ...其他代码...

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    // 处理通用链接
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        if let url = userActivity.webpageURL {
            // 将通用链接重定向到你的应用程序
            return handleUniversalLink(url)
        }
    }

    return false
}

提示

  • 遵循 Apple 的通用链接最佳实践。
  • 使用通用链接验证器来验证你的设置。

结论

通过遵循本文中的步骤,你可以解决 Capacitor iOS 应用中的通用链接问题,让你的用户能够无缝地从网络直接访问你的应用。

常见问题解答

  1. 为什么通用链接在我的应用程序中不起作用?

    • 检查 AASA 文件、通用链接关联、缓存和证书。
  2. 如何调试通用链接问题?

    • 使用 swcutil 命令并检查 swcutil_show.txt 文件。
  3. 如何在应用程序中处理通用链接?

    • 使用 AppDelegate.swift 中的 continueUserActivity 方法。
  4. 如何启用 ATS?

    • Info.plist 文件中添加 NSAppTransportSecurity 字典。
  5. 如果我仍然遇到问题怎么办?

    • 联系 Apple 开发者支持或查看 Apple 文档。