How to use session tokens correctly?

displayname :

I am using the Java client for the Google Places API:

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

The following is how I use the autocomplete API on my server:

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;
}

Now, at the time I am passing null as the sessionToken:

.placeAutocomplete(geoApiContext, query, null) 

mainly because I am not entirely sure how these are supposed to work.

I could create one token every 2 minutes and use that token no matter which user is currently typing.

So this would mean if two users search for "location" and "place", the incoming queries might look like this:

[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

now, I could use for all those requests the same token X and create a new one every one or two minutes but I don't know whether this is allowed and whether this affects billing.

The other way would be to create a cache per user which stores for user 1 and 2 a token X1 and X2 respectively. This solution would be a little more complex which is why I'd like to know whether the first solution would already work in the sense of I won't get billed for every single request.

Documentation

evan :

You should be using session tokens because they do affect billing. According to Google's documentation:

If the sessiontoken parameter is omitted, or if you reuse a session token, the session is charged as if no session token was provided.

Example of request that uses a sessiontoken:

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

Please create a new and unique session token for each Autocomplete session as suggested in the linked documentation.

To further clarify on sessions:

A session token is good for one user session and should not be used for more than one user session.

A session begins when the user starts typing a query, and concludes when they select a place (i.e. when a Place Details call is made). This is billed on the Autocomplete (included with Places Details) – Per Session SKU.

If this one user does not make a selection, the session will end after a short time out period (i.e. within a few minutes of the beginning of the session). This is billed on the Autocomplete without Places Details – Per Session SKU.

If you do not use a session token or it is deemed invalid, you will be billed on the Autocomplete – Per Request SKU.

Hope this helps.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=311570&siteId=1