我的应用程序中有一个深层链接功能,在一种情况下运行良好。 根据打开应用程序的网址,我有 3 个不同的入职页面。 因此,当应用程序启动时,我需要知道哪个链接(如果有)打开了应用程序,然后显示正确的入职页面。问题是我需要知道该方法中要显示的屏幕:
- (BOOL)applicationUIApplication *)application didFinishLaunchingWithOptionsNSDictionary *)launchOptions
但我只能知道深层链接是否打开了应用程序
- (BOOL)applicationUIApplication *)application
openURLNSURL *)url
sourceApplicationNSString *)sourceApplication
annotationid)annotation
在 didFinishLaunchingWithOptions
被调用 5 秒后被调用(我计算了秒数)。所以我有 5 秒钟的时间看到一个错误的入职页面,直到调用 openURL
(如果它会被调用)。
所以我的问题是:有没有办法知道应用程序是在 didFinishLaunchingWithOptions
之前还是期间从 url 启动的?
顺便说一下,当应用从深层链接打开时,didFinishLaunchingWithOptions
中的 launchOptions
为 nil
您正在寻找的启动选项键是 UIApplicationLaunchOptionsURLKey
(Objective-C)/UIApplicationLaunchOptionsKey.url
( swift )。
如果您的目标是 iOS 9 及更高版本,您只需拦截来自
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/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |