รับโทเค็นการให้สิทธิ์
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
Consumer SDK ให้การให้สิทธิ์โดยใช้โทเค็นเว็บ JSON โทเค็นเว็บ JSON
(JWT) คือโทเค็นการให้สิทธิ์ที่ให้การอ้างสิทธิ์อย่างน้อย 1 รายการในบริการ
Consumer SDK ใช้โทเค็นเว็บ JSON ที่แอปพลิเคชันระบุเพื่อ
สื่อสารกับ Fleet Engine ดูรายละเอียดของโทเค็นที่เซิร์ฟเวอร์ Fleet Engine คาดหวังได้ที่โทเค็นเว็บ JSON
และออกโทเค็นเว็บ JSON
โทเค็นการให้สิทธิ์จะให้สิทธิ์เข้าถึงบริการ Fleet Engine ต่อไปนี้
TripService
- ให้สิทธิ์เข้าถึงรายละเอียดการเดินทางแก่ Consumer SDK ซึ่งรวมถึง
ตำแหน่งของยานพาหนะ เส้นทาง และเวลาถึงโดยประมาณ โทเค็นการให้สิทธิ์สำหรับบริการการเดินทาง
ต้องมีอ้างสิทธิ์ tripid:TRIP_ID
ในส่วนหัว authorization
ของโทเค็น
โดย TRIP_ID
คือรหัสการเดินทางของการเดินทางแบบออนดีมานด์ที่แชร์
VehicleService
- ให้ข้อมูลเกี่ยวกับ
ตำแหน่งโดยประมาณของยานพาหนะแก่ Consumer SDK เพื่อแสดงเลเยอร์ความหนาแน่นของยานพาหนะและ
ประมาณเวลาถึงโดยประมาณของจุดรับ เนื่องจาก Consumer SDK ใช้เฉพาะตำแหน่งโดยประมาณ โทเค็นการให้สิทธิ์สำหรับบริการยานพาหนะจึงไม่จำเป็นต้องมีvehicleid
อ้างสิทธิ์
โทเค็นคืออะไร
Fleet Engine กำหนดให้ใช้ JSON Web Token (JWT) สำหรับการเรียกเมธอด API
จากสภาพแวดล้อมที่มีความน่าเชื่อถือต่ำ ได้แก่ สมาร์ทโฟนและเบราว์เซอร์
JWT มาจากเซิร์ฟเวอร์ของคุณ มีการลงชื่อ เข้ารหัส และส่งไปยังไคลเอ็นต์
สำหรับการโต้ตอบกับเซิร์ฟเวอร์ในภายหลังจนกว่าจะหมดอายุหรือไม่ถูกต้องอีกต่อไป
รายละเอียดสำคัญ
ดูข้อมูลเพิ่มเติมเกี่ยวกับโทเค็นเว็บ JSON ได้ที่โทเค็นเว็บ JSON ในข้อควรทราบเกี่ยวกับ Fleet Engine
ไคลเอ็นต์จะรับโทเค็นได้อย่างไร
เมื่อคนขับหรือผู้บริโภคเข้าสู่ระบบแอปโดยใช้
ข้อมูลเข้าสู่ระบบการให้สิทธิ์ที่เหมาะสม การอัปเดตใดๆ ที่ออกให้อุปกรณ์นั้นจะต้องใช้
โทเค็นการให้สิทธิ์ที่เหมาะสม ซึ่งจะสื่อสารกับ Fleet Engine เกี่ยวกับ
สิทธิ์ของแอป
ในฐานะนักพัฒนาแอป การติดตั้งใช้งานฝั่งไคลเอ็นต์ควรมีความสามารถในการทำสิ่งต่อไปนี้
- ดึงข้อมูลโทเค็นเว็บ JSON จากเซิร์ฟเวอร์
- นำโทเค็นกลับมาใช้ใหม่จนกว่าจะหมดอายุเพื่อลดการรีเฟรชโทเค็น
- รีเฟรชโทเค็นเมื่อหมดอายุ
คลาส AuthTokenFactory
จะสร้างโทเค็นการให้สิทธิ์เมื่อมีการอัปเดตตำแหน่ง
SDK ต้องจัดแพ็กเกจโทเค็นพร้อมข้อมูลอัปเดตเพื่อส่งไปยัง Fleet Engine ตรวจสอบว่าการติดตั้งใช้งานฝั่งเซิร์ฟเวอร์
สามารถออกโทเค็นได้ก่อนที่จะเริ่มต้น SDK
ดูรายละเอียดของโทเค็นที่บริการ Fleet Engine คาดหวังได้ที่ออกโทเค็นเว็บ JSON สำหรับ Fleet Engine
ตัวอย่างโปรแกรมดึงข้อมูลโทเค็นการให้สิทธิ์
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้โทเค็นการให้สิทธิ์
ในการเรียกกลับ
Java
class JsonAuthTokenFactory implements AuthTokenFactory {
private static final String TOKEN_URL =
"https://yourauthserver.example/token";
private static class CachedToken {
String tokenValue;
long expiryTimeMs;
String tripId;
}
private CachedToken token;
/*
* This method is called on a background thread. Blocking is OK. However, be
* aware that no information can be obtained from Fleet Engine until this
* method returns.
*/
@Override
public String getToken(AuthTokenContext context) {
// If there is no existing token or token has expired, go get a new one.
String tripId = context.getTripId();
if (tripId == null) {
throw new RuntimeException("Trip ID is missing from AuthTokenContext");
}
if (token == null || System.currentTimeMillis() > token.expiryTimeMs ||
!tripId.equals(token.tripId)) {
token = fetchNewToken(tripId);
}
return token.tokenValue;
}
private static CachedToken fetchNewToken(String tripId) {
String url = TOKEN_URL + "/" + tripId;
CachedToken token = new CachedToken();
try (Reader r = new InputStreamReader(new URL(url).openStream())) {
com.google.gson.JsonObject obj
= com.google.gson.JsonParser.parseReader(r).getAsJsonObject();
token.tokenValue = obj.get("ServiceToken").getAsString();
token.expiryTimeMs = obj.get("TokenExpiryMs").getAsLong();
/*
* The expiry time could be an hour from now, but just to try and avoid
* passing expired tokens, we subtract 5 minutes from that time.
*/
token.expiryTimeMs -= 5 * 60 * 1000;
} catch (IOException e) {
/*
* It's OK to throw exceptions here. The error listeners will receive the
* error thrown here.
*/
throw new RuntimeException("Could not get auth token", e);
}
token.tripId = tripId;
return token;
}
}
Kotlin
class JsonAuthTokenFactory : AuthTokenFactory() {
private var token: CachedToken? = null
/*
* This method is called on a background thread. Blocking is OK. However, be
* aware that no information can be obtained from Fleet Engine until this
* method returns.
*/
override fun getToken(context: AuthTokenContext): String {
// If there is no existing token or token has expired, go get a new one.
val tripId =
context.getTripId() ?:
throw RuntimeException("Trip ID is missing from AuthTokenContext")
if (token == null || System.currentTimeMillis() > token.expiryTimeMs ||
tripId != token.tripId) {
token = fetchNewToken(tripId)
}
return token.tokenValue
}
class CachedToken(
var tokenValue: String? = "",
var expiryTimeMs: Long = 0,
var tripId: String? = "",
)
private companion object {
const val TOKEN_URL = "https://yourauthserver.example/token"
fun fetchNewToken(tripId: String) {
val url = "$TOKEN_URL/$tripId"
val token = CachedToken()
try {
val reader = InputStreamReader(URL(url).openStream())
reader.use {
val obj = com.google.gson.JsonParser.parseReader(r).getAsJsonObject()
token.tokenValue = obj.get("ServiceToken").getAsString()
token.expiryTimeMs = obj.get("TokenExpiryMs").getAsLong()
/*
* The expiry time could be an hour from now, but just to try and avoid
* passing expired tokens, we subtract 5 minutes from that time.
*/
token.expiryTimeMs -= 5 * 60 * 1000
}
} catch (e: IOException) {
/*
* It's OK to throw exceptions here. The error listeners will receive the
* error thrown here.
*/
throw RuntimeException("Could not get auth token", e)
}
token.tripId = tripId
return token
}
}
}
ขั้นตอนถัดไป
เริ่มต้น Consumer SDK
เนื้อหาของหน้าเว็บนี้ได้รับอนุญาตภายใต้ใบอนุญาตที่ต้องระบุที่มาของครีเอทีฟคอมมอนส์ 4.0 และตัวอย่างโค้ดได้รับอนุญาตภายใต้ใบอนุญาต Apache 2.0 เว้นแต่จะระบุไว้เป็นอย่างอื่น โปรดดูรายละเอียดที่นโยบายเว็บไซต์ Google Developers Java เป็นเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-08-31 UTC
[null,null,["อัปเดตล่าสุด 2025-08-31 UTC"],[[["\u003cp\u003eThe Consumer SDK utilizes JSON Web Tokens (JWTs) for authorization to access trip and vehicle data within Fleet Engine.\u003c/p\u003e\n"],["\u003cp\u003eJWTs are generated by your backend server and passed to the client, granting access to specific Fleet Engine services like TripService and VehicleService.\u003c/p\u003e\n"],["\u003cp\u003eClient applications need to implement logic to fetch, reuse, and refresh these tokens to maintain ongoing access to Fleet Engine.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eAuthTokenFactory\u003c/code\u003e is used to generate authorization tokens which must be included in requests sent to Fleet Engine.\u003c/p\u003e\n"],["\u003cp\u003eImplement a secure token fetching mechanism on your server to provide these tokens for the Consumer SDK.\u003c/p\u003e\n"]]],["The Consumer SDK utilizes JSON Web Tokens (JWTs) for authorization with Fleet Engine. These JWTs, provided by your application, grant access to services like `TripService` (requiring a `tripid` claim) and `VehicleService`. Your client must fetch, reuse, and refresh JWTs from your server. The `AuthTokenFactory` class generates and packages these tokens with update information for Fleet Engine. Server-side implementation must issue tokens before SDK initialization, ensuring devices have proper authorization credentials for updates.\n"],null,["The Consumer SDK provides authorization using JSON Web Tokens. A JSON Web Token\n(JWT) is an authorization token that provides one or more claims on a service.\n\nThe Consumer SDK uses the JSON Web Token provided by the application to\ncommunicate with the Fleet Engine. For details of the tokens expected by the\nFleet Engine server, see [JSON Web Tokens](/maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/jwt)\nand [Issue JSON Web tokens](/maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/issue-jwt).\n\nThe authorization token provides access to the following Fleet Engine services:\n\n- **`TripService`** - Gives the Consumer SDK access to trip details, including\n vehicle position, route, and ETA. Authorization tokens for the trip service\n must include a `tripid:TRIP_ID` claim in the token's `authorization` header,\n where `TRIP_ID` is the trip ID of the on-demand trip being shared.\n\n- **`VehicleService`** - Gives the Consumer SDK information about the\n approximate vehicle location for displaying the vehicle density layer and\n estimating pickup point ETAs. Because the Consumer SDK uses only approximate\n locations, authorization tokens for the vehicle service don't require a\n `vehicleid` claim.\n\nWhat is a token?\n\nFleet Engine requires the use of **JSON Web Tokens** (JWTs) for API method calls\nfrom **low-trust environments**: smartphones and browsers.\n\nA JWT originates on your server, is signed, encrypted, and passed to the client\nfor subsequent server interactions until it expires or is no longer valid.\n\n**Key details**\n\n- Use [Application Default Credentials](https://google.aip.dev/auth/4110) to authenticate and authorize against Fleet Engine.\n- Use an appropriate service account to sign JWTs. See [Fleet Engine serviceaccount](/maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/service-accounts#fleet_engine_service_account_roles) roles in **Fleet Engine Basics**.\n\nFor more information about JSON Web Tokens, see [JSON Web Tokens](/maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/jwt) in\n**Fleet Engine Essentials**.\n\nHow do clients get tokens?\n\nOnce a driver or consumer logs in to your app using the appropriate\nauthorization credentials, any updates issued from that device must use\nappropriate authorization tokens, which communicates to Fleet Engine the\npermissions for the app.\n\nAs the developer, your client implementation should provide the ability to do\nthe following:\n\n- Fetch a JSON Web Token from your server.\n- Reuse the token until it expires to minimize token refreshes.\n- Refresh the token when it expires.\n\nThe `AuthTokenFactory` class generates authorization tokens at location update\ntime. The SDK must package the tokens with the update\ninformation to send to Fleet Engine. Make sure that your server-side\nimplementation can issue tokens before initializing the SDK.\n\nFor details of the tokens expected by the Fleet Engine service, see [Issue JSON\nWeb Tokens](/maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/issue-jwt) for Fleet Engine.\n\nExample of an authorization token fetcher\n\nThe following code example demonstrates how to implement an authorization token\ncallback. \n\nJava \n\n class JsonAuthTokenFactory implements AuthTokenFactory {\n\n private static final String TOKEN_URL =\n \"https://yourauthserver.example/token\";\n\n private static class CachedToken {\n String tokenValue;\n long expiryTimeMs;\n String tripId;\n }\n\n private CachedToken token;\n\n /*\n\n * This method is called on a background thread. Blocking is OK. However, be\n * aware that no information can be obtained from Fleet Engine until this\n * method returns.\n */\n @Override\n public String getToken(AuthTokenContext context) {\n // If there is no existing token or token has expired, go get a new one.\n String tripId = context.getTripId();\n if (tripId == null) {\n throw new RuntimeException(\"Trip ID is missing from AuthTokenContext\");\n }\n if (token == null || System.currentTimeMillis() \u003e token.expiryTimeMs ||\n !tripId.equals(token.tripId)) {\n token = fetchNewToken(tripId);\n }\n return token.tokenValue;\n }\n\n private static CachedToken fetchNewToken(String tripId) {\n String url = TOKEN_URL + \"/\" + tripId;\n CachedToken token = new CachedToken();\n\n try (Reader r = new InputStreamReader(new URL(url).openStream())) {\n com.google.gson.JsonObject obj\n = com.google.gson.JsonParser.parseReader(r).getAsJsonObject();\n\n token.tokenValue = obj.get(\"ServiceToken\").getAsString();\n token.expiryTimeMs = obj.get(\"TokenExpiryMs\").getAsLong();\n\n /*\n\n * The expiry time could be an hour from now, but just to try and avoid\n * passing expired tokens, we subtract 5 minutes from that time.\n */\n token.expiryTimeMs -= 5 * 60 * 1000;\n } catch (IOException e) {\n /*\n * It's OK to throw exceptions here. The error listeners will receive the\n * error thrown here.\n */\n throw new RuntimeException(\"Could not get auth token\", e);\n }\n token.tripId = tripId;\n\n return token;\n }\n }\n\nKotlin \n\n class JsonAuthTokenFactory : AuthTokenFactory() {\n\n private var token: CachedToken? = null\n\n /*\n\n * This method is called on a background thread. Blocking is OK. However, be\n * aware that no information can be obtained from Fleet Engine until this\n * method returns.\n */\n override fun getToken(context: AuthTokenContext): String {\n // If there is no existing token or token has expired, go get a new one.\n val tripId =\n context.getTripId() ?:\n throw RuntimeException(\"Trip ID is missing from AuthTokenContext\")\n\n if (token == null || System.currentTimeMillis() \u003e token.expiryTimeMs ||\n tripId != token.tripId) {\n token = fetchNewToken(tripId)\n }\n\n return token.tokenValue\n }\n\n class CachedToken(\n var tokenValue: String? = \"\",\n var expiryTimeMs: Long = 0,\n var tripId: String? = \"\",\n )\n\n private companion object {\n const val TOKEN_URL = \"https://yourauthserver.example/token\"\n\n fun fetchNewToken(tripId: String) {\n val url = \"$TOKEN_URL/$tripId\"\n val token = CachedToken()\n\n try {\n val reader = InputStreamReader(URL(url).openStream())\n\n reader.use {\n val obj = com.google.gson.JsonParser.parseReader(r).getAsJsonObject()\n\n token.tokenValue = obj.get(\"ServiceToken\").getAsString()\n token.expiryTimeMs = obj.get(\"TokenExpiryMs\").getAsLong()\n\n /*\n\n * The expiry time could be an hour from now, but just to try and avoid\n * passing expired tokens, we subtract 5 minutes from that time.\n */\n token.expiryTimeMs -= 5 * 60 * 1000\n }\n } catch (e: IOException) {\n /*\n * It's OK to throw exceptions here. The error listeners will receive the\n * error thrown here.\n */\n throw RuntimeException(\"Could not get auth token\", e)\n }\n\n token.tripId = tripId\n\n return token\n }\n }\n }\n\nWhat's next\n\n[Initialize the Consumer SDK](/maps/documentation/mobility/journey-sharing/on-demand/android/init-sdk)"]]