我的应用程序具有深层链接功能,在一种情况下也可以正常工作。
根据打开应用程序的网址,我有3个不同的入职页面。
因此,在启动应用程序时,我需要知道打开了该应用程序的链接(如果有),然后显示正确的入职页面。问题是我需要知道该方法中显示的屏幕:

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

但我只能知道深层链接是否在其中打开了该应用程序
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation

在调用didFinishLaunchingWithOptions后5秒被调用(我计算了秒数)。所以我有5秒钟的时间才看到错误的入职页面,直到调用openURL(如果将被调用)。

所以我的问题是:有没有办法知道该应用程序是在didFinishLaunchingWithOptions之前还是期间从URL启动的?

顺便说一句,当应用程序从深层链接打开时,launchOptions中的didFinishLaunchingWithOptions为零

最佳答案

您正在寻找的启动选项键是 UIApplicationLaunchOptionsURLKey (Objective-C)/ UIApplicationLaunchOptionsKey.url (Swift)。
如果您要定位的是iOS 9及更高版本,则只需拦截来自以下位置的启动网址

  • application:didFinishLaunchingWithOptions:(如果应用程序尚未在内存中)
  • application:openURL:options:(如果应用程序已经在后台)。

  • 这是UIApplicationDelegate的简化实现,应涵盖两种情况-请注意,为清楚起见,省略了许多无关的逻辑:

    objective-c :
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        NSURL *url = launchOptions[UIApplicationLaunchOptionsURLKey];
        if (url) {
            // TODO: handle URL from here
        }
    
        return YES;
    }
    
    - (BOOL)application:(UIApplication *)app
                openURL:(NSURL *)url
                options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    
        // TODO: handle URL from here
    
        return YES;
    }
    
    @end
    

    斯威夫特5:
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
            if let url = launchOptions?[.url] as? URL {
                // TODO: handle URL from here
            }
    
            return true
        }
    
        func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
    
            // TODO: handle URL from here
    
            return true
        }
    }
    

    10-07 19:51
    查看更多