Поймать зарегистрированную схему URL и запустить приложение
Мне удалось запустить свое приложение всякий раз, когда URL-схема вызывается через браузер, поместив эту схему в info.plist
и добавив эти 2 строки:
NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
[appleEventManager setEventHandler:self andSelector:@selector(getUrl:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
и правильно реализовать мою функцию getUrl.
Поэтому я попытался поместить две строки выше в моем appDelegates's applicationWillFinishLaunching
, applicationDidFinishLaunching
а также init
, Но в трех случаях у меня один и тот же сценарий: если мое приложение уже запущено, то функция getUrl вызывается правильно, если приложение не запущено, getUrl никогда не вызывается.
Я нашел в других сообщениях ( Как работать со схемой URL по умолчанию и получить событие url в приложении, открытом в задаче c (Mac OSX)), но часто приходит предложение использовать applicationWillFinishLaunching
, который не работал в моем случае.
Изменить: вот мой info.plist: http://pastebin.com/yM8zabvY
2 ответа
Я не уверен, где дела идут плохо для тебя. Я создал тестовый проект, в котором я просто вставил CFBundleURLTypes
ключ из вашего Info.plist, и я использовал это в моем делегате приложения:
-(void)getUrl:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor*)reply
{
NSLog(@"%@", event);
}
-(void)applicationWillFinishLaunching:(NSNotification *)aNotification
{
// Register ourselves as a URL handler for this URL
[[NSAppleEventManager sharedAppleEventManager]
setEventHandler:self
andSelector:@selector(getUrl:withReplyEvent:)
forEventClass:kInternetEventClass
andEventID:kAEGetURL];
}
И это работает так, как я ожидал. Я получаю сообщение журнала независимо от того, было ли приложение уже запущено или нет, когда я запускаю open "feed://test"
в терминале.
Вы убедились, что ваше приложение является обработчиком по умолчанию для feed:
схема?
Вы можете проверить схемы URL системы, используя RCDefaultApp или API Launch Services (LSCopyDefaultHandlerForURLScheme
).