如何在Android/iOS的Places SDK中实现基于会话的Google Places Autocomplete
基于会话的Autocomplete在Android/iOS Places SDK中的实现方案
当然可以在Android和iOS的Places SDK中实现基于会话的Autocomplete功能,这正是Google Maps 6月11日生效的新定价规则里主推的成本优化方式——把用户一次完整搜索过程中的多次按键请求合并为一个会话计费,相比按单次按键请求计费能帮你更合理地控制支出。
什么是Autocomplete会话?
简单来说,一个会话就是用户从开始输入地点查询到选择结果/主动取消搜索的整个交互过程。在这个过程中,用户每输入一个字符触发的Autocomplete请求,只要绑定同一个会话token,就会被合并成一次会话计费。
Android端实现步骤
如果你用的是自定义搜索UI,需要手动管理会话token:
- 初始化Places客户端,创建专属的会话token
- 每次发起Autocomplete请求时携带这个token
- 会话结束(用户选结果/关闭搜索)后丢弃token,新搜索生成新token
代码示例(Kotlin):
// 初始化Places客户端 val placesClient = Places.createClient(context) // 为当前搜索会话生成新token val sessionToken = AutocompleteSessionToken.newInstance() // 构建Autocomplete请求并绑定token val request = FindAutocompletePredictionsRequest.builder() .setSessionToken(sessionToken) .setQuery("用户输入的实时内容") .setCountry("CN") // 可选:设置搜索国家范围 .build() // 发起请求并处理结果 placesClient.findAutocompletePredictions(request).addOnSuccessListener { response -> // 展示预测结果列表 response.autocompletePredictions.forEach { prediction -> println("预测结果:${prediction.getPrimaryText(null)}") } }.addOnFailureListener { exception -> // 处理请求错误 exception.printStackTrace() }
如果使用官方的AutocompleteSupportFragment UI组件,不需要手动处理token——组件会自动为每个搜索会话生成、管理token,默认就按会话计费,直接集成即可。
iOS端实现步骤
和Android逻辑一致,自定义UI需要手动管理token:
- 初始化
GMSPlacesClient,创建GMSAutocompleteSessionToken - 发起Autocomplete查询时传入该token
- 会话结束后销毁token,新搜索生成新token
代码示例(Swift):
// 初始化Places客户端 let placesClient = GMSPlacesClient.shared() // 为当前搜索会话生成新token let sessionToken = GMSAutocompleteSessionToken() // 设置搜索过滤条件(可选) let filter = GMSAutocompleteFilter() filter.country = "CN" // 发起带会话token的查询 placesClient.autocompleteQuery("用户输入的实时内容", bounds: nil, filter: filter, sessionToken: sessionToken) { results, error in guard let results = results else { print("请求错误:\(error?.localizedDescription ?? "未知错误")") return } // 遍历并展示预测结果 for result in results { print("预测结果:\(result.attributedFullText.string)") } }
如果使用官方的GMSAutocompleteViewController,同样无需手动处理token,组件默认已实现会话计费逻辑,直接使用即可。
关键注意事项
- 同一个会话的所有请求必须使用同一个token,否则会被判定为多个单独请求计费
- 每个新的搜索会话都要生成新的token,不要重复使用旧token
- 官方UI组件已经封装了会话管理,优先使用组件能减少手动实现的出错概率
新定价规则说明
6月11日生效的Google Maps新定价规则中,Autocomplete提供两种计费模式:
- 按键请求计费:用户每输入一个字符触发的请求单独计费
- 会话计费:将用户一次完整搜索过程中的所有请求合并为一个会话计费,成本更可控
内容的提问来源于stack exchange,提问作者Romina Liuzzi
相关产品推荐
相关产品推荐

