ปรับแต่งบัตรใน Google Wallet

Google Wallet มีเครื่องมือที่มีประสิทธิภาพในการปรับแต่งลักษณะที่ปรากฏและเลย์เอาต์ของบัตรทุกประเภท ตั้งแต่ตั๋วเข้างานและบอร์ดดิ้งพาสไปจนถึงบัตรสะสมคะแนนและบัตรของขวัญ คู่มือนี้จะให้ภาพรวมที่ครอบคลุมเกี่ยวกับวิธีปรับแต่งประสบการณ์ของผู้ใช้โดยการกำหนดโครงสร้างของการ์ดและแสดงข้อมูลแบบไดนามิกที่เฉพาะเจาะจงสำหรับผู้ใช้

ก่อนเริ่มต้น โปรดอ่านเอกสารอ้างอิง REST API ที่เฉพาะเจาะจงสำหรับบัตรประเภทของคุณเพื่อดูรายการฟิลด์ทั้งหมดที่ใช้ได้

มูลนิธิ: cardTemplateOverride

เครื่องมือหลักในการปรับแต่งเลย์เอาต์ของบัตรคือออบเจ็กต์ classTemplateInfo.cardTemplateOverride ซึ่งคุณกำหนดไว้ในทรัพยากร Class ของบัตร (เช่น EventTicketClass, LoyaltyClass) ออบเจ็กต์นี้ช่วยให้คุณจัดโครงสร้างบัตรได้โดยการกำหนดแถวและรายการภายในแถว ซึ่งจะช่วยให้คุณควบคุมวิธีแสดงข้อมูลได้

คุณอ้างอิงข้อมูลได้จากทั้งทรัพยากร Class (สำหรับข้อมูลที่แชร์ในผู้ใช้ทั้งหมด) และทรัพยากร Object (สำหรับรายละเอียดเฉพาะผู้ใช้)

1. การปรับแต่งด้วยช่อง Wallet ที่กำหนดไว้ล่วงหน้า

ฟิลด์ที่กำหนดไว้ล่วงหน้าคือพร็อพเพอร์ตี้มาตรฐานที่มีอยู่ใน Google Wallet API สำหรับบัตรประเภทหนึ่งๆ ฟิลด์เหล่านี้มีชื่อเฉพาะและ Wallet จะแสดงผลในลักษณะที่สอดคล้องกัน เช่น บาร์โค้ด ชื่อกิจกรรม หมายเลขเที่ยวบิน หรือยอดเงินคงเหลือในบัตรของขวัญ

การอ้างอิง fieldPath ของช่องที่กำหนดไว้ล่วงหน้าเหล่านี้จะช่วยให้คุณจัดเรียงช่องได้ทุกที่ในบัตร

ตัวอย่าง: การแสดงบาร์โค้ดและรายละเอียดเฉพาะบัตร

ตัวอย่างบัตรนี้มี "แถวบนสุด" และฟิลด์ข้อมูล 3 รายการในแถวที่ 2 รายการแรกจะแสดงค่าที่เฉพาะเจาะจงของผู้ใช้จาก Object เช่น คะแนนหรือหมายเลขที่นั่งที่เฉพาะเจาะจงของผู้ใช้ รายการที่ 2 จะแสดงรายละเอียดจาก Class เช่น ชื่อกิจกรรมหรือระดับโปรแกรมสะสมคะแนน และรายการที่ 3 จะแสดงค่าที่เฉพาะเจาะจงของผู้ใช้จาก 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 Wallet ช่วยให้คุณสร้างช่องข้อมูลที่กำหนดเองได้โดยใช้ textModulesData เพื่อความยืดหยุ่นสูงสุด ซึ่งเหมาะอย่างยิ่งสำหรับการแสดงข้อมูลที่ไม่ซ้ำกันซึ่งไม่พอดีกับฟิลด์ที่กำหนดไว้ล่วงหน้า เช่น หมายเหตุสั้นๆ ที่กำหนดเอง สิทธิประโยชน์สำหรับสมาชิก หรือรายละเอียดเฉพาะสถานที่

คุณกำหนดtextModulesDataรายการที่มีidที่ไม่ซ้ำในObjectหรือClass จากนั้นอ้างอิงidนั้นในcardTemplateOverride

แถวการ์ดโครงสร้าง

