Как сделать автозаполнение локального поиска, как это делает приложение для карты Apple?
Я сделал реализацию, приняв большую часть концепции из примера кода Apple из MKlocalSearch из здесь
В настоящий момент для автоматического завершения каждый раз, когда пользователь вводит текст в строке поиска, я отправляю новый запрос, где я указал:
MkLocalSearchRequest.naturalLanguageQuery = searchBar.text
MkLocalSearchRequest.region = userlocation.region
Но я получаю совершенно другой набор ответов от sever по сравнению с приложением Apple по умолчанию, как показано на рисунке ниже
![My app]()
![Apple Maps app]()
Затем я фиксирую трафик и обнаруживаю, что мой запрос отправляется https://gsp-ssl.ls.apple.com/search.arpc, в то время как Apple переходит к
https://gsp-ssl.ls.apple.com/auto_complete.arpc
Есть ли способ настроить MkLocalSearchRequest
, чтобы получить тот же набор объектов ответа?
Ответы
Ответ 1
MkLocalSearchRequest не будет выполнять автоматическое завершение в вашей строке поиска, возможно, потому, что Apple хочет ограничить количество запросов от сторонних приложений.
В теории вы можете перепроектировать запросы и ответы на https://gsp-ssl.ls.apple.com/auto_complete.arpc, а затем выполнить эти запросы самостоятельно, не используя MkLocalSearchRequest. Но это, вероятно, приведет к тому, что ваше приложение будет отклонено в App Store.
Ответ 2
@TypingPanda - у меня недостаточно очков для комментариев, но: остерегайтесь использования API-интерфейсов Google! Хотя, возможно, и не сразу очевидно, что в условиях Google условия визуального представления данных Google должны происходить на карте Google. Надеюсь, что все получится!
Ответ 3
Так как iOS 9.3 Apple предоставила MKLocalSearchCompleter.
Объект MKLocalSearchCompleter принимает частичную строку поиска и генерирует список потенциальных завершений. Вы используете объект-объект поиска для получения предложений автозаполнения для своих собственных элементов управления на основе карты.
Что класс, который использует https://gsp-ssl.ls.apple.com/auto_complete.arpc
Он имеет довольно похожий синтаксис с MkLocalSearchRequest
:
MKLocalSearchCompleter.queryFragment = searchBar.text
MKLocalSearchCompleter.region = userlocation.region
Но для результатов вам нужно будет слушать методы делегата:
- (void)completerDidUpdateResults:(MKLocalSearchCompleter *)completer;