【问题标题】:Google Places Autocomplete (included with Places Details) SKU is not getting triggered while using session tokensGoogle Places Autocomplete(包含在 Places 详细信息中)在使用会话令牌时未触发 SKU
【发布时间】:2018-11-16 21:45:09
【问题描述】:

我正在向 Google 地方自动填充和详细信息 API 发出请求。对于这两者,我都使用会话令牌免费使用自动完成 api,但我在 Google 报告中没有看到 Autocomplete (included with Places Details) SKU。我一周前开始使用它,我看到的只是SKU: Autocomplete without Places Details – Per Session。

在我的代码中,我在向 details api 发出请求后生成一个新的版本 4 UUID 兼容会话令牌。我正在遵循文档中的指导方针:

所以我正在做那件事。但我在报告中没有看到Autocomplete (included with Place Details)。我确信已经打了很多电话。任何想法为什么会发生这种情况?

注意:我使用place_id 参数代替placeid 进行详细调用,这也有效。我不认为这是原因,但无论如何......

我正在使用这个函数来生成会话令牌:

var UUID = (function() {
  var self = {};
  var lut = [];
  for (var i=0; i<256; i++) { lut[i] = (i<16?'0':'')+(i).toString(16); }
  self.generate = function() {
      var d0 = Math.random()*0xffffffff|0;
      var d1 = Math.random()*0xffffffff|0;
      var d2 = Math.random()*0xffffffff|0;
      var d3 = Math.random()*0xffffffff|0;
      return lut[d0&0xff]+lut[d0>>8&0xff]+lut[d0>>16&0xff]+lut[d0>>24&0xff]+'-'+
        lut[d1&0xff]+lut[d1>>8&0xff]+'-'+lut[d1>>16&0x0f|0x40]+lut[d1>>24&0xff]+'-'+
        lut[d2&0x3f|0x80]+lut[d2>>8&0xff]+'-'+lut[d2>>16&0xff]+lut[d2>>24&0xff]+
        lut[d3&0xff]+lut[d3>>8&0xff]+lut[d3>>16&0xff]+lut[d3>>24&0xff];
  }
  return self;
})();

它以如下格式输出一个字符串:a28cf301-d8fd-4ebd-ac25-a94a37113b6c。

我正在使用传单控件发出请求。

每次输入字母时都会调用以下函数:

// Places Autocomplete call
autocomplete: function(e) {
    var mapCenter = this._map.getCenter();
    var url = this.options.url + '/autocomplete?' +
        'input=' + this.input.value + '&' +
        'location=' + mapCenter.lat + ',' + mapCenter.lng;

    if (this.options.useSessions) {
        url += '&sessiontoken=' + this.sessionToken;
    }

    var geocoder = this;

    $.get(url, function(data, status) {
        if (data === undefined || data.status !== 'OK') {
            return;
        }

        // Use predictions to populate a list
    });
},

该函数使用预测填充列表并将点击事件侦听器添加到每个列表项。当点击一个项目时,会调用以下函数。

// Place Details request
focusSelected: function(e) {
    var url = this.options.url + '/details?' +
        'place_id=' + e.target.place_id;

    if (this.options.useSessions) {
        url += '&sessiontoken=' + this.sessionToken;
        this.sessionToken = UUID.generate(); // This creates a new token
    }

    var geocoder = this;
    $.get(url, function(data, status) {
        if (data === undefined || data.status !== 'OK') {
            return;
        }

        // Use result

    });
},

我还在每次调用中设置 API 密钥。别介意。

【问题讨论】:

    标签: web-services google-places-api


    【解决方案1】:

    如果您在会话开始后几分钟内未完成Places Details 请求,您将看到Autocomplete without Places Details – Per Session。

    文档

    https://developers.google.com/maps/billing/understanding-cost-of-use#ac-no-details-session

    【讨论】:

    • 在多次自动完成请求后,我多次请求地点详细信息。
    • 您是否确保对所有请求使用相同的会话 ID?或者您是否正在生成一个新的会话 ID?
    • 我一次只使用一个令牌。我用令牌 ABC 做了几个自动完成请求,然后用相同的令牌 ABC 做了一个地方的详细信息。每次我完成一个地点详细信息请求时,我都会为下一个自动完成或详细信息请求生成一个新的会话令牌。
    • 我添加了一些代码。如果您还需要什么,请告诉我
    • 我只是将您的代码放在一个演示中,看起来它应该可以正常运行。您是否检查了网络请求以验证正在发送正确的会话令牌?另外,您是否尝试过对您提供的屏幕截图中的 3 个请求进行硬编码以查看它是否有效?
    猜你喜欢
    • 2017-12-30
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 2012-03-20
    • 2016-07-13
    • 2016-11-27
    相关资源
    最近更新 更多