Как вы устанавливаете свое приложение Cocoa в качестве веб-браузера по умолчанию?

StackOverflow https://stackoverflow.com/questions/49510

  •  09-06-2019
  •  | 
  •  

Вопрос

Как вы устанавливаете свое приложение Cocoa в качестве веб-браузера по умолчанию?

Я хочу создать приложение, которое запускается по умолчанию, когда пользователь нажимает на ссылку HTTP или HTTPS в других приложениях (Mail, iChat и т.д.).

Это было полезно?

Решение

Существует четыре шага к созданию приложения, которое может выступать в качестве веб-браузера по умолчанию.Первые три шага позволяют вашему приложению выступать в качестве обработчика ролей для соответствующих схем URL (HTTP и HTTPS), а последний шаг делает его обработчиком ролей по умолчанию для этих схем.

1) Добавьте схемы URL, которые может обрабатывать ваше приложение, в файл info.plist вашего приложения

Чтобы добавить поддержку для http:// и https:// вам нужно будет добавить следующее в файл info.plist вашего приложения.Это сообщает операционной системе, что ваше приложение способно обрабатывать HTTP и URL-адреса HTTP.

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>http URL</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>http</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleURLName</key>
        <string>Secure http URL</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>https</string>
        </array>
    </dict>
</array>

2) Напишите метод обработчика URL-адресов

Этот метод будет вызван операционной системой, когда она захочет использовать ваше приложение для открытия URL-адреса.Не имеет значения, к какому объекту вы добавляете этот метод, он будет явно передан менеджеру событий на следующем шаге.Метод обработчика URL-адресов должен выглядеть примерно так:

- (void)getUrl:(NSAppleEventDescriptor *)event 
    withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
  // Get the URL
  NSString *urlStr = [[event paramDescriptorForKeyword:keyDirectObject] 
    stringValue];

  //TODO: Your custom URL handling code here
}

3) Зарегистрируйте метод обработки URL-адресов

Затем сообщите менеджеру событий, какой объект и метод вызывать, когда он захочет использовать ваше приложение для загрузки URL-адреса.В приведенном здесь коде я передаю self в качестве обработчика событий, предполагая, что мы вызываем setEventHandler из того же объекта, который определяет getUrl:withReplyEvent: способ.

Вам следует добавить этот код где-нибудь в код инициализации вашего приложения.

NSAppleEventManager *em = [NSAppleEventManager sharedAppleEventManager];
[em 
  setEventHandler:self 
  andSelector:@selector(getUrl:withReplyEvent:) 
  forEventClass:kInternetEventClass 
  andEventID:kAEGetURL];

Некоторые приложения, включая ранние версии Adobe AIR, используют альтернативный WWW! / OURL AppleEvent для запроса того, чтобы приложение открывало URL-адреса, поэтому для обеспечения совместимости с этими приложениями вам также следует добавить следующее:

[em
  setEventHandler:self 
  andSelector:@selector(getUrl:withReplyEvent:) 
  forEventClass:'WWW!' 
  andEventID:'OURL'];

4) Установите ваше приложение в качестве браузера по умолчанию

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

Для этого мы должны использовать API служб запуска.В этом случае мы устанавливаем наше приложение в качестве обработчика ролей по умолчанию для ссылок HTTP и HTTPS:

CFStringRef bundleID = (CFStringRef)[[NSBundle mainBundle] bundleIdentifier];
OSStatus httpResult = LSSetDefaultHandlerForURLScheme(CFSTR("http"), bundleID);
OSStatus httpsResult = LSSetDefaultHandlerForURLScheme(CFSTR("https"), bundleID);
//TODO: Check httpResult and httpsResult for errors

(Вероятно, лучше всего спросить разрешения пользователя, прежде чем менять его браузер по умолчанию.)

Пользовательские схемы URL-адресов

Стоит отметить, что вы также можете использовать эти же шаги для обработки ваших собственных схем URL-адресов.Если вы создаете пользовательскую схему URL-адресов, рекомендуется основывать ее на идентификаторе пакета вашего приложения, чтобы избежать конфликтов с другими приложениями.Итак, если ваш идентификатор пакета равен com.example.MyApp вам следует рассмотреть возможность использования x-com-example-myapp:// URL-адреса.

Другие советы

Если вы просто хотите изменить вспомогательное приложение по умолчанию для http (ов), вы можете сделать это в настройках Safari.Там вы найдете выпадающий список, который позволит вам выбрать все зарегистрированные приложения-обработчики для http.Чтобы приложение автоматически установило себя в качестве браузера по умолчанию, см. Предыдущие инструкции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top