Google Places AutoComplete小部件会为每个请求生成一个新的会话密钥

时间:2018-08-07 13:44:40

标签: javascript google-maps google-maps-api-3 google-places-api googleplacesautocomplete

最近,Google更新了一些结算政策,作为其为自动完成请求引入SessionToken的一部分。

部分原因是,同一会话中的每个请求都将在请求中发送相同的令牌,如果我们使用Google API提供的AutoComplete小部件,则该请求是自动的。

但是,我看到在同一会话中为每个请求生成了一个不同的令牌。我什么都想念,请引导我。这是示例的pluker,我观察到每个击键都生成了不同的令牌。

var options = {
  types: ['(cities)']
};
  var searchBox = new google.maps.places.Autocomplete(input, options);

3 个答案:

答案 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&region=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个屏幕截图是相同的。页面刷新后,我有第五张屏幕截图,显示会话令牌已更改。您可以在代码中看到我没有指定这些内容,但是因为我使用的是“自动完成小部件”,所以为我完成了这些操作。

DevTools1

DevTools_Call1

DevTools_Call2

DevTools_Call3

DevTools_Call4 DevTools_Call5

答案 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 RequestAutocomplete - Per Session计费。

enter image description here

如果您将“自动填充”小部件与自动会话结合使用,但此报告仅显示Autocomplete - Per Request通过https://console.cloud.google.com/google/maps-apis/support寻求Google地图技术支持的使用情况

答案 2 :(得分:-2)

如果您使用google.maps.places.Autocomplete(输入,选项);它将自动添加会话令牌。

在您的插件示例中,没有自动完成功能,而是新的google.maps.places.SearchBox