Как открыть другое приложение, когда пользователь закрывает текущее приложение?
В моем приложении я хотел бы, чтобы пользователь видел другое приложение, когда он закрывает текущее приложение. Это возможно каким-либо образом? Я попытался написать код и открыть приложение через собственную схему URL прямо из метода:
- (void)applicationWillResignActive:(UIApplication *)application
{
NSString * string = @"InnovationLab://";
NSURL * url = [NSURL URLWithString:string];
[[UIApplication sharedApplication] openURL:url];
}
Но это не сработало. Я ставлю точку останова здесь, и как только я закрываю приложение, оно останавливается здесь, но ничего не происходит. Это не пойдет в AppStore. Только для демо и внутреннего использования.
2 ответа
Должны ли вы сделать это? Нет.
Ты можешь сделать это? (Возможно нет
Я написал небольшое тестовое приложение, чтобы попытаться открыть 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
,
Вы можете открыть любое другое приложение, используя их схему URL-адреса и предоставленный вами код - просто убедитесь, что оно не нарушает HIG ( Human Interface Guidelines). Это не будет работать в вашем случае, хотя.
В этом вопросе и ответе содержится более подробная информация по этому вопросу, но если вы запустите приложение на взломанном телефоне, вы можете использовать этот небольшой фрагмент:
[[UIApplication sharedApplication] launchApplicationWithIdentifier:@"com.apple.Preferences" suspended:NO];
или этот фрагмент из этого ответа:
system("/usr/bin/open com.mycompany.MyAppName");
Тем не менее, плохая идея. Apple отклонит ваше приложение с уверенностью 99%. applicationWillResignActive
-метод для сохранения вашей работы и подготовки к закрытию, и вы не можете и не можете открыть другое приложение в этом методе. (неприменимо, так как приложение не будет загружено в App Store.