2016-07-12 5 views
3

Я пробовал [self.extensionContext openURL:completion], но мое приложение разбилось. Я слышал, что некоторые расширения не могут использовать этот метод, могут ли расширения iMessage?Может ли расширение imessage открыть хост-приложение?

Кстати, может ли приложение-приложение активировать расширение iMessage?

+0

Проверьте этот ответ [Open My приложение из моего расширения клавиатуры в стремительной 3.0] (https://stackoverflow.com/a/44718613/2150318) –

ответ

0

This is apparently not working in Seed 2 but should be fixed in Seed 3.

https://forums.developer.apple.com/message/153441#153441

+0

Это не значит, что он не работает. Они не должны функционировать таким образом. Это не должно быть принятым ответом. – MattWright

+1

'Я только что сделал тест. теперь вы можете открыть хост-приложение из расширения iMessage на бета-версии 4' – Maize

5

Share Расширения и расширения действий не предназначены для использования в качестве пусковых установок приложений.

App Extension Programming Guide

Там нет прямой связи между расширением приложения и содержащим его приложением; как правило, приложение, содержащее приложение, даже не работает, пока работает автономное расширение. Приложение, содержащее расширение приложения и хост-приложение, вообще не взаимодействует.

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

Существует ограниченное взаимодействие между расширением приложения и его содержащим приложением. Виджет «Сегодня» (и другой тип расширения приложения) может попросить систему открыть свое приложение, вызвав метод openURL:completionHandler: класса NSExtensionContext. "

enter image description here

работа вокруг производной от этого SO question.

Рабочего раствора (опробован на прошивке 9.2) для клавиатуры расширения.

Этой категория добавляет специальный метод для доступа к скрытогоsharedApplication, а затем наберите openURL: (конечно, вы должны использовать метод openURL: с вашей схемой приложений.)

// Valentin Shergin 

extension UIInputViewController { 

func openURL(url: NSURL) -> Bool { 
    do { 
     let application = try self.sharedApplication() 
     return application.performSelector("openURL:", withObject: url) != nil 
    } 
    catch { 
     return false 
    } 
} 

func sharedApplication() throws -> UIApplication { 
    var responder: UIResponder? = self 
    while responder != nil { 
     if let application = responder as? UIApplication { 
      return application 
     } 

     responder = responder?.nextResponder() 
    } 

    throw NSError(domain: "UIInputViewController+sharedApplication.swift", code: 1, userInfo: nil) 
} 

} 
+0

Спасибо, так что я не могу использовать ' openURL: завершение в моем расширении сообщений? – Maize

+0

Не завершение, но вы можете использовать это очень короткое расширение для доступа к скрытому объекту 'sharedApplication', а затем называть его' openURL'. Я только что обновил свой ответ. – tymac

+0

ОК, спасибо, я узнал что-то новое – Maize

-2
[self.extensionContext openURL:YOUR_NSURL completionHandler:nil]; 

было бы хорошо, если вы можете передать deeplinks открыть определенный экран в приложении

0

self.extensionContext?.open(url, completionHandler: nil) не работает в моем расширении Шеззаде.

tymac ответ правильный, однако OpenUrl был перемещен, чтобы открыть в Swift 3.

я нашел простое решение в этой теме: openURL not work in Action Extension

extension UIViewController { 

    func openURL(url: URL) { 
    var responder = self as UIResponder? 

    while (responder != nil){ 
     if responder?.responds(to: Selector("openURL:")) == true{ 
     responder?.perform(Selector("openURL:"), with: url) 
     } 
     responder = responder!.next 
    } 
    } 

} 
+0

Это не работает ... –

-1

Это прекрасно работает для меня:

NSString *customURL = @"myHostAppName://"; 

    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]]) { 
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]]; 
    } else { 

     UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"URL error" message:[NSString stringWithFormat:@"No custom URL defined for %@", customURL] preferredStyle:UIAlertControllerStyleAlert]; 

     UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; 
     [alertController addAction:ok]; 

     [self presentViewController:alertController animated:YES completion:nil]; 
    } 

Помните снова установить приложение-хост.

Примите во внимание How to open our app from iMessage

Смежные вопросы