我的应用程序具有深层链接功能,在一种情况下也可以正常工作。
根据打开应用程序的网址,我有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
}
}