Ios 我如何判断handleOpenURL是称为应用程序启动还是在应用程序运行时?
由于事件的顺序略有不同,这取决于这两个场景中的哪一个正在进行,因此我希望能够说出区别。有什么建议吗?您在AppDelegate中尝试过这种方法吗Ios 我如何判断handleOpenURL是称为应用程序启动还是在应用程序运行时?,ios,Ios,由于事件的顺序略有不同,这取决于这两个场景中的哪一个正在进行,因此我希望能够说出区别。有什么建议吗?您在AppDelegate中尝试过这种方法吗 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSLog(@"Launched with URL:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSLog(@"Launched with URL: %@", url.absoluteString);
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_APP_OPENED_FROM_LINK object:[userDict objectAtIndex:0]];
return YES;
}
您不应该使用
handleOpenURL
,因为它已被弃用。相反,请使用application:openURL:sourceApplication:annotation:
(从iOS 4.2开始提供)
回答您关于应用程序:openURL:sourceApplication:annotation
的问题:
如果必须启动应用程序才能打开URL,应用程序将调用
应用程序:将使用选项完成启动:和
应用程序:didFinishLaunchingWithOptions:首先是方法,然后是
这个方法。这些方法的返回值可用于防止
此方法无法被调用。(如果应用程序已在运行,
仅调用此方法。)
在我的例子中,如果应用程序在后台运行时启动,我必须再次创建导航流,但如果应用程序是第一次启动,则不需要这样做。我的实施是:
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.appIsLaunchedFromZeroToOpenURL = false;
//some other code
NSURL *applicationOpenURL = [launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
if (applicationOpenURL) {
self.appIsLaunchedFromZeroToOpenURL = true;
}
return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if (self.appIsLaunchedFromZeroToOpenURL == false) {
//app should reload the navigation then navigate to url if the app is not launched for the first time
[self createNavigationFromZero];
}
[self openURL:url];//navigate to the url
self.appIsLaunchedFromZeroToOpenURL = false;
}