关闭应用程序的通用链接无法正常工作

13
我已经设置好我的应用程序以处理通用链接。我们在此函数内处理URL的检索和给定URL的导航:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        guard NSUserActivityTypeBrowsingWeb == userActivity.activityType, let url = userActivity.webpageURL else {
            return false
        }
        // Do navigation to correct page based on URL
        return true
    }

这对我们来说非常完美,在我们的应用程序之前在后台运行时,当点击通用链接时。

然而,当我完全杀死应用程序并点击通用链接时,此功能似乎没有运行,因此它根本不处理通用链接,只会将用户带到主页标签。

我已经尝试在application(didFinishLaunchingWithOptions:)application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) 中获取URL,但两者都似乎没有被调用。

有人对此有什么想法吗?

谢谢!


3
你弄清楚这里发生了什么了吗?我也遇到了同样的问题。 - melaka
你找到问题了吗?我也遇到了完全相同的问题。 - Danish Farooq
3个回答

12

Swift 5 IOS 14当应用程序被终止时使用

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Get URL components from the incoming user activity.
        guard let userActivity = connectionOptions.userActivities.first,
              userActivity.activityType == NSUserActivityTypeBrowsingWeb,
              let incomingURL = userActivity.webpageURL
        else { return }
        DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
            LinkHandler.sharedInstance.handleLink(url: incomingURL)
        }
        guard let _ = (scene as? UIWindowScene) else { return }
    }

我可以确认这个有效,并且让我感到非常惊讶。 - Michael
你是最棒的 <3 - Noob
1
iOS15还需要这个黑客吗? - Jeanno

2

您可以进行签到

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)

您可以通过检查connectionOptions.userActivities(它是一个Set<NSUserActivity>)来获取URL。

webpageURL中获取URL,以下是示例:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    for userActivity in connectionOptions.userActivities where userActivity.webpageURL != nil {
        // call your universal link handler here
    }
}

我希望这能帮助你解决问题。

1

application(didFinishLaunchingWithOptions:)方法中的选项中包含了URL,请再次测试。

苹果文档: launchOptions 一个字典,指示应用程序被启动的原因(如果有)。在用户直接启动应用程序的情况下,此字典的内容可能为空。有关此字典中可能的键以及如何处理它们的信息,请参见启动选项键。

https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622921-application


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接