开发者社区 问答 正文

iOS 13无法处理通用链接点击时打开应用程序时的链接点击

我试图处理开放的应用程序从通用链接点击。在iOS 13下面,它工作得很好,但对于iOS 13,它只运行在后台的应用程序。如果应用程序不工作前景或背景,单击链接将打开未调用的应用程序。继续用户活动功能。我还试着让它在现场委托将连接委托。但是仍然没有调用我的代码下面是什么问题?

场景委托

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

APP委托

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

展开
收起
游客5akardh5cojhg 2019-12-07 19:19:36 1048 分享
分享
版权
举报
阿里云 AI 助理回答

根据您的描述,您遇到的问题可能与iOS 13及以后版本中Scene Delegate的引入和Universal Links处理方式的变化有关。以下是一些可能的解决方案和检查点,帮助您诊断和解决这个问题:

  1. 确保Scene Delegate正确配置

    • 您已经展示了在scene(_:willConnectTo:options:)方法中处理用户活动的代码,这是正确的做法。但请确认当应用程序从前台或后台被唤起时,这段逻辑确实被执行了。可以通过添加日志打印来验证这一点。
  2. 检查Info.plist设置

    • 确保您的Info.plist文件中正确配置了支持的URL Schemes或者关联域名(Associated Domains)。对于Universal Links,需要在Associated Domains键下添加如"applinks:yourdomain.com"这样的条目,其中yourdomain.com是您的应用支持链接的域名。
  3. 处理不同启动场景

    • 您的应用委托(UIApplicationDelegate)中的代码看起来是为了处理从启动时传入的UserActivity。请确认application(_:continue:restorationHandler:)方法确实在所有情况下都被调用。如果应用是从完全关闭的状态启动的,这个方法应该会被触发。
  4. 后台模式和权限

    • iOS 13对后台执行、位置服务等有了更严格的限制。虽然这通常不会直接影响Universal Links的处理,但如果您的应用依赖于特定的后台模式,请确保在Info.plist中请求了必要的权限,并且在App的Capabilities中启用了相应的Background Modes。
  5. 测试不同的链接格式

    • 确保您用来测试的Universal Link是正确格式化的,并且指向一个有效的、已配置的网页。有时问题可能出在链接本身或目标网页的头部信息上。
  6. Xcode和设备兼容性

    • 确保您的Xcode版本是最新的,并且针对iOS 13及更高版本进行了适当的配置。同时,直接在物理设备上进行测试,因为Simulator的行为有时会与实际设备有所不同。
  7. 通知中心的观察者注册

    • 您的代码中使用了NotificationCenter来传递处理后的链接。请确保在适当的地方有对应的观察者注册来接收.didReceiveAppLink通知,并且没有遗漏解注册的逻辑导致的通知不响应。

如果以上步骤都检查无误,但问题依旧存在,建议通过系统地调试和日志记录来进一步定位问题所在,比如在每个关键处理函数入口处打印日志,以确定控制流是否按预期执行。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答