Продолжаю тему URL-схем, о которы рассказывалось в первой части. В прошлой части я закончил на том, что приложения могут регистрировать свои URL схемы и могут быть вызваны другими приложениями.
Приступим сразу к делу. Создадим пустой проект (Empty application) в XCode и назовем его «URLschemes». Откроем свойства Target и перейдем в раздел Info, раскроем ветку URL Types.
Добавим поддержку новой схемы. Для этого нажмем кнопку «Add» в правом нижнем углу. Выберем «Add URL Type».
Заполните поля так же как и на скриншоте. Таким образом мы реализовали схему «myapp». Теперь нужно добавить код в приложение, который будет вызываться при запуске приложения через URL-схему.
Откройте класс, который реализует UIApplicationDelegate (чаще всего AppDelegate) и добавьте метод:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
Как видим, в этом методе мы должны вернуть YES или NO, в зависимости от того можем ли в данный момент приложение обработать запрос.
Сделаем этот метод таким:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSString* message = [NSString stringWithFormat:@"%@ | %@ | %@", url, sourceApplication, annotation];UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Application" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alert show]; [alert release];
return YES; }
При вызове этого приложения через URL-схему приложение будет показывать параметры вызова. Запустите приложение (работает не только на устройстве, но и на симуляторе). Вы увидите белый экран. Сверните приложение. Запустите Safari и введите в адресной строке — myapp://someurl
Как видим наше приложение вызвалось и мы можем увидеть URL с которым вызвалось наше приложение, а так же вызывающее приложение.
Вызывать наше приложение может не только Safari. Можно сделать второе приложение, которое будет вызывать наше через код:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"myapp://123123123"]];
А так же мы можем проверить, установлено ли наше приложение:
[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"myapp://123123123"]];
Итак, еще один пункт из обещанного (Как проверить, установлено ли другое приложение на устройстве?) нам стал известен.
Подитожим. Мы можем добавить поддержку схем в свое приложение. Другие приложения могут проверять, установлено ли наше приложение и вызывать его. Для этого они должны знать URL-схему, которую реализует наше приложение.
Что будет, если несколько приложений на устройстве поддерживают одну и ту же схему?
На этот вопрос никто не знает ответ. Система не гарантирует ни порядка вызова, ни всегда вызывать одно и тоже приложение. Один словом — как повезет.
На этом все. Будем ждать третьей части, в которой будет еще интереснее.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: