Google 錢包提供強大的工具,可自訂任何票證的外觀和版面配置,包括活動票券、登機證、會員卡和禮物卡。本指南提供完整總覽,說明如何定義資訊卡的結構,以及顯示動態的使用者專屬資訊,進而打造專屬使用者體驗。
開始前,請務必參閱票證類型的特定 REST API 參考說明文件,查看可用欄位的完整清單。
基金會:cardTemplateOverride
自訂票證版面配置的主要工具是 classTemplateInfo.cardTemplateOverride 物件,您可以在票證的 Class 資源中定義該物件 (例如 EventTicketClass、LoyaltyClass)。這個物件可讓您定義列和其中的項目,藉此建構票證,控管資訊的呈現方式。
您可以參考 Class 資源 (適用於所有使用者共用的資訊) 和 Object 資源 (適用於特定使用者的詳細資料)。
1. 使用預先定義的錢包欄位自訂
預先定義的欄位是 Google Wallet API 中適用於特定憑證類型的標準屬性。這些欄位有特定名稱,且會以一致的方式由 Google 錢包顯示。例如條碼、活動名稱、航班編號或禮物卡餘額。
您可以參考這些預先定義欄位的 fieldPath,將欄位安排在票證上的任何位置。
範例:顯示條碼和票證專屬詳細資料
這個票證範例有「頂端列」,以及第 2 列中的 3 個資料欄位。第一個項目會顯示使用者的特定值,例如點數或座位號碼。Object第二個項目會顯示 Class 中的詳細資料,例如活動名稱或會員方案等級,第三個項目則會再次顯示 Object 中的使用者特定值,例如次要點數或區段 / 教練編號。

類別定義:
...
"classTemplateInfo": {
"cardTemplateOverride": {
"cardRowTemplateInfos": [
{
"threeItems": {
"startItem": {
"firstValue": {
"fields": [
{
"fieldPath": "object.loyaltyPoints.label",
"fieldPath": "object.loyaltyPoints.balance",
}
]
}
},
"middleItem": {
"firstValue": {
"fields": [
{
"fieldPath": "class.rewardsTierLabel",
"fieldPath": "class.rewardsTier",
}
]
}
},
"endItem": {
"firstValue": {
"fields": [
{
"fieldPath": "object.secondaryLoyaltyPoints.label",
"fieldPath": "object.secondaryLoyaltyPoints.balance",
}
]
}
}
}
},
]
}
}
...
"rewardsTier": "Gold",
"rewardsTierLabel": "Tier",
...
物件定義
...
"loyaltyPoints": {
"balance": {
"string": "1500"
},
"label": "Points"
},
"secondaryLoyaltyPoints" : {
"balance": {
"money": {
"micros" : "28250000",
"currencyCode": "USD",
}
},
"label": "Balance"
}
...
設定日期和時間欄位的格式
對於支援的票證中的任何日期或時間欄位,您可以使用 dateFormat 屬性指定自訂格式。你可以控管憑證上顯示的日期格式,例如只顯示時間、完整日期和時間,或只顯示日期。如未指定,系統會使用預設格式。dateFormat
"fields": [
{
"fieldPath": "object.validTimeInterval.start.date",
"dateFormat": "DATE_ONLY"
}
]
如需可用格式的完整清單,請參閱 DateFormat 說明文件。
2. 使用開發人員定義的欄位自訂
為提供極致彈性,Google 錢包可讓您使用 textModulesData 建立自訂資料欄位。非常適合顯示不符合預先定義欄位的獨特資訊,例如自訂簡短附註、會員福利或特定地點的詳細資料。
您可以在 Object 或 Class 中定義具有專屬 id 的 textModulesData 項目,然後在 cardTemplateOverride 中參照該 id。
設定資訊卡列結構
你可以設計每張憑證包含一、二或三個資料項目,有助於有條不紊地整理資訊。可新增的資料列數量沒有硬性限制,但為了提供清爽的瀏覽體驗,請考慮在資訊卡正面顯示最重要的資訊。
- 最佳做法:如要提供補充資訊,請使用憑證詳細資料檢視畫面或其他 Google 錢包功能,例如
messages、linksModuleData或linkedOfferIds。這樣一來,主票證檢視畫面就不會過於雜亂。
範例:含有自訂資料的三個項目列
建立資料列來顯示自訂詳細資料。如果是會員卡,這可能是指點數、等級和餘額。如果是活動票券,則可能是「區域」、「排」和「座位」。

