13

我已经通过从这里采用 Apple 的 MKlocalSearch 示例代码中的大部分概念来完成了一个实现

目前对于自动完成,每次用户在搜索栏中输入时,我都会在我指定的位置发送一个新请求:

MkLocalSearchRequest.naturalLanguageQuery = searchBar.text
MkLocalSearchRequest.region = userlocation.region

但与 Apple 的默认地图应用程序相比,我从服务器得到完全不同的响应,如下图所示

我的应用 苹果地图应用

然后我捕获流量并发现我的请求转到https://gsp-ssl.ls.apple.com/search.arpc而 Apple 转到 https://gsp-ssl.ls.apple.com/auto_complete.arpc

有没有办法调整MkLocalSearchRequest以获得相同的响应对象集?

4

3 回答 3

8

MkLocalSearchRequest 不会对您的搜索字符串执行自动完成,可能是因为 Apple 希望限制来自 3rd 方应用程序的请求数量。

理论上,您可以对https://gsp-ssl.ls.apple.com/auto_complete.arpc的请求和响应进行反向工程,然后自己执行这些请求,根本不使用 MkLocalSearchRequest。但这可能会导致您的应用在 App Store 上被拒绝。

于 2014-05-10T12:57:52.527 回答
5

@TypingPanda - 我没有足够的分数直接发表评论,但是:小心使用 Google 地方 API!尽管可能不是立即显而易见,但 Google 的条款和条件规定,Google 位置数据的任何视觉表示都需要出现在 Google 地图上。希望一切顺利!

于 2014-11-05T02:14:35.140 回答
2

从 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;
于 2017-04-14T19:48:35.530 回答