【问题标题】:IOS 13 cant handle universallink click when app opened with link click当应用程序通过链接点击打开时,IOS 13 无法处理通用链接点击
【发布时间】:2020-03-31 23:46:02
【问题描述】:

我正在尝试处理通过通用链接点击打开的应用程序。在 ios 13 以下,它运行良好,但对于 ios 13,它的唯一应用程序在后台运行。如果应用无法在前台或后台运行,单击链接会打开未调用 continue userActivity 功能的应用。我还尝试在场景委托中将它连接到委托中。但还是不叫 我的代码在下面有什么问题?

场景代理

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)
    }  
  }

【问题讨论】:

  • 你找到解决办法了吗?
  • 我遇到了同样的问题。当应用程序关闭或从最近的应用程序中滑动时,我单击我的动态链接应用程序打开,但我没有得到 url 信息。当应用程序仍在后台或前台运行并且我单击链接时,一切都按预期工作,正确接收 url。
  • 有什么解决办法吗?

标签: ios swift ios13 uiscenedelegate


【解决方案1】:

您是否尝试过在SceneDelegate 中实现continue userActivity 函数:

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { }

我在使用 Firebase DynamicLink 时遇到了同样的问题,并且看起来 UniversalLinks(可能还有其他几个 API)在 SceneDelegate 上使用了这个回调。

因此,如果您的目标是 iOS 13 及更低版本,请尝试同时实现 SceneDelegateAppDelegate

【讨论】:

  • 是的,我也有场景委托和 appDelegate。我正在将 SceneDelegate 添加到问题中
  • 您是否从 Safari 访问该链接?尝试点击来自不同来源(chrome、notes 等)的链接来确定问题
  • 太棒了❗️你让我很开心??
  • @YassineElBadaoui 我的应用在 iOS 13 中,并且没有场景委托,每次点击通用链接并且应用处于非活动状态时都会崩溃,请建议
  • @iMinion 什么是崩溃日志?应用委托中可能有问题
猜你喜欢
  • 1970-01-01
  • 2014-12-09
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 2022-07-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
相关资源
最近更新 更多