2013-08-20 5 views
5

Поскольку последовательность событий несколько отличается в зависимости от того, какой из этих двух сценариев выполняется, я хотел бы иметь возможность сказать разницу. Какие-либо предложения?Как я могу определить, называется ли handleOpenURL приложением запуска приложения или во время работы приложения?

ответ

9

Вы не должны использовать handleOpenURL так как он устарел. Вместо этого используйте application:openURL:sourceApplication:annotation: (доступно с iOS 4.2).

Apple's documentation дает ответ на свой вопрос о application:openURL:sourceApplication:annotation:

Если ваше приложение должно было быть запущен, чтобы открыть URL, приложение вызывает в приложения: willFinishLaunchingWithOptions: и применение: didFinishLaunchingWithOptions: методы первые , а затем этот метод. Возвращаемые значения этих методов могут использоваться для предотвращения вызова этого метода . (Если приложение уже запущено, только этот метод называется.)

2

Вы пробовали этот метод в 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; 
}
1

В моем случае я должен был создать навигационный поток снова, если приложение запускается, когда приложение работает в фоновом режиме, но если приложение запускается впервые, в этом нет необходимости. Моя реализация:

- (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; 
} 
Смежные вопросы