Запустите приложение из другого (iPhone) - PullRequest
162 голосов
/ 07 января 2009

Можно ли запустить любое произвольное приложение iPhone из другого приложения ?, Например, в моем приложении, если я хочу, чтобы пользователь нажал кнопку и запустился прямо в приложение "Телефон" текущее приложение, откройте приложение Телефон) .

это было бы возможно? Я знаю, что это можно сделать для телефонных звонков по телефонной ссылке, но я хочу вместо этого просто запустить приложение «Телефон» без набора какого-либо определенного номера.

Ответы [ 13 ]

77 голосов
/ 07 января 2009

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

Но можно запустить любое приложение, которое регистрирует схему URL, будь то Apple, ваша или другого разработчика. Документы здесь:

Связь с другими приложениями

Что касается запуска телефона, похоже, что ваша ссылка tel: должна содержать не менее трех цифр, прежде чем телефон запустится. Так что вы не можете просто зайти в приложение без набора номера.

71 голосов
/ 04 июня 2014

Я обнаружил, что легко написать приложение, которое может открыть другое приложение.

Предположим, у нас есть два приложения с именами FirstApp и SecondApp. Когда мы открываем FirstApp, мы хотим иметь возможность открыть SecondApp, нажав кнопку. Решение для этого:

  1. В SecondApp

    Перейдите в plist-файл SecondApp, и вам нужно добавить Схемы URL со строкой iOSDevTips (конечно, вы можете написать еще одну строку. Это ваше дело).

enter image description here

2 , В FirstApp

Создайте кнопку со следующим действием:

- (void)buttonPressed:(UIButton *)button
{
  NSString *customURL = @"iOSDevTips://";

  if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
  {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
  }
  else
  {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"
                              message:[NSString stringWithFormat:@"No custom URL defined for %@", customURL]
                              delegate:self cancelButtonTitle:@"Ok" 
                              otherButtonTitles:nil];
    [alert show];
  }

}

Вот и все. Теперь, когда вы можете нажать кнопку в FirstApp, она должна открыть SecondApp.

24 голосов
/ 17 ноября 2015

Ответ Ли абсолютно верен для iOS до 8.

В iOS 9 вы должны внести в белый список любые схемы URL, которые ваше приложение хочет запросить в Info.plist под ключом LSApplicationQueriesSchemes (массив строк):

enter image description here

15 голосов
/ 19 января 2016

In Swift

Только если кто-то искал быстрое копирование Swift и вставил

if let url = NSURL(string: "app://") where UIApplication.sharedApplication().canOpenURL(url) {
            UIApplication.sharedApplication().openURL(url)
} else if let itunesUrl = NSURL(string: "https://itunes.apple.com/itunes-link-to-app") where UIApplication.sharedApplication().canOpenURL(itunesUrl) {
            UIApplication.sharedApplication().openURL(itunesUrl)      
}
11 голосов
/ 25 мая 2017

Чтобы вы могли открыть свое приложение из другого приложения, вам нужно будет внести изменения в оба приложения. Вот шаги с использованием Swift 3 с iOS 10 обновление:

1. Зарегистрируйте ваше приложение, которое вы хотите открыть

Обновите Info.plist, определив пользовательскую и уникальную схему URL вашего приложения.

enter image description here

Обратите внимание, что имя вашей схемы должно быть уникальным, в противном случае, если на вашем устройстве установлено другое приложение с таким же именем схемы URL, тогда будет определено время выполнения, которое будет открыто.

2. Включите предыдущую схему URL в ваше основное приложение

Вам нужно будет указать схему URL, которую вы хотите, чтобы приложение могло использовать с методом canOpenURL: класса UIApplication. Поэтому откройте Info.plist основного приложения и добавьте схему URL другого приложения в LSApplicationQueriesSchemes. (Представлено в iOS 9.0)

enter image description here

3. Выполните действие, которое открывает ваше приложение

Теперь все настроено, так что вы можете написать свой код в основном приложении, которое открывает другое ваше приложение. Это должно выглядеть примерно так:

let appURLScheme = "MyAppToOpen://"

guard let appURL = URL(string: appURLScheme) else {
    return
}

if UIApplication.shared.canOpenURL(appURL) {

    if #available(iOS 10.0, *) {
        UIApplication.shared.open(appURL)
    }
    else {
        UIApplication.shared.openURL(appURL)
    }
}
else {
    // Here you can handle the case when your other application cannot be opened for any reason.
}

Обратите внимание, что эти изменения требуют новой версии, если вы хотите, чтобы ваше существующее приложение (установленное из AppStore) открывалось. Если вы хотите открыть приложение, которое вы уже выпустили в Apple AppStore, то вам сначала нужно загрузить новую версию, которая включает регистрацию вашей схемы URL.

10 голосов
/ 26 декабря 2011

Вот хороший учебник для запуска приложения из другого приложения:
iOS SDK: работа со схемами URL
И, не возможно запустить произвольное приложение, но собственные приложения, которые зарегистрировали Схемы URL .

7 голосов
/ 19 июля 2017

Для этого нам нужно добавить несколько строк кода в оба приложения

Приложение A: , которое вы хотите открыть из другого приложения. (Источник)

Приложение B : из приложения B вы хотите открыть Приложение A (Назначение)

Код для Приложение A

Добавьте несколько тегов в Plist Приложение A Открытый исходный код приложения Plist и ниже под XML

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.TestApp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>testApp.linking</string>
        </array>
    </dict>
</array>

В приложении делегат Приложение A - Получить обратный звонок здесь

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// You we get the call back here when App B will try to Open 
// sourceApplication will have the bundle ID of the App B
// [url query] will provide you the whole URL 
// [url query] with the help of this you can also pass the value from App B and get that value here 
}

Теперь перейдем к Код приложения B -

Если вы просто хотите открыть приложение A без какого-либо входного параметра

-(IBAction)openApp_A:(id)sender{

    if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?"]]){
         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
            [alert show];

        }
}

Если вы хотите передать параметр из приложения B в приложения A , используйте нижеприведенный код

-(IBAction)openApp_A:(id)sender{
    if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?userName=abe&registered=1&Password=123abc"]]){
         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
            [alert show];

        }
}

Примечание. Вы также можете открыть приложение, просто набрав testApp.linking: //? в браузере Safari

7 голосов
/ 07 января 2009

Вы можете запускать только приложения, которые зарегистрировали схему URL. Затем, так же, как вы открываете приложение SMS с помощью sms:, вы сможете открыть приложение, используя их схему URL.

Существует очень хороший пример, доступный в документах под названием LaunchMe, который демонстрирует это.

Пример кода LaunchMe по состоянию на 6 ноября 2017 г.

6 голосов
/ 04 сентября 2014

Попробуйте следующий код поможет вам запустить приложение из вашего приложения

Примечание: замените имя fantacy на фактическое имя приложения

NSString *mystr=[[NSString alloc] initWithFormat:@"fantacy://location?id=1"];
NSURL *myurl=[[NSURL alloc] initWithString:mystr];
[[UIApplication sharedApplication] openURL:myurl];
3 голосов
/ 07 января 2009

Нет, это не так. Помимо документированных обработчиков URL, нет возможности связаться с другим приложением или запустить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...