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

时间:2018-07-06 17:14:51

标签: ios appdelegate ios-universal-links

我目前在我的iOS应用中实现了通用链接。但是,在我看来,我的应用程序会出现这种情况

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
首先调用

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

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

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

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

Apple文档并没有真正探讨应用程序委托方法在这种情况下如何工作。在回答这些问题方面的一些帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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