Ios 我如何判断handleOpenURL是称为应用程序启动还是在应用程序运行时?

Ios 我如何判断handleOpenURL是称为应用程序启动还是在应用程序运行时?,ios,Ios,由于事件的顺序略有不同,这取决于这两个场景中的哪一个正在进行,因此我希望能够说出区别。有什么建议吗?您在AppDelegate中尝试过这种方法吗 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSLog(@"Launched with URL:

由于事件的顺序略有不同,这取决于这两个场景中的哪一个正在进行,因此我希望能够说出区别。有什么建议吗?

您在AppDelegate中尝试过这种方法吗

- (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;
}