• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 在 didFinishLaunchingWithOptions 之后几秒钟调用应用程序 openURL

[复制链接]
菜鸟教程小白 发表于 2022-12-12 13:01:49 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我的应用程序中有一个深层链接功能,在一种情况下运行良好。 根据打开应用程序的网址,我有 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
  • application:didFinishLaunchingWithOptions:(以防应用尚未在内存中)
  • applicationpenURLptions:(如果应用程序已经在后台)。

这是 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap