了解通用链接委托方法及其在 iOS 中的用途

Posted

技术标签:

【中文标题】了解通用链接委托方法及其在 iOS 中的用途【英文标题】:Understanding Universal links delegate method and its purpose in iOS 【发布时间】:2018-07-06 17:14:50 【问题描述】:

我目前在我的 ios 应用中实现了通用链接。但是,我有一个场景,我的应用程序似乎

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

先调用方法,然后才调用通用链接委托方法

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler

因此,当通过通用链接打开应用程序并检查launchOptions[@"UIApplicationLaunchOptionsUserActivityDictionaryKey"][@"UIApplicationLaunchOptionsUserActivityKey"] 时,我看到应用程序是由NSUserActivity 中的链接打开的。基于此,我有以下问题:

    在处理链接时我的逻辑应该放在哪里?逻辑应该在didFinishLaunchingWithOptions 还是通用链接应用委托方法?我是否应该在 didFinishLaunchingWithOptions 中有一个 if 语句,根据应用的启动方式遵循不同的逻辑? 调用委托方法的顺序是什么?因此,例如,似乎首先调用didFinishLaunchingWithOptions,是仅在didFinishLaunchingWithOptions 完成时调用continueUserActivity,还是启动didFinishLaunchingWithOptions 让代码在此方法中运行,然后在continueUserActivity 中启动代码一个单独的线程?我发现didFinishLaunchingWithOptions 将在主线程上运行,但如果didFinishLaunchingWithOptions 中的任何代码在并发线程上运行,即didFinishLaunchingWithOptions 进行服务调用,那么continueUserActivity 方法在didFinishLaunchingWithOptions 完成的情况下开始运行.当这种情况发生时,就会在主线程上开始出现有趣的问题。 continueUserActivity 怎么只能在didFinishLaunchingWithOptions 完成后调用?对于这种情况,我应该做某种NSOperation 吗? 是否应该 didFinishLaunchingWithOptions 将正在管理的链接的结果存储在缓存中,然后在调用 continueUserActivity 时返回该结果中的值?

Apple 文档并没有真正深入了解应用程序委托方法在该引擎下的工作原理。对于回答这些问题的帮助,我们将不胜感激。

【问题讨论】:

【参考方案1】:

我只知道,continueUserActivity 每次都会打电话。如果应用程序尚未启动,application:didFinishLaunchingWithOptions 会先调用,然后再调用 continueUserActivity 方法。

【讨论】:

以上是关于了解通用链接委托方法及其在 iOS 中的用途的主要内容,如果未能解决你的问题,请参考以下文章

iOS 通用链接打开应用程序,不触发应用程序委托方法

如何弱链接 iOS 应用程序委托方法?

iOS 8 上的通用链接?

iOS 11.2 中的通用链接中断

带有重定向的通用链接在 iOS 中不起作用

在 iOS 上使用通用链接时的 Google Analytics for Email Tracking