Модуль React Native для iOS, предоставляющий функции поиска Spotlight. Это позволяет вам индексировать контент из вашего приложения React Native, чтобы он появлялся в поисковом индексе Spotlight устройства iOS, что потенциально увеличивает популярность вашего приложения.
С пряжей (рекомендуется): $ yarn add react-native-spotlight-search
Или с помощью NPM: $ npm install react-native-spotlight-search --save
Этот пакет нельзя использовать в приложении Expo Go, поскольку для него требуется собственный собственный код.
После установки этого пакета npm добавьте плагин конфигурации в массив plugins
вашего app.json
или app.config.js
:
{
"expo" : {
"plugins" : [ " react-native-spotlight-search " ]
}
}
Затем перестройте приложение, как описано в руководстве «Добавление собственного собственного кода».
Автоматическое связывание или вручную ниже
react-native link react-native-spotlight-search
или вручную ниже
Просто добавьте RCTSpotlightSearch.xcodeproj
в библиотеки и добавьте libRCTSpotlightSearch.a
для связи двоичного файла с библиотеками в разделе «Фазы сборки» . Дополнительную информацию и снимки экрана о том, как это сделать, можно найти в документации React Native.
Если вы хотите иметь возможность обрабатывать обратные вызовы, связанные с элементом поиска, вам необходимо добавить следующий код в файл AppDelegate:
# import " RCTSpotlightSearch.h "
- ( BOOL )application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)( NSArray * _Nullable))restorationHandler {
[RCTSpotlightSearch handleContinueUserActivity: userActivity];
return YES ;
}
Если Xcode жалуется на невозможность найти файл заголовка, убедитесь, что поиск заголовка вашего проекта включает следующее:
$(SRCROOT)/../node_modules/react-native-spotlight-search
Так:
Сначала импортируйте модуль:
import SpotlightSearch from "react-native-spotlight-search" ;
Вы можете добавить массив элементов:
SpotlightSearch . indexItems ( [
{
title : "Strawberry" ,
contentDescription : "A sweet and juicy fruit." ,
uniqueIdentifier : "1" ,
domain : "fruit" ,
thumbnailName : "strawberry" ,
} ,
{
title : "Kiwi" ,
contentDescription : "Not a type of bird." ,
uniqueIdentifier : "2" ,
domain : "fruit" ,
thumbnailName : "kiwi" ,
} ,
] ) ;
Или отдельные предметы:
SpotlightSearch . indexItem ( {
title : "Strawberry" ,
contentDescription : "A sweet and juicy fruit." ,
uniqueIdentifier : "1" ,
thumbnailName : "strawberry" ,
} ) ;
Свойство | Описание | Тип | Необходимый |
---|---|---|---|
title | Название элемента поиска. | string | Да |
contentDescription | Описание, которое появляется под заголовком в результатах поиска. | string | Нет |
uniqueIdentifier | Уникальный и стабильный идентификатор. Используется для обозначения элемента. | string | Да |
domain | Строка для группировки связанных элементов удобным способом. Не отображается пользователю. | string | Да |
thumbnailName | Имя локального файла/ключ к миниатюре изображения. См. примечание об миниатюрах. | string | Нет |
thumbnailData | Строковое представление миниатюры изображения в формате Base64. См. примечание об миниатюрах. | string | Нет |
keywords | Массив ключевых слов, которые можно использовать для информирования поискового индекса. Не виден пользователю. | [string] | Нет |
Просто используйте тот же метод, что и при добавлении элементов. Обязательно используйте один и тот же ключ при индексировании элемента, чтобы любые новые изменения метаданных были отражены в индексе Spotlight.
Элементы можно удалить по идентификатору:
SpotlightSearch . deleteItemsWithIdentifiers ( [ "1" , "2" ] ) ;
Или по домену:
SpotlightSearch . deleteItemsInDomains ( [ "fruit" ] ) ;
Альтернативно вы можете удалить все элементы, проиндексированные вашим приложением:
SpotlightSearch . deleteAllItems ( ) ;
Все методы индексирования и удаления API являются асинхронными и возвращают обещания. Вы можете связать такие вещи:
SpotlightSearch . deleteAllItems ( ) . then ( ( ) => {
SpotlightSearch . indexItem ( {
title : "Strawberry" ,
contentDescription : "A sweet and juicy fruit." ,
uniqueIdentifier : "1" ,
thumbnailName : "strawberry" ,
} ) ;
} ) ;
Вы можете добавить собственный обработчик, который будет вызываться в случае, если пользователь нажимает на один из элементов поиска в результатах Spotlight:
SpotlightSearch . searchItemTapped ( ( uniqueIdentifier ) => {
alert ( `You tapped on ${ uniqueIdentifier } !` ) ;
} ) ;
При желании, если вы хотите захватить элемент поиска, который был использован для открытия приложения (возможно, прослушиватель был установлен после запуска события):
SpotlightSearch . getInitialSearchItem ( ) . then ( ( uniqueIdentifier ) => {
alert ( `You tapped on ${ uniqueIdentifier } and opened the app!` ) ;
} ) ;
// example in a useEffect with listener cleanup
useEffect ( ( ) => {
const spotlightListener = SpotlightSearch . searchItemTapped ( ( uniqueIdentifier ) => {
alert ( `You tapped on ${ uniqueIdentifier } and opened the app!` ) ;
} )
return ( ) => {
// cleanup listener
spotlightListener . remove ( )
}
} , [ ] )
Параметром будет uniqueIdentifier
, с помощью которого был проиндексирован элемент. Вы можете использовать это для поиска элемента и отображения информации о нем, например, перейдя на соответствующую страницу в вашем приложении.
В настоящее время, чтобы использовать путь к изображению, он должен существовать локально на устройстве в папке ресурсов проекта. Это ограничение iOS, а не этой библиотеки.
Чтобы использовать изображения, которых нет в папке ресурсов (локальные или удаленные файлы), прочитайте их как base64 и включите строковое значение, используя свойство thumbnailData
.
Пиар приветствуются ❤️