自訂 Google 錢包票證

Google 錢包提供強大的工具,可自訂任何票證的外觀和版面配置,包括活動票券、登機證、會員卡和禮物卡。本指南提供完整總覽,說明如何定義資訊卡的結構,以及顯示動態的使用者專屬資訊,進而打造專屬使用者體驗。

開始前,請務必參閱票證類型的特定 REST API 參考說明文件,查看可用欄位的完整清單。

基金會:cardTemplateOverride

自訂票證版面配置的主要工具是 classTemplateInfo.cardTemplateOverride 物件,您可以在票證的 Class 資源中定義該物件 (例如 EventTicketClassLoyaltyClass)。這個物件可讓您定義列和其中的項目,藉此建構票證,控管資訊的呈現方式。

您可以參考 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 建立自訂資料欄位。非常適合顯示不符合預先定義欄位的獨特資訊,例如自訂簡短附註、會員福利或特定地點的詳細資料。

您可以在 ObjectClass 中定義具有專屬 idtextModulesData 項目,然後在 cardTemplateOverride 中參照該 id

設定資訊卡列結構

你可以設計每張憑證包含一、二或三個資料項目,有助於有條不紊地整理資訊。可新增的資料列數量沒有硬性限制,但為了提供清爽的瀏覽體驗,請考慮在資訊卡正面顯示最重要的資訊。

  • 最佳做法:如要提供補充資訊,請使用憑證詳細資料檢視畫面或其他 Google 錢包功能,例如 messageslinksModuleDatalinkedOfferIds。這樣一來,主票證檢視畫面就不會過於雜亂。

範例:含有自訂資料的三個項目列

建立資料列來顯示自訂詳細資料。如果是會員卡,這可能是指點數、等級和餘額。如果是活動票券,則可能是「區域」、「排」和「座位」。

自訂和預先定義的欄位

類別定義: cardTemplateOverride 參照三個不重複的 ID:detail1detail2detail3

...
"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 參照 linksModuleDataimageModulesData 中的欄位,這些欄位就不會顯示在票證正面。這類內容會自動顯示在「票證詳細資料」檢視畫面 (即「票證背面」),方便使用者存取客戶服務連結、宣傳圖片、條款及細則和其他補充資訊。

3. 卡片正面以外的內容:其他範本覆寫

classTemplateInfo 物件提供的資訊不只 cardTemplateOverride。你也可以自訂 Google 錢包體驗的其他部分,讓票證的呈現方式更豐富直覺。

如要進一步瞭解所有可用的覆寫,請參閱 ClassTemplateInfo 參考說明文件

  • listTemplateOverride:自訂 Google 錢包應用程式主要清單檢視畫面中的列版面配置,讓您在使用者開啟憑證前,醒目顯示最重要的欄位。
  • detailsTemplateOverride:建構「票證詳細資料」檢視畫面 (票證背面) 的列和版面配置,提供彈性空間放置補充資訊、連結和文字。
  • cardBarcodeSectionDetails:可自訂票證上的條碼部分。