IOS Deep link/Universal Link

配置 iOS Universal Links 涉及几个步骤,包括设置 Xcode 项目、创建和托管 apple-app-site-association 文件,以及进行必要的测试。以下是详细的配置说明:

步骤 1: 配置 Xcode 项目

  1. 打开 Xcode:
    打开你的 Xcode 项目。

  2. 选择目标:
    在项目导航栏中,选择你的应用目标。

  3. 添加 Associated Domains:

    • 转到 "Signing & Capabilities" 标签。
    • 点击 "+" 按钮以添加一个新的能力。
    • 选择 "Associated Domains"。
  4. 添加域名:
    在 Associated Domains 选项中,添加如下格式的条目:

    applinks: example.com
    

    替换 example.com 为你自己的域名。

步骤 2: 创建 apple-app-site-association 文件

  1. 创建 JSON 文件:
    创建一个名为 apple-app-site-association 的无扩展名文件,内容如下:

    {
        "applinks": {
            "apps": [],
            "details": [
                {
                    "appID": "TEAM_ID.com.example.app",
                    "paths": ["/path/*", "/anotherPath/*"]
                }
            ]
        }
    }
    
    • TEAM_ID 是你的 Apple Developer 账户的 Team ID。
    • com.example.app 是你的应用的 Bundle Identifier。
    • paths 数组用于指定哪些 URL 路径可以触发 Universal Links。
  2. 托管文件:
    将该文件托管在你的服务器上,确保可以通过 HTTPS 访问。文件的 URL 应为:

    https://www.example.com/apple-app-site-association
    

步骤 3: 配置 HTTPS 服务器

  • 确保你的服务器支持 HTTPS,且 apple-app-site-association 文件可以被公开访问。
  • 使用浏览器访问 https://www.example.com/apple-app-site-association,确保文件能够被正确加载,并且返回的 Content-Type 应为 application/json

步骤 4: 测试 Universal Links

  1. 在设备上安装应用:
    确保在测试设备上安装了你的应用。

  2. 通过 Safari 测试链接:
    在 Safari 中打开一个 Universal Link,例如 https://www.example.com/path/somecontent,检查是否能直接打开应用。

  3. 使用 Console 验证:
    如果链接未能打开应用,可以使用 Xcode 的 Console 查看日志,确认 Universal Links 的处理情况。

注意事项

  • 无扩展名文件: apple-app-site-association 文件必须没有扩展名,且必须是有效的 JSON 文件。
  • HTTPS: Universal Links 仅在通过 HTTPS 访问时有效。
  • 路径匹配: 在 paths 中使用通配符时,确保定义的路径符合你的需求。

常见问题

  • 链接未打开应用:

    • 确保应用已安装并且 Associated Domains 配置正确。
    • 检查 apple-app-site-association 文件是否有效,并能够通过 HTTPS 访问。
  • 调试:

    • 在 Xcode 中查看设备日志,以获取有关 Universal Links 的详细信息。
    • 使用 open URL 测试链接。

通过这些步骤,你可以在 iOS 中成功配置 Universal Links,确保用户能够通过链接直接访问你的应用内容。

步骤 5: APP获取 Universal Links信息

在 iOS 应用中,你可以通过以下几种方法获取 Universal Links 的详细信息:

1. App Delegate 方法

当用户点击 Universal Link 并打开应用时,相关信息会通过 AppDelegate 的 application(_:continue:restorationHandler:) 方法传递给应用。你可以在这个方法中获取 URL 的详细信息。

func application(_ application: UIApplication,
                 continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
       let incomingURL = userActivity.webpageURL {
        // 处理 incomingURL
        print("Received URL: \(incomingURL)")
        // 解析路径和查询参数
    }
    return true
}

2. Scene Delegate 方法

如果你的应用使用了 Scene Delegate(iOS 13 及更高版本),你可以在 scene(_:continue:) 方法中获取 URL。

