Как обращаться со схемой URL по умолчанию
Я хочу создать поддержку URI (или схемы URL) в своем приложении.
Я делаю LSSetDefaultHandlerForURLScheme()
в моей + (void)initialize
и я установил конкретные схемы URL также в моем info.plist
. Поэтому у меня есть схемы URL без Apple Script
или Apple Events
.
Когда я вызываю myScheme:
в моем любимом браузере система активирует мое приложение.
- Предпочтительный способ Java для отправки URL-адреса HTTP для доступности
- Удаление идентификатора fragmentа из URL-адресов AngularJS (символ #)
- Легкий способ разобрать URL-адрес на кросс-платформе C ++?
- Как получить RouteData по URL?
- Как получить изображения для отображения в Excel?
Проблема в том, как обрабатывать схемы при их вызове. Или лучше сказал: как я могу определить, что должно делать мое приложение, когда myScheme:
Есть ли специальный метод, который я должен реализовать или мне нужно зарегистрировать где-нибудь?
- Что действительно и что нет в запросе URI?
- Как кодировать значения параметров URI?
- Код для декодирования / кодирования измененного URL-адреса base64
- Можно ли создать ссылку на конкретное сообщение электронной почты в Outlook?
- Захват параметров URL в request.GET
- Facebook share link - можете ли вы настроить текст сообщения?
- Изменение URL адресной строки в приложении AJAX для соответствия текущему состоянию
- Как проверить, существует ли URL-адрес или возвращает 404 с Java?
Поскольку вы упоминаете AppleScript, я полагаю, вы работаете в Mac OS X.
Простым способом регистрации и использования настраиваемой схемы URL является определение схемы в вашем .plist:
CFBundleURLTypes CFBundleURLName URLHandlerTestApp CFBundleURLSchemes urlHandlerTestApp
Чтобы зарегистрировать схему, поместите это в свою инициализацию AppDelegate:
[[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
Всякий раз, когда ваше приложение активируется по схеме URL-адресов, вызывается определенный селектор.
Конец для метода обработки событий, который показывает, как получить строку URL:
- (void)handleURLEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent { NSString* url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; NSLog(@"%@", url); }
Документация Apple: установка обработчика Get Get
Обновление. Я просто заметил проблему для изолированных приложений, которые устанавливают обработчик событий в applicationDidFinishLaunching:
С включенной песочницей метод обработчика не вызывается при запуске приложения, щелкнув URL-адрес, который использует пользовательскую схему. Установив обработчик немного раньше, в applicationWillFinishLaunching:
метод вызывается как ожидалось:
- (void)applicationWillFinishLaunching:(NSNotification *)aNotification { [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; } - (void)handleURLEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent { NSString* url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; NSLog(@"%@", url); }
На iPhone самый простой способ обработки активации URL-схемы – реализовать application:handleOpenURL:
– Документация
Все кредиты должны быть отправлены в Weichsel и kch
Я просто добавляю быстрый (2.2 / 3.0) код для вашего удобства
func applicationWillFinishLaunching(_ notification: Notification) { NSAppleEventManager.shared().setEventHandler(self, andSelector: #selector(self.handleGetURL(event:reply:)), forEventClass: UInt32(kInternetEventClass), andEventID: UInt32(kAEGetURL) ) } func handleGetURL(event: NSAppleEventDescriptor, reply:NSAppleEventDescriptor) { if let urlString = event.paramDescriptor(forKeyword: keyDirectObject)?.stringValue { print("got urlString \(urlString)") } }
Проблема в том, как обрабатывать схемы при их вызове.
Именно здесь происходят события Apple. Когда Launch Services хочет, чтобы ваше приложение открывало URL-адрес, оно отправляет вашему приложению kInternetEventClass
/ kAEGetURL
.
В Cocoa Scripting Guide используется эта задача как пример установки обработчика событий .
Вы можете определить команду «получить URL» в терминологии сценариев SDEF и реализовать соответствующий метод. Например, SDEF терминала содержит следующее определение команды для обработки URL-адресов
и заявляет, что приложение отвечает на него:
Класс TTApplication (подclass NSApplication) определяет метод:
- (void)handleGetURLScriptCommand:(NSScriptCommand *)command { … }