2013-02-11 2 views
0

В моем приложении я хотел бы, чтобы пользователь увидел другое приложение, когда он закрывает текущее приложение. Возможно ли это каким-либо образом? Я попробовал написать код и открыть приложение через пользовательскую схему URL-адреса прямо из метода:Как открыть другое приложение, когда пользователь закрывает текущее приложение?

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    NSString * string = @"InnovationLab://"; 
    NSURL * url = [NSURL URLWithString:string]; 
    [[UIApplication sharedApplication] openURL:url]; 
} 

Но это не сработало. Я поставил точку останова здесь, и как только я закрываю приложение, он останавливается здесь, но ничего не происходит. Это не пойдет в AppStore. Только для демонстрации и внутреннего использования.

+0

Использует ли тот же код и URL-адрес в вашем приложении, если вы его вызываете, например, нажатием кнопки или другим действием, пока ваше приложение все еще активно? – rmaddy

+0

Да. Он работает из других точек. – Ashutosh

+0

@Ashutosh Как тест, работает ли это, если переместить этот код в метод 'applicationDidEnterBackground'? – rmaddy

ответ

4

Если вы это сделать? Нет.
Можете ли вы это сделать? (Возможно) Не ​​

Я написал небольшой тест приложение попробуйте открыть URL, который я знаю, чтобы работать (в URL-адрес компании Apple Maps, который откроет карты приложение). Я положил в некоторых лесозаготовительной код, чтобы увидеть, что происходит.

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    NSURL *url = [NSURL URLWithString:@"http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino"]; 
    if ([[UIApplication sharedApplication] canOpenURL:url]) { 
     NSLog(@"Can Open URL"); 
    } else { 
     NSLog(@"Cannot Open URL"); 
    } 
    BOOL success = [[UIApplication sharedApplication] openURL:url]; 
    NSLog(@"Success is %@", [NSNumber numberWithBool:success]); 

    NSLog(@"Shared app: %@", [UIApplication sharedApplication]); 
    NSLog(@"applicationWillResignActive"); 
} 

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    NSURL *url = [NSURL URLWithString:@"http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino"]; 
    [[UIApplication sharedApplication] openURL:url]; 
    NSLog(@"Shared app: %@", [UIApplication sharedApplication]); 
    NSLog(@"Entered Background"); 
} 

Все NSLogs авторизовались что-то. приложение возвращает YES для canOpenURL:, но возвращает NO в качестве возвращаемого значения при попытке -openURL:.

Вот лог:

Flipper[18946:907] Can Open URL 
Flipper[18946:907] Success is 0 
Flipper[18946:907] Shared app: <UIApplication: 0x1f0413f0> 
Flipper[18946:907] applicationWillResignActive 
Flipper[18946:907] Shared app: <UIApplication: 0x1f0413f0> 
Flipper[18946:907] Entered Background 

Если вы хотите, чтобы позволить пользователю открыть другое приложение, вы должны обеспечить кнопку для них, чтобы сделать это (или лист действий или предупреждение). Повторное назначение кнопки «Домой» звучит так, будто вы можете отклонить свое приложение.

Обратите внимание, что если вы поместите тот же код в application:didFinishLaunchingWithOptions:, он найдет и сразу же столкнется с приложением карт. Возможно, что поведение предотвращается в applicationWillResignActive:. Если вы действительно заняты этим (и у вас есть приложение только с одним видом), вы можете использовать viewWillDisappear.

+0

К сожалению, это не тот случай. – Ashutosh

+0

В чем причина вашего желания? Если вы хотите ограничить доступ, могут быть лучшие способы. –

+0

Итак, у меня есть контейнерное приложение, и у него будет ссылка на пару разных приложений. Но как только пользователь находится в другом приложении и закрывает его, ему, возможно, придется снова обратиться в контейнерное приложение, чтобы открыть другое приложение. Это просто для демонстрационной цели, поэтому, пожалуйста, не беспокойтесь о концепции и удобстве использования, – Ashutosh

3

Вы можете открывать любое другое приложение, используя свою схему URL-адресов и код, который вы указали - просто убедитесь, что он не нарушает HIG (Human Interface Guidelines). Однако в вашем случае это не сработает.

This question и ответ предоставляет более подробную информацию об этом, но если вы запустите приложение на взломанный телефон, вы можете использовать этот небольшой фрагмент кода вместо:

[[UIApplication sharedApplication] launchApplicationWithIdentifier:@"com.apple.Preferences" suspended:NO]; 

или фрагмент из this answer:

system("/usr/bin/open com.mycompany.MyAppName"); 

Это, плохая идея. Apple отклонит ваше приложение с уверенностью в 99%. Метод applicationWillResignActive предназначен для сохранения вашей работы и подготовки к закрытию, и вы не можете и не можете открыть другое приложение в этом методе. (не применяется в качестве приложения не будут загружены в App Store.

+0

Как я сказал выше. Мне не нужно ставить это на Appstore, это будет только для демонстрации и внутреннего использования. Поэтому я не беспокоюсь обо всем этом. – Ashutosh

+0

Вы должны поместить это в исходный вопрос, не все читают комментарии к вопросу :) – Emil