func scene(_ scene: UIScene,
           continue userActivity: NSUserActivity) {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
       let incomingURL = userActivity.webpageURL {
        // 处理 incomingURL
        print("Received URL: \(incomingURL)")
        // 解析路径和查询参数
    }
}

3. 解析 URL

无论是在 App Delegate 还是 Scene Delegate 中获取到的 URL,通常需要进一步解析,以提取出具体的信息,如路径和查询参数。例如:

if let components = URLComponents(url: incomingURL, resolvingAgainstBaseURL: false) {
    let path = components.path
    let queryItems = components.queryItems
    // 处理路径和查询参数
}

4. 使用 NotificationCenter

你也可以使用 NotificationCenter 在应用中发布和监听 Universal Link 的信息,便于在不同的 ViewController 之间共享数据。

NotificationCenter.default.post(name: NSNotification.Name("UniversalLinkReceived"), object: incomingURL)

在其他地方监听这个通知:

NotificationCenter.default.addObserver(self, selector: #selector(handleUniversalLink(_:)), name: NSNotification.Name("UniversalLinkReceived"), object: nil)

@objc func handleUniversalLink(_ notification: Notification) {
    if let url = notification.object as? URL {
        // 处理 URL
    }
}

5. 深度链接分析

如果你的应用需要分析用户通过 Universal Links 访问的行为,可以在获取 URL 后进行相应的分析和记录。这可以通过分析库(如 Firebase Analytics、Mixpanel 等)来实现。

6. 测试和调试

使用 Xcode 的控制台来查看 Universal Links 的处理情况,并确保 URL 被正确解析和处理。在调试过程中,可以使用 print 语句输出 URL 和解析后的信息,以便于分析。

通过以上方法,你可以在 iOS 应用中获取和处理 Universal Links 的详细信息。

步骤 6: 未安装时跳转到AppStore

要实现一个功能,允许用户在没有安装应用时跳转到 App Store 下载页面,你可以使用 Universal Links 和一个简单的网页来处理这种情况。以下是实现步骤:

1. 创建一个网页

首先,创建一个简单的网页,该网页将处理用户的请求。这个网页的逻辑是检查用户是否安装了应用,如果没有安装,就重定向到 App Store。

示例 HTML 代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>App Link Redirect</title>
    <script>
        // 检查用户是否在手机上,且尝试打开应用
        function openApp() {
            var appUrl = "yourapp://"; // 替换为你的应用的 URL scheme
            var appStoreUrl = "https://apps.apple.com/app/idYOUR_APP_ID"; // 替换为你的 App Store 链接
            
            // 尝试打开应用
            window.location = appUrl;

            // 如果 2 秒后没有打开应用,则重定向到 App Store
            setTimeout(function () {
                window.location = appStoreUrl;
            }, 2000);
        }
    </script>
</head>
<body onload="openApp();">
    <h1>Redirecting to App...</h1>
    <p>If you are not redirected, <a href="https://apps.apple.com/app/idYOUR_APP_ID">click here</a> to download the app.</p>
</body>
</html>

2. 配置 Universal Link

在你的服务器上托管这个网页,并确保创建的链接是一个 Universal Link。例如,https://www.example.com/open-app

3. 应用中的处理逻辑

在你的 iOS 应用中,确保处理 Universal Links,如之前所述。如果用户通过 Universal Link 打开网页,网页将尝试打开应用并在未成功时重定向到 App Store。

4. 测试

  • 在没有安装应用的设备上打开 Universal Link,确保它能正确跳转到 App Store。
  • 在安装了应用的设备上打开链接,确保它能直接打开应用。

5. 注意事项

  • URL Scheme: 确保 yourapp:// 替换为你应用的实际 URL scheme。
  • App Store Link: 替换 YOUR_APP_ID 为你在 App Store 的实际应用 ID。
  • 时间间隔: 你可以根据需要调整重定向的时间间隔。

通过这些步骤,你可以在用户未安装应用时自动将他们引导至 App Store 下载页面。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容