11

最近,谷歌更新了一些计费政策,作为他们为自动完成请求引入 SessionTokens 的一部分。

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

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

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

3 回答 3

30

我的页面代码

    <div class="searchField">
        <input id="searchLocation" name="searchLocation" type="text" placeholder="Enter an Address">
    </div>
    <!-- more code.... -->

    <!-- 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> 
   </script>

会话令牌说明

根据谷歌文档(一直在页面底部的“警告文本”中)...... https://developers.google.com/maps/documentation/javascript/places-autocomplete

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

这可能有点令人困惑,只是因为你试图进入谷歌文档的命名法以及这些东西的含义,可能是因为你以一种方式做这件事,突然你的老板或客户或其他人要求你使用 Sessions/Session代币。如果您这样做new google.maps.places.Autocomplete()而不是AutocompleteServices按照这些思路进行操作,则您正在使用“自动完成小部件”。自动完成小部件将自己处理会话/会话令牌。

证明给我看!

我相信谷歌和谷歌开发者文档关于他们自己的产品以及他们如何/做什么,但网络上有很多关于这一点的困惑。所以我想要证明,除了一个月后收到账单。仅供参考 - Google Cloud Platform Console ( https://console.cloud.google.com/google/maps-apis?pli=1 ) 中的计费将几乎立即向您显示这一点,并将证实以下和以上的内容。

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

当你进入页面时,你可以首先看到对库的调用,下面是 Dev Tools 的第一个截图。
接下来我做了一个搜索,它有效。我开始输入 1990 年的基本地址,之后您可以看到向 ​​API 发出的 4 个请求。我输入的每个字符都有 1 个请求/调用。这些请求名称中的每一个都以“AutocompleteServices.GetPredictions...”开头,即使我没有在我的代码中使用 AutocompleteServices。在后端,“自动完成小部件”使用“自动完成服务”并为您完成所有 UI/UX 工作以及功能、会话和令牌。这些在下面的开发工具屏幕截图 #1-#3 中。

然后您会看到对“PlaceServces.GetPlaceDetails”的第 5 次请求调用,这是我从下拉列表中选择的时候。这是下面的开发工具屏幕截图#4。查看标题,对于每个请求,我看到了一些东西。在底部圈出的第一件事是“令牌”。我知道我刚刚说过,Google 文档刚刚说过“自动完成小部件”处理会话令牌,敏锐的眼睛会看到这个“令牌”值对于每个请求都是不同的。它也不是谷歌推荐的“版本 4 UUID”格式,但这是一个不同的主题。标题中的这个“令牌”,不是会话令牌。这隐藏在 Google Docs 上此版本的先前版本的 5 年前的文档中,但这不再使用,并且为每个请求自动设置,而不是会话令牌。所以,“那么会话令牌在哪里?” 你可能会问。

标头中以 1s、2s 等开头的其他项是传递的不同会话变量。在这种情况下,会话令牌是“20s”,后跟“自动完成小部件”自动创建的版本 4 UUID。敏锐的眼睛还会注意到,对于下面的 3 个屏幕截图,它们是相同的。页面刷新后,我有第五个屏幕截图,显示会话令牌已更改。您可以在我的代码中看到我没有指定这些内容,但是因为我使用的是“自动完成小部件”,所以它们是为我完成的。

开发工具1

DevTools_Call1

DevTools_Call2

DevTools_Call3

DevTools_Call4 DevTools_Call5

于 2018-12-06T16:15:20.120 回答
10

恐怕您在请求中看到的令牌参数不是地点自动完成会话令牌。这个参数甚至在谷歌地图平台改变之前就已经存在了。我不知道谷歌如何管理处理自动完成会话令牌,可能他们在服务器端处理它们。

该文档指出自动完成小部件已实现自动会话令牌。

自动完成(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

在此报告中,您将看到用于对地点自动完成请求进行计费的方法。查看 Product 列所在的行,Places APIResource 列将显示用于计费的方法Autocomplete - Per RequestAutocomplete - Per Session.

在此处输入图像描述

如果您使用带有自动会话的地方自动完成小部件,但此报告仅显示Autocomplete - Per Request通过https://console.cloud.google.com/google/maps-apis/support联系 Google 地图技术支持的使用情况

于 2018-08-23T18:50:41.943 回答
-3

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

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

于 2018-08-14T08:12:37.537 回答