You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS中如何为GMSAutocompleteViewController添加GMSAutocompleteSessionToken?

GMSAutocompleteViewController 会话令牌(SessionToken)相关问题解答

是否有必要添加SessionToken?

有必要。Google Maps Places API要求同一搜索会话内的所有自动完成请求使用相同的GMSAutocompleteSessionToken,这么做有两个核心作用:

  • 避免重复计费:同一会话内的多次自动完成建议请求,API只会按一次有效查询计费
  • 优化搜索连贯性:API会基于会话上下文返回更贴合用户当前搜索意图的结果

是否可行添加SessionToken?

完全可行,只是官方文档描述不够直观。你可以通过控制器的placesClient属性直接设置会话令牌,示例代码如下:

Objective-C 示例

// 初始化自动完成控制器
GMSAutocompleteViewController *autocompleteVC = [[GMSAutocompleteViewController alloc] init];
// 生成新的会话令牌
GMSAutocompleteSessionToken *sessionToken = [GMSAutocompleteSessionToken token];
// 绑定到控制器的placesClient
autocompleteVC.placesClient.sessionToken = sessionToken;
// 后续设置代理、过滤条件等逻辑

Swift 示例

let autocompleteVC = GMSAutocompleteViewController()
let sessionToken = GMSAutocompleteSessionToken()
autocompleteVC.placesClient.sessionToken = sessionToken
// 后续设置代理、过滤条件等逻辑

注意:每次开启新的搜索流程时,要生成新的令牌,不要复用旧令牌。

能否匹配自定义自动完成实现的行为?

可以。只要正确设置了sessionToken,GMSAutocompleteViewController的请求逻辑和你手动实现的自定义自动完成完全对齐:

  • 同一会话内的连续请求会共享搜索上下文,返回的结果相关性一致
  • 遵循相同的API计费规则,不会出现额外扣费
  • 内置控制器会自动处理会话的生命周期(比如用户取消搜索时,令牌会自动失效)

如果发现结果有差异,检查两者是否使用了相同的会话令牌、相同的搜索过滤条件(比如位置偏置、地点类型限制)即可。

内容的提问来源于stack exchange,提问作者nelsballs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:12:38