Как обращаться со схемой URL по умолчанию

Я хочу создать поддержку URI (или схемы URL) в своем приложении.

Я делаю LSSetDefaultHandlerForURLScheme() в моей + (void)initialize и я установил конкретные схемы URL также в моем info.plist . Поэтому у меня есть схемы URL без Apple Script или Apple Events .

Когда я вызываю myScheme: в моем любимом браузере система активирует мое приложение.

Проблема в том, как обрабатывать схемы при их вызове. Или лучше сказал: как я могу определить, что должно делать мое приложение, когда myScheme:

Есть ли специальный метод, который я должен реализовать или мне нужно зарегистрировать где-нибудь?

Поскольку вы упоминаете 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 { … } 
  • Android-сервис - URL-адрес Ping
  • Что означает точка в URL-адресе?
  • Android: как анализировать URL-адрес String с пробелами для URI-объекта?
  • Секундомер как разделитель запросов URL
  • Почему хеш-часть URL-адреса недоступна на стороне сервера?
  • Каков наилучший способ получить текущий URL в Spring MVC?
  • Кодирование URL в Android
  • Поддержка браузера для URL-адресов, начинающихся с двойной косой черты
  • Получение параметра URL в java и извлечение определенного текста из этого URL-адреса
  • Диалог отправки Facebook: добавление строки в описание
  • ИмяValueCollection для URL-запроса?
  • Давайте будем гением компьютера.