Обратите внимание, что метод extensionContext?.openURLне работает с расширением iMessage - он открывает только ваше текущее приложение.
Я разместил полный образец приложения, показывающий технику, на GitHub с соответствующий фрагмент здесь:
let handler = { (success:Bool) -> () in
if success {
os_log("Finished opening URL")
} else {
os_log("Failed to open URL")
}
}
let openSel = #selector(UIApplication.open(_:options:completionHandler:))
while (responder != nil){
if responder?.responds(to: openSel ) == true{
// cannot package up multiple args to openSel so we explicitly call it on the iMessage application instance
// found by iterating up the chain
(responder as? UIApplication)?.open(url, completionHandler:handler) // perform(openSel, with: url)
return
}
responder = responder!.next
}
В настоящее время эта функция работает в iOS 10, 11 и 12.
func openInMessagingURL(urlString: String){
if let url = NSURL(string:urlString){
let context = NSExtensionContext()
context.open(url, completionHandler: nil)
var responder = self as UIResponder?
while (responder != nil){
if responder?.responds(to: Selector("openURL:")) == true{
responder?.perform(Selector("openURL:"), with: url)
}
responder = responder!.next
}
}
}
ОБНОВЛЕНИЕ ДЛЯ SWIFT 4
func openInMessagingURL(urlString: String){
if let url = URL(string:urlString){
let context = NSExtensionContext()
context.open(url, completionHandler: nil)
var responder = self as UIResponder?
while (responder != nil){
if responder?.responds(to: #selector(UIApplication.open(_:options:completionHandler:))) == true{
responder?.perform(#selector(UIApplication.open(_:options:completionHandler:)), with: url)
}
responder = responder!.next
}
}
}
Ответ 4 · рейтинг 1 · Christian Navelot
Кажется, невозможно открыть приложение из расширения сообщения, за исключением сопутствующего приложения, содержащегося в рабочей области. Мы попытались открыть Safari из нашего расширения сообщений, но это не сработало, кажется, это ограничение предусмотрено замыслом.
Вы можете попробовать другие сценарии, чтобы решить вашу проблему:
Веб-просмотр в расширенном расширении сообщения
У вас может быть веб-просмотр в вашем расширении сообщений, и когда вы нажимаете на сообщение, вы можете открыть расширенный режим и открыть свой URL-адрес в веб-просмотре.
Пользователь не будет в Safari, но страница будет встроена в ваше расширение для сообщений.
Откройте URL-адрес во вспомогательном приложении
Щелкнув по сообщению, вы можете открыть свое приложение-компаньон (через схему URL с MyApp://?myParam=myValue) со специальным параметром; приложение-компаньон должно реагировать на этот параметр и может перенаправлять в Safari через OpenUrl.
В этом случае вы сделаете несколько перенаправлений перед веб-страницей, но это должно позволить вернуться к беседе.
Мы также обнаружили, что можем создать экземпляр SKStoreProductViewController в расширении сообщения, если вы хотите открыть Apple Store прямо в сообщениях и позволить пользователю покупать товары.
Ответ 5 · рейтинг 1 · radar
Если вам нужно только вставить ссылку, то вы должны использовать activeConversation.insertText и вставить ссылку. Прикосновение к сообщению откроет Safari.
Ответ 6 · рейтинг -1 · handrenliang
openURL в didSelectMessage:беседа: с помощью extensionContext
обрабатывать схему URL-адресов в вашем хосте AppDelegate