我试图处理开放的应用程序从通用链接点击。在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)
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您的描述,您遇到的问题可能与iOS 13及以后版本中Scene Delegate的引入和Universal Links处理方式的变化有关。以下是一些可能的解决方案和检查点,帮助您诊断和解决这个问题:
确保Scene Delegate正确配置:
scene(_:willConnectTo:options:)
方法中处理用户活动的代码,这是正确的做法。但请确认当应用程序从前台或后台被唤起时,这段逻辑确实被执行了。可以通过添加日志打印来验证这一点。检查Info.plist设置:
Info.plist
文件中正确配置了支持的URL Schemes或者关联域名(Associated Domains)。对于Universal Links,需要在Associated Domains
键下添加如"applinks:yourdomain.com"
这样的条目,其中yourdomain.com
是您的应用支持链接的域名。处理不同启动场景:
UIApplicationDelegate
)中的代码看起来是为了处理从启动时传入的UserActivity。请确认application(_:continue:restorationHandler:)
方法确实在所有情况下都被调用。如果应用是从完全关闭的状态启动的,这个方法应该会被触发。后台模式和权限:
Info.plist
中请求了必要的权限,并且在App的Capabilities中启用了相应的Background Modes。测试不同的链接格式:
Xcode和设备兼容性:
通知中心的观察者注册:
NotificationCenter
来传递处理后的链接。请确保在适当的地方有对应的观察者注册来接收.didReceiveAppLink
通知,并且没有遗漏解注册的逻辑导致的通知不响应。如果以上步骤都检查无误,但问题依旧存在,建议通过系统地调试和日志记录来进一步定位问题所在,比如在每个关键处理函数入口处打印日志,以确定控制流是否按预期执行。