自检iOS通过外部链接打开APP

2024-06-26  本文已影响0人  大成小栈

对于iOS通过外部链接打开APP,如果已经完成了所有的前置配置项,但仍然没有触发appDelegate or sceneDelegate回调方法,可以尝试以下几步来进一步诊断和解决问题:

1. 检查 Info.plist 配置

URL Schemes

确保 CFBundleURLTypes 配置正确:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.yourcompany.appname</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>yourappscheme</string>
        </array>
    </dict>
</array>

Universal Links

确保 Associated Domains 配置正确:

<key>AssociatedDomains</key>
<array>
    <string>applinks:yourdomain.com</string>
</array>

2. 检查 apple-app-site-association 文件

确保文件正确地部署在你的域名根目录或 .well-known 目录下,URL 应该是 https://yourdomain.com/apple-app-site-associationhttps://yourdomain.com/.well-known/apple-app-site-association。文件内容示例:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAMID.com.yourcompany.appname",
                "paths": [ "/path/*" ]
            }
        ]
    }
}

3. 调试方法

URL Scheme 测试

通过 Safari 或 Notes 打开 URL Scheme:

yourappscheme://test

确保你的应用已经安装并且在后台或冷启动状态。

Universal Links 测试

确保通过你的域名打开链接,如:

https://yourdomain.com/path/test

4. 确认代码实现

确保你的 AppDelegate 实现了相应的方法:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        print("App opened with URL Scheme: \(url.absoluteString)")
        // 在这里处理 URL
        return true
    }

    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
            print("App opened with Universal Link: \(url.absoluteString)")
            // 在这里处理 URL
        }
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        print("App became active")
    }
}

5. 检查是否通过 SceneDelegate 管理

如果你的应用使用 SceneDelegate,需要确保在 SceneDelegate 中处理 URL:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?

    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        guard let url = URLContexts.first?.url else { return }
        print("Scene opened with URL Scheme: \(url.absoluteString)")
        // 在这里处理 URL
    }

    func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
        if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
            print("Scene opened with Universal Link: \(url.absoluteString)")
            // 在这里处理 URL
        }
    }
}

6. 最后一步:重启设备和重装应用

有时可能由于缓存或其他问题导致配置未生效,尝试重启设备并重新安装应用。

通过以上步骤,你应该能够更进一步地排查和解决通过外部链接打开应用时未触发回调的问题。如果问题仍然存在,考虑提供更多详细信息或日志,以便进一步诊断。

上一篇下一篇

猜你喜欢

热点阅读