【问题标题】:How to use session tokens correctly?如何正确使用会话令牌?
【发布时间】:2019-12-11 22:16:20
【问题描述】:

我正在为 Google Places API 使用 Java 客户端:

<dependency>
    <groupId>com.google.maps</groupId>
    <artifactId>google-maps-services</artifactId>
    <version>0.9.1</version>
</dependency>

以下是我在服务器上使用自动完成 API 的方式:

public List<AutocompletePrediction> searchAddress(String query) {

    List<AutocompletePrediction> predictions = new ArrayList<>();

    try {
        AutocompletePrediction[] autocompletePredictions = PlacesApi
                .placeAutocomplete(geoApiContext, query, null) 

        predictions.addAll(Arrays.asList(autocompletePredictions));
    } catch (ApiException | InterruptedException | IOException e) {
        e.printStackTrace();
    }

    return predictions;
}

现在,当时我将null 传递为sessionToken

.placeAutocomplete(geoApiContext, query, null) 

主要是因为我不完全确定这些应该如何工作。

我可以每 2 分钟创建 一个 令牌,并且无论哪个用户当前正在输入,都可以使用该令牌。

所以这意味着如果两个用户搜索“位置”和“地点”,传入的查询可能如下所示:

[User 1] 1. lo
[User 2] 2. p
[User 1] 3. loca
[User 2] 4. plac
[User 1] 5. locat
[User 1] 6. location
[User 2] 7. place

现在,我可以对所有这些请求使用相同的令牌 X 并每隔一两分钟创建一个新令牌,但我不知道这是否允许以及这是否会影响计费。

另一种方法是为每个用户创建一个缓存,分别为用户12 存储令牌X1X2。这个解决方案会稍微复杂一点,这就是为什么我想知道第一个解决方案是否已经可以工作,因为我不会为每个请求都付费。

文档

【问题讨论】:

    标签: java google-maps google-places-api googleplacesautocomplete


    【解决方案1】:

    您应该使用会话令牌,因为它们确实会影响计费。根据Google's documentation

    如果sessiontoken 参数被省略,或者如果您重用会话 令牌,会话被计费,就好像没有提供会话令牌一样。

    使用会话令牌的请求示例:

    https://maps.googleapis.com/maps/api/place/autocomplete/json?input=1600+Amphitheatre&key=<API_KEY>&sessiontoken=1234567890
    

    请按照链接文档中的建议,为每个自动完成会话创建一个新的唯一会话令牌。

    进一步澄清会话:

    会话令牌适用于 一个 用户会话,不应使用 用于多个用户会话。

    会话在用户开始输入查询时开始,并在他们选择地点时结束(即当拨打Place Details 时)。这是在Autocomplete (included with Places Details) – Per Session SKU 上计费的。

    如果这个用户没有做出选择,会话将在很短的超时时间后结束(即在会话开始后的几分钟内)。这是在Autocomplete without Places Details – Per Session SKU 上计费的。

    如果您不使用会话令牌或它被视为无效,您将通过Autocomplete – Per Request SKU 付费。

    希望这会有所帮助。

    【讨论】:

    • 我不清楚“会话”的定义。这并不能真正回答我的问题,抱歉。
    • 抱歉,请参阅我上面的编辑以进行澄清。
    • 听着,您不认为如果您对 Google 文档的解释是正确的,那么实际上至少会在某个地方提到它吗?并且该文档不会明确地重复说您需要为每个用户会话创建一个新的会话令牌,否则您将按请求计费,没有例外?为了您自己的利益,您应该按照 Google 告诉您的方式实施会话,抛开您自己的意见和解释。看,即使谷歌从来没有发现你在滥用服务,唯一真正的问题是你为什么会这样?我认为你是个好人,所以不要这样做?
    • 嘿,你让我惊喜不已! :) 很高兴听到您将以正确的方式实现会话令牌。我相信你会比你想象的更快完成它。
    • 我可以被参数打动 :D
    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多