如何在Apple的原生地图应用程序中执行本地搜索自动完成功能?

时间:2014-02-06 01:27:42

标签: ios iphone mapkit mklocalsearch

我采用了来自here

的Apple的MKlocalSearch示例代码中的大部分概念来完成实现

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

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

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

My app Apple Maps app

然后我抓住了流量,发现我的请求在Apple转到https://gsp-ssl.ls.apple.com/search.arpc时转到了https://gsp-ssl.ls.apple.com/auto_complete.arpc {{3}}

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

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:5)

@TypingPanda - 我没有足够的积分直接评论但是:谨防使用Google Places API!虽然可能不是很明显,但Google的条款和条件规定Google的任何视觉表示都需要在Google地图上发布数据。希望一切顺利!

答案 2 :(得分:0)

自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;