我的应用程序中有一个深层链接功能,在一种情况下运行良好。
根据打开应用程序的网址,我有 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-推荐答案 strong>
您正在寻找的启动选项键是 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/
|