Как я могу снова запустить приложение, которое открыло мою настраиваемую схему URL?

Я работаю над приложением, которое управляет моей собственной схемой URL-адресов, поэтому я реализую обратный вызов:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions
{
    // Get our launch URL
    if (launchOptions != nil)
    {
        // Launch dictionary has data
        NSURL* launchURL = [launchOptions objectForKey: UIApplicationLaunchOptionsURLKey];

        // Parse the URL
        NSString* hostString = [launchURL host];

        blah blah blah...

Это работает очень хорошо, но мне нужно запустить приложение вызывающего абонента (то есть приложение, которое открыло URL-адрес). Так что мой вопрос здесь, это возможно?

Я играл с UIApplicationLaunchOptionsSourceApplicationKey, но я не могу запустить приложение по его идентификатору пакета приложений. Могу я?

Я также пробовал недокументированные launchApplicationWithIdentifier: из UIApplication, но мне нужно реальное решение, и кажется, что обходной путь работает только в симуляторе.

Любые идеи? Благодарю вас!


person zapador    schedule 26.01.2012    source источник
comment
Я пытаюсь сделать очень похожую вещь, после открытия моего приложения из Safari я хочу вернуться в Safari (без загрузки нового URL-адреса). Я хочу просто открыть Safari, как если бы я переключился на него с помощью переключателя задач. Пожалуйста, не могли бы вы рассказать о недокументированном методе, который вы использовали для достижения этой цели?   -  person Plasma    schedule 06.09.2012
comment
Один из обходных путей на iPad – сообщить пользователю о встроенном жесте: проведите четырьмя пальцами по горизонтали по экрану, чтобы вернуться к предыдущему приложению. Кажется, только для iPad, а не для портативных устройств.   -  person Basil Bourque    schedule 07.05.2013


Ответы (1)


Единственным способом было бы, чтобы оба приложения поддерживали настраиваемую схему URL. Затем вы вставляете URL-адрес вызывающего абонента в URL-адрес другого приложения.

Например, предположим, что App2 хочет вызвать App1 таким образом, чтобы App1 мог затем «перезвонить» App2. Он создаст и откроет такой URL-адрес:

app1://?caller=app2%3A%2F%2Fblabla

Когда вы декодируете часть caller, вы получите строку app2://blabla, которую вы можете снова открыть с помощью openURL: для «обратного вызова».

person DarkDust    schedule 26.01.2012
comment
Да, боюсь, это невозможно, если каждое приложение не поддерживает собственную схему URL. Просто хочу исчерпать все возможности, спасибо DarkDust! - person zapador; 26.01.2012
comment
Должен быть какой-то другой способ... вы видели приложение facebook... мы идем в приложение facebook для аутентификации, а затем приложение facebook открывает наше приложение... даже если наше приложение не имеет пользовательской схемы URL-адресов... - person Saurabh; 26.01.2012
comment
Это связано с тем, что приложения, аутентифицирующиеся с помощью Facebook SSO (единого входа), регистрируют свою пользовательскую схему URL-адресов в facebook. - person Lance; 26.01.2012
comment
Да, Facebook SSO требует, чтобы клиентское приложение зарегистрировало схему URL-адресов на основе идентификатора приложения Facebook. Вернемся к упомянутому UIApplicationLaunchOptionsSourceApplicationKey, для чего он нужен? Это просто для того, чтобы различать приложения запуска? - person zapador; 27.01.2012
comment
@zapador использует мое воображение: было бы полезно вести себя по-разному в зависимости от того, какое приложение запустило мое приложение, например, запустив это другое приложение, если я знаю, что оно поддерживает определенную пользовательскую схему URL - person aehlke; 30.12.2015