類別定義:
cardTemplateOverride 參照三個不重複的 ID:detail1、detail2 和 detail3。
...
"classTemplateInfo": {
"cardTemplateOverride": {
"cardRowTemplateInfos": [
{
"oneItem": {
"item": {
"firstValue": {
"fields": [
{
"fieldPath": "object.accountName",
}
]
}
}
}
},
{
"threeItems": {
"startItem": {
"firstValue": {
"fields": [
{
"fieldPath": "object.loyaltyPoints.label",
"fieldPath": "object.loyaltyPoints.balance",
}
]
}
},
"middleItem": {
"firstValue": {
"fields": [
{
"fieldPath": "class.rewardsTierLabel",
"fieldPath": "class.rewardsTier",
}
]
}
},
"endItem": {
"firstValue": {
"fields": [
{
"fieldPath": "object.secondaryLoyaltyPoints.label",
"fieldPath": "object.secondaryLoyaltyPoints.balance",
}
]
}
}
}
},
{
"threeItems": {
"startItem": {
"firstValue": {
"fields": [
{
"fieldPath": "object.textModulesData['row1left']",
}
]
}
},
"middleItem": {
"firstValue": {
"fields": [
{
"fieldPath": "object.textModulesData['row1mid']"
}
]
}
},
"endItem": {
"firstValue": {
"fields": [
{
"fieldPath": "object.textModulesData['row1right']"
}
]
}
}
}
},
{
"twoItems": {
"startItem": {
"firstValue": {
"fields": [
{
"fieldPath": "object.textModulesData['mem_since']",
}
]
}
},
"endItem": {
"firstValue": {
"fields": [
{
"fieldPath": "object.textModulesData['park']",
}
]
}
}
}
},
]
}
}
...
"rewardsTier": "Gold",
"rewardsTierLabel": "Tier",
物件定義:
Object 提供每個欄位的資料和對應 ID。
...
"accountName": "Lorenaisabel Aliwarringlen",
"loyaltyPoints": {
"balance": {
"string": "1500"
},
"label": "Points"
},
"secondaryLoyaltyPoints" : {
"balance": {
"money": {
"micros" : "28250000",
"currencyCode": "USD",
}
},
"label": "Balance"
},
"textModulesData": [
{
"header": "Visits",
"body": "17",
"id": "row1left"
},
{
"header": "Rides",
"body": "259",
"id": "row1mid"
},
{
"header": "Park hours",
"body": "140",
"id": "row1right"
},
{
"header": "Member since",
"body": "Mar 01, 2017",
"id": "mem_since"
},
{
"header": "Parking",
"body": "Included (Free)",
"id": "park"
}
]
...
變體的類別與物件資料
您可以結合類別層級和物件層級資料,建立動態個人化票證。這項功能有助於建立同一張票證的不同版本。
- 類別層級
textModulesData:如果詳細資料適用於一群使用者 (例如向所有 VIP 票券持有者傳送「歡迎加入 VIP」訊息),請使用這個層級。 - 物件層級
textModulesData:使用這個層級,瞭解特定使用者的詳細資料 (例如「Jane,你的座位視野受限」。
範例:顯示特定等級的票證
您可以為不同的票證類型建立不同的 Class 資源,例如活動的「一般入場」和「VIP」,或是航班的「經濟艙」和「商務艙」。每個課程都可以有獨特設計 (主視覺圖片、顏色) 和預設文字。
![]() |
![]() |
![]() |
| 會員等級為白銀級以上 | 會員升級為黃金等級 | 另一位鑽石級會員 |
憑證詳細資料檢視畫面中的內容
如果 cardTemplateOverride 參照 linksModuleData 和 imageModulesData 中的欄位,這些欄位就不會顯示在票證正面。這類內容會自動顯示在「票證詳細資料」檢視畫面 (即「票證背面」),方便使用者存取客戶服務連結、宣傳圖片、條款及細則和其他補充資訊。
3. 卡片正面以外的內容:其他範本覆寫
classTemplateInfo 物件提供的資訊不只 cardTemplateOverride。你也可以自訂 Google 錢包體驗的其他部分,讓票證的呈現方式更豐富直覺。
如要進一步瞭解所有可用的覆寫,請參閱 ClassTemplateInfo 參考說明文件。
listTemplateOverride:自訂 Google 錢包應用程式主要清單檢視畫面中的列版面配置,讓您在使用者開啟憑證前,醒目顯示最重要的欄位。detailsTemplateOverride:建構「票證詳細資料」檢視畫面 (票證背面) 的列和版面配置,提供彈性空間放置補充資訊、連結和文字。cardBarcodeSectionDetails:可自訂票證上的條碼部分。


