Civil &: строительная инженерия
Использование API Ios Core Spotlight для включения поиска контента в ваше приложение
Table of Contents
Введение
Современные мобильные пользователи ожидают мгновенный доступ к информации. Интеграция системного поиска в ваше приложение iOS резко снижает трение, позволяя пользователям находить контент, не открывая ваше приложение первым. API Core Spotlight является встроенной структурой Apple для индексации контента приложения в глобальный поиск Spotlight устройства. Когда пользователь ищет с экрана Home или в поле поиска, проиндексированные элементы вашего приложения появляются вместе с результатами из Почты, Сообщений и других системных приложений. Эта статья предоставляет всеобъемлющее, готовое к производству руководство по внедрению Core Spotlight, охватывающее все, от базовой индексации до глубокой индексации и настройки производительности.
Понимание основного внимания и его преимуществ
Core Spotlight - это легкая, дружественная к конфиденциальности система индексации. Она полностью работает на устройстве - никакие данные не покидают телефон пользователя, если вы явно не используете CloudKit. Это делает ее идеальной для личного контента, такого как заметки, контакты, документы или любые пользовательские данные. Основные преимущества включают:
- Повышенное взаимодействие — пользователи обнаруживают контент, который они могли забыть, что увеличивает повторное использование.
- Безэкранная навигация — Нажатие на результат поиска может открыть ваше приложение непосредственно на соответствующий экран.
- Оффлайн-возможности — Индексированные элементы остаются доступными для поиска даже без подключения к Интернету.
- Низкая стоимость реализации — API небольшой, хорошо документированный и легко интегрируется с существующими моделями данных.
Core Spotlight работает вместе с индексацией NSUserActivity, но для статического или часто обновляемого контента прямая индексация CSSearchableItem дает вам более тонкий контроль.
Предпосылки и настройка
Перед написанием кода убедитесь, что ваш проект настроен правильно:
- Ваше приложение должно быть нацелено на iOS 9 или более позднюю версию (API дебютировал с iOS 9).
- Включить Способность Core Spotlight в Xcode — в соответствии с Сигнатура и усилитель; Возможности добавить право «Core Spotlight».
- Импортировать Core Spotlight Framework и MobileCoreServices (для идентификаторов типов): и .
Не требуется дополнительная конфигурация сервера или разрешение пользователя. Индексирование происходит асинхронно в фоновом режиме.
Создание и индексация поисковых элементов
Ядром Core Spotlight является объект . Каждый элемент состоит из:
- Уникальный идентификатор (например, ) — используется позже для обработки выбора или обновлений.
- Факультативный идентификатор домена — связанные с группами элементы (например, ).
- — описывает содержание с такими свойствами, как , , , и более.
Вот полный пример Swift, который индексирует одну заметку:
import CoreSpotlight
import MobileCoreServices
func indexNote(note: Note) {
let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
attributeSet.title = note.title
attributeSet.contentDescription = note.body
attributeSet.keywords = [note.title] + note.tags
if let imageData = note.thumbnail?.pngData() {
attributeSet.thumbnailData = imageData
}
let item = CSSearchableItem(
uniqueIdentifier: "com.yourapp.note.\(note.id)",
domainIdentifier: "com.yourapp.notes",
attributeSet: attributeSet
)
// Optionally set expiration date (default is one month)
// item.expirationDate = Date.distantFuture
CSSearchableIndex.default().indexSearchableItems([item]) { error in
if let error = error {
print("Indexing error: \(error.localizedDescription)")
} else {
print("Note indexed successfully.")
}
}
}
Атрибут Набор Свойств
наследует от и предлагает десятки свойств. Для большинства приложений важны следующие:
- — короткий, описательный текст, который появляется заметно.
- — более длинный фрагмент, показанный ниже заголовка.
- — массив для альтернативных поисковых терминов.
- или — визуальный предварительный просмотр.
- — Связывание элементов вместе (например, родительские заметки).
Для медиаконтента используйте свойства типа, такие как , или .
Обновление и удаление индексированного контента
Когда содержимое вашего приложения изменяется, вы должны поддерживать синхронизацию индекса. Используйте те же методы :
Обновление пункта
Позвоните с тем же уникальным идентификатором - API автоматически заменяет старую запись.
Удаление пунктов
Используйте или , чтобы удалить устаревшее содержимое:
CSSearchableIndex.default().deleteSearchableItems(withIdentifiers: ["com.yourapp.note.123"]) { error in
// handle
}
Эффективны пакетные операции: передайте массивы или . Для полной сброса используйте (редко требуется).
Обработка активности пользователей и глубокие ссылки
Когда пользователь нажимает на результат Spotlight, ваше приложение получает вызов через продолжение . Внедрите следующий метод делегирования в или :
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == CSSearchableItemActionType {
if let userInfo = userActivity.userInfo,
let identifier = userInfo[CSSearchableItemActivityIdentifier] as? String {
// Navigate to the item with this identifier
navigateToContent(identifier: identifier)
return true
}
}
return false
}
Восстановительное государство
Для более плавного взаимодействия также реализуйте , чтобы показать состояние загрузки. В приложениях на основе сцены (iOS 13+) используйте метод .
Глубокая связь с NSU-активностью
Core Spotlight также работает с механизмом . Если вы уже индексируете деятельность через , вы можете добавить флаг . Однако для мелкозернистого контроля над названиями и описаниями используйте напрямую.
Лучшие практики для эффективной индексации
Следуя этим рекомендациям, ваш проиндексированный контент остается актуальным и эффективным:
1. Индекс только осмысленного контента
Не индексируйте каждый крошечный фрагмент данных. Сосредоточьтесь на элементах, которые пользователи, вероятно, будут искать: последние документы, страницы с высокой ценностью или закладки.
2. Установить правильные даты истечения срока действия
По умолчанию, элементы истекают через один месяц. Для статического контента, установите . Для чувствительных ко времени данных (например, напоминания о событиях) используйте реалистичную дату.
3.Используйте идентификаторы домена мудро
Идентификаторы домена позволяют удалять все элементы из группы сразу. Например, если пользователь удаляет папку, позвоните .
4.Предоставьте значимые ключевые слова
Включите синонимы, распространенные орфографические ошибки и альтернативные имена. Избегайте перенасыщения; 5-10 хорошо подобранных ключевых слов достаточно.
5. Избегайте индексации дублированного контента
Если вы дублируете элементы (например, один и тот же заголовок в разных доменах), пользователи видят запутанные результаты.
6. Батч-операции для обновлений Bulk
При синхронизации многих элементов (например, после восстановления облака) пакетируйте их в массивы 50-100, чтобы избежать блокировки основного потока. Используйте с массивом, а не с несколькими одиночными вызовами.
Производительность и батарейные соображения
Core Spotlight работает с низкоприоритетным фоновым процессом, но плохая реализация может истощить производительность батареи или ухудшить работу системы:
- Ограничить частоту повторного индексирования — только при изменении данных, а не при каждом запуске приложения.
- Перехват больших операций — Используйте и (доступно на ) для атомных обновлений.
- Избегать тяжелых изображений — должен быть небольшим (например, 64×64 точки, сжатый JPEG). Большие изображения увеличивают давление памяти.
- Использовать индекс по умолчанию — достаточно практически для всех приложений.
В документации Apple Core Spotlight подчеркивается, что индексацию следует рассматривать как «огонь и забудь» — не дожидайтесь синхронно завершения обратных вызовов на основной поток.
Тестирование интеграции Core Spotlight
Отладка результатов Spotlight может быть сложной, потому что они не всегда появляются сразу.
- Тестирование симулятора — Используйте симулятор iOS (iOS 15 или более поздней версии). После индексации подождите несколько секунд, затем вытяните экран Home для поиска.
- Тестирование устройств — Всегда тестируйте на физическом устройстве. Индексация прожекторов ведёт себя более агрессивно на реальном оборудовании.
- Сброс индекса — Используйте приложение Настройки: Общий → Поиск в центре внимания → переключите приложение и выключите.
- Проверить удаление — После удаления элемента убедитесь, что старый результат больше не появляется. Иногда система кэширует результаты; дайте ему до 30 секунд.
- Проверить консоль отладки — Включить ведение журнала, пройдя в аргументах схемы Xcode.
Полезным ресурсом является WWDC 2015 «Introducing Core Spotlight», который охватывает основополагающие концепции, все еще применимые сегодня.
Заключение
API Core Spotlight - это надежный, недостаточно используемый инструмент, который может изменить то, как пользователи взаимодействуют с вашим приложением. Добавляя релевантный, современный контент в поисковый индекс системы, вы обеспечиваете без трения путь от поиска к контенту - повышая вовлеченность и удержание. Начните с малого: сначала проиндексируйте свой самый важный контент, тщательно проверяйте, а затем расширяйте, чтобы покрыть вторичные элементы. Не забудьте поддерживать чистоту своего индекса, последовательно использовать уникальные идентификаторы и изящно обрабатывать обратные вызовы активности пользователей. С шагами, изложенными в этой статье, вы готовы предоставить первоклассный опыт поиска, который кажется родным для iOS.
Для дальнейшего чтения, обратитесь к официальному Основной Справочник по рамкам прожектора и Руководство по программированию поиска приложений .