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

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

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

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

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

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

23
задан Leo Dabus 6 November 2017 в 05:03
поделиться

2 ответа

Поскольку вы упоминаете AppleScript, я полагаю, что вы работаете на Mac OS X.

Простой способ регистрации и использования пользовательской схемы URL - это определить схему в вашем .plist:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>URLHandlerTestApp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>urlHandlerTestApp</string>
        </array>
    </dict>
</array>

Чтобы зарегистрировать схему, поместите это в инициализацию 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 URL

Обновление. Я только что заметил проблему для песочницы приложений, которые устанавливают обработчик событий в приложениеDidFinishLaunching:. При включенной песочнице метод обработчика не вызывается при запуске приложения путем нажатия на 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-схема активации является, для реализации UIApplicationDelegate's application:handleOpenURL: - Документация

70
ответ дан 29 November 2019 в 00:45
поделиться

Проблема в том, как работать со схемами, когда они вызываются.

В этом и заключается суть событий Apple. Когда служба запуска хочет, чтобы ваше приложение, чтобы открыть URL, он посылает ваше приложение событие kInternetEventClass/kAEGetURL.

Руководство по сценариям какао использует эту самую задачу в качестве примера установки обработчика событий.

.
5
ответ дан 29 November 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: