如何正确使用会话令牌?

dis*_*ame 1 java google-maps google-places-api google-places-autocomplete

我将 Java 客户端用于 Google Places API:

<dependency>
    <groupId>com.google.maps</groupId>
    <artifactId>google-maps-services</artifactId>
    <version>0.9.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

以下是我在服务器上使用自动完成 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;
}
Run Code Online (Sandbox Code Playgroud)

现在,当时我传递nullsessionToken

.placeAutocomplete(geoApiContext, query, null) 
Run Code Online (Sandbox Code Playgroud)

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

我可以每 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
Run Code Online (Sandbox Code Playgroud)

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

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

文档

eva*_*van 6

您应该使用会话令牌,因为它们确实会影响计费。根据谷歌的文档

如果sessiontoken省略该参数,或者如果您重复使用会话令牌,则会话将按未提供会话令牌的方式收费。

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

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=1600+Amphitheatre&key=<API_KEY>&sessiontoken=1234567890
Run Code Online (Sandbox Code Playgroud)

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

进一步澄清会话:

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

会话在用户开始输入查询时开始,并在他们选择地点时结束(即,在进行地点详细信息调用时)。这在自动完成(包含在地点详细信息中)– 每会话 SKU上计费。

如果这个用户没有做出选择,会话将在短暂的超时时间后结束(即在会话开始的几分钟内)。这是在没有地点详细信息自动完成 - 每会话 SKU上计费的。

如果您不使用会话令牌或它被视为无效,您将按自动完成 – 每个请求 SKU 付费

希望这可以帮助。

  • 我可以被争论所感动:D (3认同)
  • 嘿,你让我感到惊喜!:) 很高兴听到您将以正确的方式实现会话令牌。我相信你会比你想象的更早完成它。 (2认同)