Модуль SearchApi
предоставляет вам общий интерфейс React Native для взаимодействия с API поиска iOS, Core Spotlight.
Дополнительную информацию об API поиска iOS см. на странице https://developer.apple.com/ios/search/.
npm install react-native-search-api --save
react-native link
В начало вашего AppDelegate.m
добавьте следующую строку:
# import " RCTSearchApiManager.h "
В вашей реализации AppDelegate добавьте следующее:
- ( BOOL )application:(UIApplication *)application continueUserActivity:( NSUserActivity *)userActivity restorationHandler:( void (^)( NSArray * _Nullable))restorationHandler {
return [RCTSearchApiManager application: application continueUserActivity: userActivity restorationHandler: restorationHandler];
}
Подпишитесь на события открытия элемента поиска в ваших компонентах следующим образом:
componentDidMount ( ) {
< ... >
SearchApi . addOnSpotlightItemOpenEventListener ( this . handleOnSpotlightItemOpenEventListener ) ;
SearchApi . addOnAppHistoryItemOpenEventListener ( this . handleOnAppHistoryItemOpenEventListener ) ;
}
Чтобы предотвратить утечку памяти, не забудьте отписаться:
componentWillUnmount ( ) {
< ... >
SearchApi . removeOnSpotlightItemOpenEventListener ( this . handleOnSpotlightItemOpenEventListener ) ;
SearchApi . removeOnAppHistoryItemOpenEventListener ( this . handleOnAppHistoryItemOpenEventListener )
}
Как правило, вас должно интересовать, было ли приложение запущено с помощью поиска, поэтому рассмотрите возможность использования следующих двух методов:
// For the spotlight item:
SearchApi . getInitialSpotlightItem ( ) . then ( result => {
if ( result ) {
console . log ( 'Started with a spotlight item!' )
}
} )
// For the app history item:
SearchApi . getInitialAppHistoryItem ( ) . then ( result => {
if ( result ) {
console . log ( 'Started with an app history item!' )
}
} )
Чтобы создать новый элемент Spotlight, используйте indexSpotlightItem
или indexSpotlightItems
:
SearchApi . indexSpotlightItem ( item ) . then ( result => {
console . log ( 'Success' ) ;
} ) . catch ( err => {
console . log ( 'Error: ' + err ) ;
} ) ;
Чтобы добавить новые элементы в историю приложения, используйте createUserActivity
:
SearchApi . indexAppHistoryItem ( item ) . then ( result => {
console . log ( 'Success' ) ;
that . setState ( { labelText : 'Success' } ) ;
} ) . catch ( err => {
console . log ( 'Error: ' + err ) ;
that . setState ( { labelText : ( 'Error: ' + err ) } ) ;
} ) ;
Параметры, которые могут указывать элементы, перечислены ниже:
Словари, передаваемые для создания элементов Spotlight и истории приложений, имеют некоторые общие и некоторые специальные ключи. Вот список всех возможных ключей.
title
: строкаНазвание предмета. Требуется для обоих типов элементов.
contentDescription
: строкаОписание предмета. Необязательный.
keywords
: МассивМассив ключевых слов, присвоенный искомому элементу. Необязательный.
thumbnail
: строка|int|объект Миниатюра, которая будет отображаться в результатах поиска. Тот же формат, что и source
в компоненте Image
. Необязательный.
Примеры:
var localItem = {
< ... > ,
thumbnail : require ( '/react-native/img/favicon.png' )
} ;
var remoteItem = {
< ... > ,
thumbnail : { uri : 'https://facebook.github.io/react-native/docs/assets/favicon.png' }
} ;
Пожалуйста, обратитесь к документации для более подробной информации.
uniqueIdentifier
: строкаУникальный идентификатор элемента Spotlight, передаваемый позже во время события открытия элемента. Необходимый.
domain
: строкаДомен для элемента внимания. Необязательный.
userInfo
: ОбъектСловарь, передаваемый позже во время события открытия элемента. Необходимый.
eligibleForPublicIndexing
: логическое значение Флаг, значение которого равно true
позволяет добавить элемент в общедоступный индекс. Необязательный.
expirationDate
: ДатаСрок действия элемента активности пользователя. Необязательный.
webpageURL
: строкаURL-адрес страницы, представляющей тот же контент на веб-сайте приложения.
© 2017 PresenceKit от Ombori AB