Привет, Хабр!
В последнее время Яндекс изо всех сил пытается испортить свои мобильные приложения, превращая их в «суперапп», будь это слово неладно. И одно из двух приложений компании, для которых такое направление развития наиболее заметно — это такси.
Не так давно его переименовали в «Яндекс Go», допихнув заодно внутрь Еду, Лавку, общественный транспорт, кучу рекламы. И здесь-то я вероломно, без объявления войны наткнулся на проблему, которая в конечном счёте послужила идеей для написания сией микростатьи.
У меня на iPhone довольно много разных приложений, и я привык запускать те, что не размещены на первой же странице, через системный поиск Spotlight — тот, что на домашнем экране iOS. Беда в том, что с упомянутым переименованием Яндексовского приложения из его названия исчезло собственно главное ключевое слово — «такси». Найти «Яндекс Go» по нему теперь стало невозможно. Затрудняюсь предположить, насколько от этого могли пострадать статистика запусков или доходы приложения, но как минимум UX точно оказался в проигрыше, причём довольно глупом. К слову, точно так же вы не сможете найти такси «Maxim» по ключевому слову «максим», а Delivery Club не ищется по запросу «еда».
В то же время быстрый анализ проблемы показывает, что приложение «VK» нормально обнаруживается по запросу «вконтакте», iOS предлагает запустить «Инвестиции» при вводе «тинькофф», а Okko весьма уместно всплывает для ключевых слов «кино», «око» и даже «иви». Как же этого удалось добиться? На самом деле, очень просто...
Ключевые слова для Spotlight легко добавляются, если вы уже поддерживаете Handoff, то есть бесшовное переключение юзера между разными своими Apple-устройствами, или Siri Shortcuts. Достаточно лишь проставить свойство keywords
для объекта NSUserActivity
, с которым вы и так работаете.
let activity = NSUserActivity(activityType: typeID)
activity.keywords = ["слово", "или даже ключевая фраза"]
Если же с Handoff и Siri вам по каким-то причинам не по пути либо хочется поддержать Spotlight на более серьёзном уровне, используйте CoreSpotlight
.
import CoreSpotlight
let attributes = CSSearchableItemAttributeSet(contentType: .application)
attributes.title = "Заказать пиццу"
attributes.contentDescription = "Доставим в течение получаса"
attributes.thumbnailData = image.pngData()
attributes.keywords = ["еда", "закуски", "кушать"]
let searchableItem = CSSearchableItem(uniqueIdentifier: "pizza", domainIdentifier: "readyMeal", attributeSet: attributes)
CSSearchableIndex.default().indexSearchableItems([searchableItem]) { _ -> Void in }
Если всё сделали правильно, при вводе одного из переданных нами операционной системе ключевых слов получим примерно следующий результат...
Учитывайте, что чем больше ключевых слов вы скормите iOS, тем ниже она будет ранжировать ваше приложение, поэтому подбирать теги нужно аккуратно и с умом, стараясь обойтись минимально достаточным их набором.
Разумеется, хороший разработчик не просто скопирует приведённый выше код, а правильно обработает ошибки, заполнит дополнительные атрибуты и прокинет воспользовавшегося поиском юзера не просто в приложение, а непосредственно на экран заказа пиццы. Однако поскольку в Яндексе, видимо, не слышали даже о самом факте существования Spotlight, мы на сегодня пока закруглимся.
Спасибо за внимание!