最近,Google更新了一些结算政策,作为其为自动完成请求引入SessionToken的一部分。
部分原因是,同一会话中的每个请求都将在请求中发送相同的令牌,如果我们使用Google API提供的AutoComplete小部件,则该请求是自动的。
但是,我看到在同一会话中为每个请求生成了一个不同的令牌。我什么都想念,请引导我。这是示例的pluker,我观察到每个击键都生成了不同的令牌。
var options = {
types: ['(cities)']
};
var searchBox = new google.maps.places.Autocomplete(input, options);
答案 0 :(得分:6)
页面的我的代码
```
<!-- footer -->
<script>
// initiate search area for autocomplete of places from Google Maps Street Addresses
function initAutocomplete() {
// define the search location box
var searchBox = $("#searchLocation")[0];
// initiate the autocomplete with the options on the search box
var autocomplete = new google.maps.places.Autocomplete(searchBox, options);
};
</script>
<script src="https://maps.googleapis.com/maps/api/js?libraries=places®ion=ca&language=en&key= [YOUR_API_KEY]&callback=initAutocomplete" async defer>
```
根据Google文档(始终在页面底部的“警告文字”中)... https://developers.google.com/maps/documentation/javascript/places-autocomplete
警告:确保为每个新会话传递唯一的会话令牌。 对多个会话使用相同的令牌将导致每次会话 请求单独计费。请注意,自动完成小部件 自动处理会话(您无需执行任何操作 额外)。现在,让我们深入研究基本的Javascript示例。
这可能有点令人困惑,只是因为您尝试了解Google文档的名称以及这些内容,并且可能是因为您以一种方式执行此操作,然后突然老板或客户或其他人要求您使用会话/会话令牌。
如果您执行new google.maps.places.Autocomplete()
而不是AutocompleteServices
或类似的操作,则使用的是“自动完成小部件”。
自动完成小部件将自行处理会话/会话令牌。
我信任google和google docs,但是网上对此有很多困惑。因此,除了一个月后得到帐单外,我还想证明。仅供参考-Google Clound Platform Console(https://console.cloud.google.com/google/maps-apis?pli=1)中的帐单将立即显示给您,并将佐证上下的内容。
查看开发工具中的Network活动,我们看到有一些自动完成服务的调用。
我没有在这里使用“ AutocompleteService”功能,这是一个基本示例设置,与上面通过“ new google.maps.places.Autocomplete()
使用“ Autocomplete Widget”使用“ Callback”列出的方式相同。
当您转到页面时,可以首先看到对库的调用,以及下面的开发工具的第一个屏幕截图。
接下来,我进行了搜索,该搜索成功了。我开始输入1990年的基本地址,之后您会看到对API的4个请求。我键入的每个字符有1个请求/调用。每个请求名称都以“ AutocompleteServices.GetPredictions ...”开头,即使我没有在代码中使用AutocompleteServices,也是如此。在后端,“自动完成小部件”正在使用“ AutocompeleteServices”并为您完成所有UI / UX工作以及功能,会话和令牌。这些在下面的开发工具屏幕截图1-3中。
然后您会看到对“ PlaceServces.GetPlaceDetails”的第5个请求调用,这是我从下拉列表中选择的。这是下面的开发工具截图4。
查看标题,对于这些请求中的每一个,我都会看到一些事情。
首先,在底部圈出的是“令牌”。我知道我刚才说过,而Google Docs刚刚说过,“自动完成小部件”将处理会话令牌,并且敏锐的目光将看到,每个请求的“令牌”值都不同。它也不是Google推荐的“版本4 UUID”格式,但这是一个不同的主题。标头中的“令牌” 不是会话令牌。该文件已被埋藏在Google Docs上较早的文档中已有5年历史的文档中,但是现在不再使用,它是为每个请求自动设置的,而不是Session令牌。
因此,“会话令牌在哪里?”你可能会问。
标头中以1、2等开头的其他项是传递的不同会话变量。在这种情况下,会话令牌为“ 20s”,后跟由“自动完成小部件”自动创建的版本4 UUID。敏锐的眼睛也会注意到,下面的3个屏幕截图是相同的。页面刷新后,我有第五张屏幕截图,显示会话令牌已更改。您可以在代码中看到我没有指定这些内容,但是因为我使用的是“自动完成小部件”,所以为我完成了这些操作。
答案 1 :(得分:4)
恐怕您在请求中可以看到的令牌参数不是场所自动完成会话令牌。甚至在Google Maps平台更改之前,该参数就存在。我不知道Google如何管理自动完成会话令牌,可能是它们在服务器端处理它们。
文档指出,自动完成小部件已实现了自动会话令牌。
自动完成功能(Web服务和JavaScript)和JavaScript自动完成小部件已更新为使用基于会话的计费。
注意:JavaScript自动完成小部件不需要更改代码,因为该小部件会自动为您管理会话。
来源:https://cloud.google.com/maps-platform/user-guide/pricing-changes/
为了确保我建议您在开发者控制台中查看您的帐单报告。
https://console.cloud.google.com/billing/unbilledinvoice?project=YOUR_PROJECT_ID&authuser=1
在此报告中,您将看到哪种方法用于对场所自动完成请求进行计费。看一下“产品”列为Places API
的行,“资源”列将显示使用哪种方法为Autocomplete - Per Request
或Autocomplete - Per Session
计费。
如果您将“自动填充”小部件与自动会话结合使用,但此报告仅显示Autocomplete - Per Request
通过https://console.cloud.google.com/google/maps-apis/support寻求Google地图技术支持的使用情况
答案 2 :(得分:-2)
如果您使用google.maps.places.Autocomplete(输入,选项);它将自动添加会话令牌。
在您的插件示例中,没有自动完成功能,而是新的google.maps.places.SearchBox