Существует четыре шага для создания приложения, которое может работать как веб-браузер по умолчанию. Первые три шага позволяют вашему приложению выступать в роли обработчика роли для соответствующих схем URL (HTTP и HTTPS), а последний шаг делает его обработчиком роли по умолчанию для этих схем.
1) Добавьте схемы URL, которые ваше приложение может обработать, в файл info.plist вашего приложения
Чтобы добавить поддержку http://
и https://
, вам нужно добавить следующее в файл info.plist вашего приложения. Это говорит ОС, что ваше приложение способно обрабатывать HTTP и HTTP URL.
<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 Launch Services. В этом случае мы устанавливаем наше приложение в качестве обработчика роли по умолчанию для ссылок 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.