Google地方AutoComplete小部件正在为每个请求生成新的会话密钥

Mah*_*ani 6 javascript google-maps google-maps-api-3 google-places-api google-places-autocomplete

最近,Google更新了一些结算政策,作为他们为自动填充请求引入了SessionTokens的一部分.

作为其中一部分,同一会话中的每个请求都将在请求中发送相同的令牌,如果我们使用Google API提供的自动完成小部件,则会自动发送.

但是,我看到为同一会话中的每个请求生成了不同的令牌.我错过了什么,请指导我.这是样本的插件,在那里我观察到为每次击键生成的不同令牌.

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

Kei*_*ell 8

页面的我的代码

```

<!-- 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> 
Run Code Online (Sandbox Code Playgroud)

```

会话令牌澄清

根据Google文档(始终在页面底部以“警告文字”显示)... https://developers.google.com/maps/documentation/javascript/places-autocomplete

警告:请确保为每个新会话传递唯一的会话令牌。对一个以上的会话使用相同的令牌将导致对每个请求单独计费。请注意,“自动完成小部件”会自动处理会话(您无需执行其他任何操作)。现在,让我们进入基本的Javascript示例。

这可能有点令人困惑,只是因为您尝试了解Google文档的名称以及这些内容,并且可能是因为您以一种方式进行操作,然后突然老板或客户或其他人要求您使用Sessions / Session代币代替。如果您不这样做,new google.maps.places.Autocomplete()而是AutocompleteServices使用“自动完成小部件”。自动完成小部件将自行处理会话/会话令牌。

证明给我看!

我信任google和google docs,但是网上对此有很多困惑。因此,除了一个月后得到帐单外,我还想证明。仅供参考-Google Clound平台控制台(https://console.cloud.google.com/google/maps-apis?pli=1)中的帐单将立即向您显示,并将佐证以下内容。

查看开发工具中的Network活动,我们看到有一些自动完成服务的调用。我在这里没有使用“ AutocompleteService”功能,这是一个基本示例设置,与上面通过“ Autocomplete Widget”通过列出的回调方法相同new google.maps.places.Autocomplete()

当您转到页面时,可以首先看到对库的调用,以及下面的开发工具的第一张屏幕截图。接下来,我进行了搜索,该搜索有效。我开始输入1990年的基本地址,之后您会看到对API的4个请求。我输入的每个字符有1个请求/调用。这些请求名称均以“ AutocompleteServices.GetPredictions ...”开头,即使我没有在代码中使用AutocompleteServices。在后端,“自动完成小部件”正在使用“ AutocompeleteServices”并为您完成所有UI / UX工作以及功能,会话和令牌。这些在下面的开发工具屏幕截图1-3中。然后您会看到对“ PlaceServces.GetPlaceDetails”的第5个请求调用,这是我从下拉列表中选择的。这是下面的开发工具截图4。查看标题,对于这些请求中的每一个,我都会看到一些事情。首先,在底部圈出的是“令牌”。我知道我刚才说过,而Google Docs刚刚说过,“自动完成小部件”会处理会话令牌,并且敏锐的目光会看到,每个请求的“令牌”值都不同。它也不是“版本4 UUID”格式,这是Google推荐的,但这是一个不同的主题。标头中的“令牌”不是会话令牌。该文件已埋藏在Google文档中该文件的较早版本已有5年的文档中,但是已不再使用,并且已为每个请求自动设置该文件,并且不是会话令牌。因此,“会话令牌在哪里?” 你可能会问。
标头中以1、2等开头的其他项是传递的不同会话变量。在这种情况下,会话令牌为“ 20s”,后跟由“自动完成小部件”自动创建的版本4 UUID。敏锐的眼睛也会注意到,下面的3个屏幕截图是相同的。页面刷新后,我有第五张屏幕截图,显示会话令牌已更改。您可以在我的代码中看到我没有指定这些内容,但是因为我使用的是“自动完成小部件”

开发工具1

DevTools_Call1

DevTools_Call2

DevTools_Call3

DevTools_Call4 DevTools_Call5

  • 好的!我也对此感到困惑。只有一个问题:根据计费页面 (https://cloud.google.com/maps-platform/pricing/sheet/),自动完成功能应包含在每个会话的地点详细信息中。自动完成请求和 getplacedetails 中的令牌不应该相同吗? (2认同)

xom*_*ena 6

恐怕您在请求中可以看到的令牌参数不是场所自动完成会话令牌。甚至在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 Maps技术支持的使用情况


小智 -3

如果您使用 google.maps.places.Autocomplete(input, options); 它会自动添加会话令牌。

在您的 pluker 示例中,没有自动完成功能,但有新的 google.maps.places.SearchBox

  • 您好,我知道它看起来很奇怪,但这不是会话令牌,请打开您浏览器的开发工具并检查您的请求。您传递给自动完成的值不会作为键/值对发送,而仅作为键发送,因此如果您输入“Syd”,则会有一个以 1 开头的键,因此会有 1sSyd 在 sessionToken 的情况下,它是一个以 ' 开头的键20 秒,请注意它在自动完成期间不会改变 (4认同)
  • 我可以确认使用 `map.places.Autocomplete(input, options)` 也会在每个请求的 url 中生成一个新令牌。`maps.googleapis.com/maps/api/place/js/AutocompletionService.GetPredictions?1sh...&amp;token=31735`、`maps.googleapis.com/maps/api/place/js/AutocompletionService.GetPredictions?1shu.. .&amp;token=42012`, `maps.googleapis.com/maps/api/place/js/AutocompletionService.GetPredictions?1shum...&amp;token=123232` (3认同)
  • 即使使用“map.places.Autocomplete”,它也会为每个请求生成不同的令牌。有人可以帮忙吗? (2认同)