IOS 13在应用程序通过链接打开时无法处理通用链接点击。

7

我正在尝试处理从通用链接点击打开的应用程序。在iOS 13以下,它运行良好,但对于iOS 13,它仅在后台运行的应用程序上工作。如果应用程序不在前台或后台工作,则单击链接会打开应用程序而不调用 continueUserActivity 函数。我还尝试在场景委托中获取它的willConnectToDelegate。但仍未调用。 以下是我的代码,有什么问题吗?

场景委托

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
  guard let _ = (scene as? UIWindowScene) else { return }

  if connectionOptions.userActivities.first != nil {
    self.scene(scene, continue: userActivity!)
   }
}
    func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    continueUserActivity(userActivity: userActivity)
}
func continueUserActivity(userActivity : NSUserActivity){
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        let url = userActivity.webpageURL!
        let dataDict:[String: String] = [AppLinkManager.appLinkExtraKey: url.absoluteString]

        NotificationCenter.default.post(name: .didReceiveAppLink, object: nil, userInfo: dataDict)
    }
}

应用程序代理

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
   if let userActivityDict = launchOptions?[.userActivityDictionary] as? [AnyHashable : Any],
      let userActivity = userActivityDict["UIApplicationLaunchOptionsUserActivityKey"] as? NSUserActivity {
       continueUserActivity(userActivity: userActivity)
   }
    return true
  } 
  func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool  {
      continueUserActivity(userActivity: userActivity)
      return true
   }


func continueUserActivity(userActivity : NSUserActivity){
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        let url = userActivity.webpageURL!
        let dataDict:[String: String] = [AppLinkManager.appLinkExtraKey: url.absoluteString]

        NotificationCenter.default.post(name: .didReceiveAppLink, object: nil, userInfo: dataDict)
    }  
  }

你找到了解决方案吗? - Nizzam
我遇到了同样的问题。当应用程序关闭或从最近使用的应用程序中滑动时,我点击我的动态链接,应用程序会打开,但我无法获取URL信息。当应用程序仍在后台或前台运行时,我点击链接时一切都按预期工作,正确接收URL。 - Sergio
有没有解决这个问题的方法? - HariKarthick
1个回答

5
你尝试过在 SceneDelegate 中实现 continue userActivity 函数吗?
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { }

当我使用 Firebase DynamicLink 时,遇到了相同的问题,似乎 UniversalLinks(以及可能是其他几个 API)在 SceneDelegate 上使用此回调函数。

因此,如果你的目标是 iOS 13 及以下版本,请尝试在 SceneDelegateAppDelegate 上都实现它。


是的,我有 scene delegate 和 appDelegate。我正在将 SceneDelegate 添加到问题中。 - nikinci
你是从Safari访问链接吗?尝试从不同的来源(chrome,notes等)点击链接以确定问题。 - omar
太棒了❗️你让我的一天变得美好。 - Yassine ElBadaoui
@YassineElBadaoui 我的应用程序在iOS 13中,没有场景代理,每当通用链接被点击且应用程序处于非活动状态时,它就会崩溃,请建议。 - iMinion
@iMinion,崩溃日志是什么?也许在应用程序委托中有些问题。 - omar
@Omar,我找到了解决方案,问题出在导航上。谢谢,我已经解决了它们。 - iMinion

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