OGeek|极客世界-中国程序员成长平台

标题: ios - 在 didFinishLaunchingWithOptions 之后几秒钟调用应用程序 openURL [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 13:01
标题: ios - 在 didFinishLaunchingWithOptions 之后几秒钟调用应用程序 openURL

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

- (BOOL)applicationUIApplication *)application didFinishLaunchingWithOptionsNSDictionary *)launchOptions 

但我只能知道深层链接是否打开了应用程序

- (BOOL)applicationUIApplication *)application
            openURLNSURL *)url
  sourceApplicationNSString *)sourceApplication
         annotationid)annotation 

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

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

顺便说一下,当应用从深层链接打开时,didFinishLaunchingWithOptions 中的 launchOptions 为 nil



Best Answer-推荐答案


您正在寻找的启动选项键是 UIApplicationLaunchOptionsURLKey (Objective-C)/UIApplicationLaunchOptionsKey.url ( swift )。
如果您的目标是 iOS 9 及更高版本,您只需拦截来自

的启动 URL

这是 UIApplicationDelegate 的简约实现,它应该涵盖这两种情况 - 请注意,为了清楚起见,已经省略了很多不相关的逻辑:

objective-C :

@implementation AppDelegate

- (BOOL)applicationUIApplication *)application didFinishLaunchingWithOptionsNSDictionary *)launchOptions {

    NSURL *url = launchOptions[UIApplicationLaunchOptionsURLKey];
    if (url) {
        // TODO: handle URL from here
    }

    return YES;
}

- (BOOL)applicationUIApplication *)app
            openURLNSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

    // TODO: handle URL from here

    return YES;
}

@end

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

关于ios - 在 didFinishLaunchingWithOptions 之后几秒钟调用应用程序 openURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42345586/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4