คุณออกแบบบัตรที่มีรายการข้อมูล 1, 2 หรือ 3 รายการต่อบัตรได้ ซึ่งจะช่วยให้จัดระเบียบข้อมูลได้อย่างเป็นตรรกะ คุณเพิ่มแถวได้ไม่จำกัด แต่เพื่อประสบการณ์การใช้งานที่ดี โปรดพิจารณาว่าควรแสดงข้อมูลใดบนหน้าบัตร

  • แนวทางปฏิบัติแนะนำ: หากต้องการข้อมูลเพิ่มเติม ให้ใช้มุมมองรายละเอียดบัตรหรือฟีเจอร์อื่นๆ ของ Wallet เช่น messages, linksModuleData หรือ linkedOfferIds ซึ่งจะช่วยให้มุมมองบัตรหลักไม่รก

ตัวอย่าง: แถวที่มี 3 รายการพร้อมข้อมูลที่กำหนดเอง

สร้างแถวเพื่อแสดงรายละเอียดที่กำหนดเอง สำหรับบัตรสะสมคะแนน ข้อมูลนี้อาจเป็นคะแนน ระดับ และยอดคงเหลือ สำหรับตั๋วเข้าร่วมกิจกรรม อาจเป็น "ส่วน" "แถว" และ "ที่นั่ง"

ฟิลด์ที่กำหนดเองและฟิลด์ที่กำหนดไว้ล่วงหน้า

คำจำกัดความของคลาส: cardTemplateOverride อ้างอิงรหัสที่ไม่ซ้ำกัน 3 รายการ ได้แก่ 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 ระบุข้อมูลและรหัสที่เกี่ยวข้องสำหรับแต่ละฟิลด์

...
"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: ใช้สำหรับรายละเอียดที่เฉพาะเจาะจงกับผู้ใช้รายเดียว (เช่น "คุณเจน ที่นั่งของคุณมีมุมมองที่จำกัด")

ตัวอย่าง: การแสดงบัตรเฉพาะระดับ

คุณสร้างแหล่งข้อมูล Class ที่แตกต่างกันสำหรับบัตรรูปแบบต่างๆ ได้ เช่น "บัตรเข้าชมทั่วไป" กับ "VIP" สำหรับกิจกรรม หรือ "ชั้นประหยัด" กับ "ชั้นธุรกิจ" สำหรับเที่ยวบิน แต่ละชั้นเรียนจะมีดีไซน์ (ภาพฮีโร่ สี) และข้อความเริ่มต้นที่ไม่ซ้ำกันได้

สมาชิกในระดับ Silver อัปเกรดสมาชิกเป็นระดับโกลด์แล้ว สมาชิกในระดับไดมอนด์
สมาชิกที่เริ่มต้นด้วยระดับซิลเวอร์ อัปเกรดสมาชิกเป็นระดับโกลด์แล้ว สมาชิกอีกรายในระดับไดมอนด์

เนื้อหาในมุมมองรายละเอียดบัตร

ระบบจะไม่แสดงช่องจาก linksModuleData, imageModulesData ที่ด้านหน้าของบัตรเมื่อมีการอ้างอิงใน cardTemplateOverride เนื้อหานี้จะแสดงโดยอัตโนมัติในมุมมองรายละเอียดบัตร ("ด้านหลังของบัตร") ซึ่งช่วยให้ผู้ใช้เข้าถึงลิงก์ฝ่ายบริการลูกค้า รูปภาพโปรโมชัน ข้อกำหนดและเงื่อนไข และข้อมูลเสริมอื่นๆ ได้ดียิ่งขึ้น

3. นอกเหนือจากหน้าบัตร: การลบล้างเทมเพลตอื่นๆ

ออบเจ็กต์ classTemplateInfo มีมากกว่าแค่ cardTemplateOverride คุณปรับแต่งส่วนอื่นๆ ของประสบการณ์การใช้งาน Google Wallet เพื่อให้บัตรแสดงผลได้ดียิ่งขึ้นและใช้งานง่ายขึ้นได้

ดูรายละเอียดทั้งหมดเกี่ยวกับการลบล้างที่มีอยู่ทั้งหมดได้ในClassTemplateInfoเอกสารอ้างอิง

  • listTemplateOverride: ปรับแต่งเลย์เอาต์แถวในมุมมองรายการหลักของแอป Google Wallet เพื่อให้คุณไฮไลต์ช่องที่สำคัญที่สุดได้ก่อนที่ผู้ใช้จะเปิดบัตร
  • detailsTemplateOverride: จัดโครงสร้างแถวและเลย์เอาต์ของมุมมอง "รายละเอียดบัตร" (ด้านหลังของบัตร) เพื่อให้คุณมีพื้นที่ที่ยืดหยุ่นสำหรับข้อมูลเสริม ลิงก์ และข้อความ
  • cardBarcodeSectionDetails: ให้คุณปรับแต่งส่วนบาร์โค้ดในบัตร