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

В этой и последющих статьях вы узнаете ответы на вопросы:

  • Как вызывать стандартные приложения из своего? (почта, телефон, сообщения, карта, YouTube, iTunes)
  • Как передавать данные из одного приложения в другое?
  • Как проверить, установлено ли другое приложение на устройстве?
  • И много чего другого…

Простое начало

Пожалуй, начнем с простого. Довольно распространенная задача — вызвать браузер Safari из своего приложения, да и мало того что вызвать! Нужно чтобы браузер открыл интересующую нас страницу. Без лишних слов, делается это так:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://idev.by"]];

Что мы сделали в этом примере? Мы «попросили» наше приложение открыть URL. Как система понимает в каким приложением открыть данный URL? Можно подумать, что если мы тут говорим про URL то это обязательно интернет-адрес и система всегда будет вызывать Safari. Убедимся, что это не так. Позвоним по номеру 123-456-789:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];

Что делает этот код? Я думаю вы уже догадались, что он открывает приложение «Телефон» и набирает номер.

Как же система понимает какое приложение открывать?

Рассмотрим как выглядит URL, который мы отправляем в метод openURL::

tel://123456789 и http://idev.by

Разделим эту строку на две части, разделителем будем считать три знака — ://. Становиться ясно, что первая часть (в наших случаях это http или tel) — это название схемы, а вторая часть — какие-либо данные. В первом случае номер телефона, во втором — адрес.

Итак, система анализирует название схемы и вызывает соответствующее приложение передавая ему данные. Значит, система где-то хранит названия схем и соответствующие им приложения!

Сделаем небольшое отступление. Выше я обещал что вы узнаете как вызывать Google Maps, iTunes, Youtube и SMS приложения. Об этом можно почитать тут. Я не стану это описывать в данное статье т.к. принцип для всего одинаковый.

Поддержка URL-схем приложениями

Мы остановились на том, что система где-то хранит названия схем и приложения, которые поддерживают эти схемы. К большой радости iOS позволяет разработчикам добавлять в свои приложения поддержку схем и использовать эти схемы в других приложениях!

Вот наглядный тому пример, вызовем Skype или даже заставим Skype набрать номер телефона:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"skype://123456789"]];

Как видим, принцип один и тот же — изменилась только схема, теперь она называется skype!

Но как быть, если Skype не установлен на телефоне и магическую кнопку «Позвонить через Skype» показывать не нужно, если Skype не установлен? Или выдавать сообщение, что нужно установить Skype? Поддержку системой конкртеной схемы мы можем узнать так:

if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"skype://123456789"]] )

{
// Skype установлен!
}
else
{
// Skype не установлен!
}

Очевидно, что если мы хотим проверить поддержку другой схемы — нам нужно заменить «skype» на название другой схемы.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *