Template Loyalitas

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Gunakan alat berikut untuk menyesuaikan kartu loyalitas Anda dan lihat cuplikan kode di bawah.

Kartu loyalitas mendukung rendering template. Jika tidak ada template yang ditentukan, template default akan digunakan.

Definisi template

Template kartu ditentukan di tingkat class dan digunakan untuk menampilkan objek yang terkait dengan class tersebut. Template menentukan kolom yang akan ditampilkan di berbagai bagian kartu.

Template ini dibagi menjadi beberapa bagian berikut:

Android

Ringkasan template

Web

Ringkasan template

Judul kartu

Android

Elemen judul kartu
  1. class.programLogo
  2. class.localizedIssuerName
    atau class.issuerName
  3. class.localizedProgramName
    atau class.programName
  4. class.hexBackgroundColor

Web

Elemen judul kartu
  1. class.programLogo
  2. class.localizedIssuerName
    atau class.issuerName
  3. class.localizedProgramName
    atau class.programName
  4. class.hexBackgroundColor

Bagian judul kartu menampilkan logo, nama penerbit, dan judul program. Baik referensi kolom yang digunakan untuk mengisinya maupun posisinya tidak dapat diubah.

Template kartu

Android

Ringkasan template

Web

Ringkasan template

Bagian template kartu digunakan untuk menampilkan baris tambahan. Baris ini dapat berisi kolom data terstruktur berbasis teks atau kolom modul teks.

Anda dapat menentukan jumlah baris yang menentukan jumlah objek dalam daftar class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[]. Daftar ini memerlukan setidaknya satu elemen dan kami merekomendasikan untuk menggunakan maksimal dua elemen. Setiap elemen harus berupa salah satu jenis berikut:

  • oneItem, yang menerima satu item:
    • item
  • twoItems, yang menerima dua item:
    • startItem
    • endItem
  • threeItems, yang menerima tiga item:
    • startItem
    • middleItem
    • endItem

Setiap item dapat ditentukan sebagai pemilih kolom tunggal (.firstValue), dua pemilih kolom (.firstValue dan .secondValue), atau item yang telah ditetapkan (.predefinedItem). Nilai kolom yang dipilih dan labelnya masing-masing akan ditampilkan. Saat Anda menentukan dua pemilih kolom, nilai kolom yang dipilih akan ditampilkan dengan pemisah "/". Hal yang sama berlaku untuk label kolom yang dipilih. Item yang telah ditetapkan digunakan untuk menentukan rendering yang lebih kompleks.

Contoh kode berikut menunjukkan cara mengganti bagian baris kartu template kartu untuk menentukan dua baris. Setiap baris menyertakan tiga item yang masing-masing mereferensikan enam kolom kustom textModuleData level class dan header-nya sebagai label:

Python

 {
   ... //Rest of class
   "textModulesData": [
        {
            "header": "Label 1",
            "body": "Some info 1",
            "id": "myfield1"
        },
        {
            "header": "Label 2",
            "body": "Some info 2",
            "id": "myfield2"
        },
        {
            "header": "Label 3",
            "body": "Some info 3",
            "id": "myfield3"
        },
        {
            "header": "Label 4",
            "body": "Some info 4",
            "id": "myfield4"
        },
        {
            "header": "Label 5",
            "body": "Some info 5",
            "id": "myfield5"
        },
        {
            "header": "Label 6",
            "body": "Some info 6",
            "id": "myfield6"
        }
    ],
   "classTemplateInfo": {
        "cardTemplateOverride": {
            "cardRowTemplateInfos": [{
                "threeItems": {
                    "startItem": {
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.textModulesData['myfield1']"
                            }]
                        }
                    },
                    "middleItem": {
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.textModulesData['myfield2']"
                            }]
                        }
                    },
                    "endItem": {
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.textModulesData['myfield3']"
                            }]
                        }
                    },
                }
            },{
                "threeItems": {
                    "startItem": {
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.textModulesData['myfield4']"
                            }]
                        }
                    },
                    "middleItem": {
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.textModulesData['myfield5']"
                            }]
                        }
                    },
                    "endItem": {
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.textModulesData['myfield6']"
                            }]
                        }
                    },
                }
            }]
        }
    }
}
    

Java

// Rest of class
  .setTextModulesData((new ArrayList<TextModuleData>() {
    {
      add((new TextModuleData()).setHeader("Label 1")
        .setBody("Some info 1")
        .setId("myfield1"));
      add((new TextModuleData()).setHeader("Label 2")
        .setBody("Some info 1")
        .setId("myfield2"));
      add((new TextModuleData()).setHeader("Label 3")
        .setBody("Some info 3")
        .setId("myfield3"));
      add((new TextModuleData()).setHeader("Label 4")
        .setBody("Some info 4")
        .setId("myfield4"));
      add((new TextModuleData()).setHeader("Label 5")
        .setBody("Some info 5")
        .setId("myfield5"));
      add((new TextModuleData()).setHeader("Label 6")
        .setBody("Some info 5")
        .setId("myfield6"));
    }
  }))
  .setClassTemplateInfo((new ClassTemplateInfo())
    .setCardTemplateOverride((new CardTemplateOverride())
      .setCardRowTemplateInfos(new ArrayList<CardRowTemplateInfo>() {
        {
          add((new CardRowTemplateInfo()).setThreeItems((new CardRowThreeItems())
            .setStartItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield1']"));
              }
            })))
            .setMiddleItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield2']"));
              }
            })))
            .setEndItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield3']"));
              }
            })))
          ));
          add((new CardRowTemplateInfo()).setThreeItems((new CardRowThreeItems())
            .setStartItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield4']"));
              }
            })))
            .setMiddleItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield5']"));
              }
            })))
            .setEndItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield6']"));
              }
            })))
          ));
          }
  })))
    

PHP

// Rest of class
    $textModulesData1 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData1->setBody("Some info 1");
    $textModulesData1->setHeader("Label 1");
    $textModulesData1->setId("myfield1");

    $textModulesData2 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData2->setBody("Some info 2");
    $textModulesData2->setHeader("Label 2");
    $textModulesData2->setId("myfield2");

    $textModulesData3 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData3->setBody("Some info 3");
    $textModulesData3->setHeader("Label 3");
    $textModulesData3->setId("myfield3");

    $textModulesData4 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData4->setBody("Some info 4");
    $textModulesData4->setHeader("Label 4");
    $textModulesData4->setId("myfield4");

    $textModulesData5 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData5->setBody("Some info 5");
    $textModulesData5->setHeader("Label 5");
    $textModulesData5->setId("myfield5");

    $textModulesData6 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData6->setBody("Some info 6");
    $textModulesData6->setHeader("Label 6");
    $textModulesData6->setId("myfield6");

    $textModulesDatas = array($textModulesData1, $textModulesData2, $textModulesData3,
                  $textModulesData4, $textModulesData5, $textModulesData6);

    $startItemField = new Google_Service_Walletobjects_FieldReference();
    $startItemField->setFieldPath("class.textModulesData['myfield1']");

    $startItemFirstValue = new Google_Service_Walletobjects_FieldSelector();
    $startItemFirstValue->setFields(array($startItemField));

    $startItem = new Google_Service_Walletobjects_TemplateItem();
    $startItem->setFirstValue($startItemFirstValue);

    $middleItemField = new Google_Service_Walletobjects_FieldReference();
    $middleItemField->setFieldPath("class.textModulesData['myfield2']");

    $middleItemFirstValue = new Google_Service_Walletobjects_FieldSelector();
    $middleItemFirstValue->setFields(array($middleItemField));

    $middleItem = new Google_Service_Walletobjects_TemplateItem();
    $middleItem->setFirstValue($middleItemFirstValue);

    $endItemField = new Google_Service_Walletobjects_FieldReference();
    $endItemField->setFieldPath("class.textModulesData['myfield3']");

    $endItemFirstValue = new Google_Service_Walletobjects_FieldSelector();
    $endItemFirstValue->setFields(array($endItemField));

    $endItem = new Google_Service_Walletobjects_TemplateItem();
    $endItem->setFirstValue($endItemFirstValue);

    $cardRowTemplate = new Google_Service_Walletobjects_CardRowThreeItems();
    $cardRowTemplate->setStartItem($startItem);
    $cardRowTemplate->setMiddleItem($middleItem);
    $cardRowTemplate->setEndItem($endItem);

    $cardRowTemplateInfo1 = new Google_Service_Walletobjects_CardRowTemplateInfo();
    $cardRowTemplateInfo1->setThreeItems($cardRowTemplate);

    $startItemField2 = new Google_Service_Walletobjects_FieldReference();
    $startItemField2->setFieldPath("class.textModulesData['myfield4']");

    $startItemFirstValue2 = new Google_Service_Walletobjects_FieldSelector();
    $startItemFirstValue2->setFields(array($startItemField2));

    $startItem2 = new Google_Service_Walletobjects_TemplateItem();
    $startItem2->setFirstValue($startItemFirstValue2);

    $middleItemField2 = new Google_Service_Walletobjects_FieldReference();
    $middleItemField2->setFieldPath("class.textModulesData['myfield5']");

    $middleItemFirstValue2 = new Google_Service_Walletobjects_FieldSelector();
    $middleItemFirstValue2->setFields(array($middleItemField2));

    $middleItem2 = new Google_Service_Walletobjects_TemplateItem();
    $middleItem2->setFirstValue($middleItemFirstValue2);

    $endItemField2 = new Google_Service_Walletobjects_FieldReference();
    $endItemField2->setFieldPath("class.textModulesData['myfield6']");

    $endItemFirstValue2 = new Google_Service_Walletobjects_FieldSelector();
    $endItemFirstValue2->setFields(array($endItemField2));

    $endItem2 = new Google_Service_Walletobjects_TemplateItem();
    $endItem2->setFirstValue($endItemFirstValue2);

    $cardRowTemplate2 = new Google_Service_Walletobjects_CardRowThreeItems();
    $cardRowTemplate2->setStartItem($startItem2);
    $cardRowTemplate2->setMiddleItem($middleItem2);
    $cardRowTemplate2->setEndItem($endItem2);

    $cardRowTemplateInfo2 = new Google_Service_Walletobjects_CardRowTemplateInfo();
    $cardRowTemplateInfo2->setThreeItems($cardRowTemplate2);

    $cardTemplateOverride = new Google_Service_Walletobjects_CardTemplateOverride();
    $cardTemplateOverride->setCardRowTemplateInfos(array($cardRowTemplateInfo1,
                  $cardRowTemplateInfo2));

    $classTemplateInfo = new Google_Service_Walletobjects_ClassTemplateInfo();
    $classTemplateInfo->setCardTemplateOverride($cardTemplateOverride);

    $payload->setTextModulesData($textModulesDatas);
    $payload->setClassTemplateInfo($classTemplateInfo);
    

Kode ini membuat kartu dengan format bagian template kode berikut:

Contoh penggantian label.

Jika item kosong, item tersebut tidak akan ditampilkan. Untuk detail selengkapnya, lihat Referensi Kolom. Jika semua item dalam baris kosong, baris tersebut tidak akan ditampilkan. Jika beberapa tetapi tidak semua item dalam baris kosong, item yang tidak kosong akan diatur ulang dan ditampilkan sebagai baris dengan lebih sedikit item.

Jika Anda tidak mengganti template kartu, jumlah default baris, jumlah default item, dan referensi kolom default akan digunakan. Untuk detail selengkapnya, lihat Template default.

Setelah menentukan Hero Image, gambar dapat muncul setelah baris pertama, jika ada beberapa baris dalam daftar cardRowTemplateInfos, atau di atas baris, jika hanya ada satu.

Kode batang kartu

Android

Elemen kode batang kartu
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type dan object.barcode.value
    atau object.accountId
  4. object.barcode.alternateText
    atau object.accountId
    atau object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail
  6. object.heroImage
    atau class.heroImage

Web

Elemen kode batang kartu
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type dan object.barcode.value
    atau object.accountId
  4. object.barcode.alternateText
    atau object.accountId
    atau object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

Bagian kode batang kartu digunakan untuk menampilkan teks atau gambar tambahan di atas dan di bawah kode batang. Kolom ini tidak wajib diisi.

Ada tiga pemilih kolom yang dapat digunakan untuk menentukan dua kolom yang berdampingan di atas dan satu di bawah kode batang. Ini ditampilkan tanpa label dan dapat berupa kolom data terstruktur berbasis teks, kolom modul teks, atau kolom modul gambar. Jika Anda menggunakan gambar, gambar tersebut harus mengikuti pedoman branding.

Kode batang ditentukan oleh jenis dan nilai. Untuk daftar jenis kode batang yang didukung, lihat Referensi. Selain itu, teks dapat ditampilkan tepat di bawah kode batang. Teks ini dapat mempermudah pemindaian kode batang, di antara penggunaan lainnya.

Contoh kode berikut menunjukkan cara mengganti bagian kode batang pada kartu untuk menampilkan gambar di atas kode batang:

Python

#... rest of class
    "imageModulesData": [
        {
            "mainImage": {
                "sourceUri": {
                    "uri":  "http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg",
                    "description": "Coffee"
                }
            },
            "Id": "myimage"
        }
    ],
    "classTemplateInfo": {
        "cardBarcodeSectionDetails": {
            "firstTopDetail": {
                "fieldSelector": {
                    "fields": [
                        {
                        "fieldPath": "class.imageModulesData['myimage'].mainImage"
                        }
                    ]
                }
            }
        }
    }
}
    

Java

//... rest of class
  .setImageModulesData((new ArrayList<ImageModuleData>() {
    {
      add((new ImageModuleData())
        .setId("myimage")
        .setMainImage((new Image()).setSourceUri((new ImageUri()).setDescription("Coffee beans")
          .setUri("http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg"))));
        }
      }))
      .setClassTemplateInfo((new ClassTemplateInfo())
        .setCardBarcodeSectionDetails((new CardBarcodeSectionDetails())
          .setFirstTopDetail((new BarcodeSectionDetail())
            .setFieldSelector((new FieldSelector())
              .setFields((new ArrayList<FieldReference>(){
                {
                  add((new FieldReference()).setFieldPath("class.imageModulesData['myimage'].mainImage"));
                }
            })))))
      }
    

PHP

//... rest of class
    $imageUri = new Google_Service_Walletobjects_ImageUri();
    $imageUri->setUri("https://farm8.staticflickr.com/7340/11177041185_a61a7f2139_o.jpg");
    $imageUri->setDescription("Baconrista flights image");
    $image = new Google_Service_Walletobjects_Image();
    $image->setSourceUri($imageUri);
    $imageModulesData = new Google_Service_Walletobjects_ImageModuleData();
    $imageModulesData->setMainImage($image);
            $imageModulesData->setId("myimage");

    $cardBarcodeFieldReference = new Google_Service_Walletobjects_FieldReference();
    $cardBarcodeFieldReference->setFieldPath("class.imageModulesData['myimage'].mainImage");

    $cardBarcodeFieldSelector = new Google_Service_Walletobjects_FieldSelector();
    $cardBarcodeFieldSelector->setFields(array($cardBarcodeFieldReference));

    $cardBarcodeDetail = new Google_Service_Walletobjects_BarcodeSectionDetail();
    $cardBarcodeDetail->setFieldSelector($cardBarcodeFieldSelector);

    $cardBarcodeSectionDetails = new Google_Service_Walletobjects_CardBarcodeSectionDetails();
    $cardBarcodeSectionDetails->setFirstTopDetail($cardBarcodeDetail);

    $classTemplateInfo = new Google_Service_Walletobjects_ClassTemplateInfo();
    $classTemplateInfo->setCardBarcodeSectionDetails($cardBarcodeSectionDetails);

    $payload->setClassTemplateInfo($classTemplateInfo);
            $payload->setImageModuleData($imageModulesData);
    

Kode ini membuat kartu dengan format bagian kode batang berikut:

Contoh penggantian kode batang kartu.

Jika Anda tidak mengganti bagian kode batang, kolom kode batang default akan digunakan. Untuk mengetahui informasi selengkapnya, lihat Template default.

Template detail

Android

Bagian template detail
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • ...

Web

Bagian template detail
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • ...

Bagian template detail adalah daftar item class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. Item dapat berisi jenis kolom data terstruktur, kolom modul teks, kolom modul link, kolom modul gambar, atau pesan.

Setiap item dapat ditentukan sebagai pemilih kolom tunggal (.firstValue), dua pemilih kolom (.firstValue dan .secondValue), atau item standar (.predefinedItem). Nilai kolom yang dipilih dan label yang terkait akan ditampilkan. Saat Anda menentukan dua pemilih kolom, nilai dari kolom yang dipilih akan ditampilkan dengan pemisah "/". Hal yang sama berlaku untuk label kolom yang dipilih. Item bawaan telah digunakan untuk menentukan rendering yang lebih kompleks. Kolom modul gambar dirender pada lebar penuh tanpa label.

Contoh kode berikut menunjukkan cara mengganti bagian detail kartu untuk menampilkan satu kolom linksModuleData dengan labelnya:

Python

//... rest of class
   "linksModuleData": {
        "uris": [
            {
                "uri": "http://maps.google.com/",
                "description": "Nearby Locations",
                "id":"mylink"
            }
        ]
    },
   "classTemplateInfo": {
        "detailsTemplateOverride": {
            "detailsItemInfos": [
                {
                    "item":{
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.linksModuleData.uris['mylink']"
                            }]
                        }
                    }
                }
            ]
        }
     }
//... rest of class
    

Java

 //... rest of class
  .setLinksModuleData((new ArrayList<LinksModuleData>() {
    {
      add((new LinksModuleData()).setDescription("Nearby Locations")
        .setUri("http://maps.google.com/")
        .setId("mylink"));
      }))
      .setClassTemplateInfo((new ClassTemplateInfo())
        .setDetailsTemplateOverride((new DetailsTemplateOverride())
          .setDetailsItemInfos(new ArrayList<DetailsItemInfo>(){
            {
              add((new DetailsItemInfo())
                .setItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
                  {
                    add((new FieldReference()).setFieldPath("class.linksModuleData.uris['mylink']"));
                  }
                }))));
              }
            }))
//... rest of class
    

PHP



    //... rest of class building
    $locationUri = new Google_Service_Walletobjects_Uri();
    $locationUri->setUri("http://maps.google.com/");
    $locationUri->setDescription("Nearby Locations");
    $locationUri->setId("mylink");

    $linksModuleData = new Google_Service_Walletobjects_LinksModuleData();
    $linksModuleData->setUris(array($locationUri));

    $detailItemFieldReference = new Google_Service_Walletobjects_FieldReference();
    $detailItemFieldReference->setFieldPath("class.linksModuleData.uris['mylink']");
    $detailItemFieldSelector = new Google_Service_Walletobjects_FieldSelector();
    $detailItemFieldSelector->setFields(array($detailItemFieldReference));

    $detailItem = new Google_Service_Walletobjects_TemplateItem();
    $detailItem->setFirstValue($detailItemFieldSelector);

    $detailsItemInfo = new Google_Service_Walletobjects_DetailsItemInfo();
    $detailsItemInfo->setItem($detailItem);

    $cardDetailsTemplateOverride = new Google_Service_Walletobjects_DetailsTemplateOverride();
    $cardDetailsTemplateOverride->setDetailsItemInfos(array($detailsItemInfo));

    $classTemplateInfo = new Google_Service_Walletobjects_ClassTemplateInfo();
    $classTemplateInfo->setDetailsTemplateOverride($cardDetailsTemplateOverride);

    $payload->setClassTemplateInfo($classTemplateInfo);
    $payload->setLinksModuleData($linksModuleData);
    //... rest of class
    

Kode ini membuat kartu dengan format bagian detail berikut:

Contoh penggantian detail.

Jika item kosong, item tersebut tidak akan ditampilkan. Untuk detail selengkapnya, lihat Referensi Kolom.

Jika Anda tidak mengganti template detail, daftar default kolom referensi dalam urutan default akan ditampilkan. Untuk informasi selengkapnya, lihat Template default.

Template daftar

Mencantumkan elemen template
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.programLogo
  4. class.hexBackgroundColor

Bagian template daftar digunakan untuk memilih kolom yang akan ditampilkan di tampilan "Kartu" aplikasi Google Pay. Kartu tersebut direpresentasikan dalam daftar dengan logo, warna latar belakang, dan tiga baris.

Contoh kode berikut menunjukkan cara mengganti template daftar kartu untuk menampilkan kolom tanggal habis masa berlaku objek kartu tunggal di baris pertama template daftar:

Python


#... rest of class definition
   "classTemplateInfo": {
        "listTemplateOverride":{
            "firstRowOption": {
                "fieldOption":{
                    "fields": [{
                        "fieldPath": "object.validTimeInterval.end"
                    }]
                }
            }
        }
   }
}
    

Java

//... rest of class
  .setClassTemplateInfo((new ClassTemplateInfo())
    .setListTemplateOverride((new ListTemplateOverride())
      .setFirstRowOption((new FirstRowOption())
        .setFieldOption((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
          {
            add((new FieldReference()).setFieldPath("object.validTimeInterval.end"));
          }
        }))))
//... rest of class
    

PHP

    //... rest of class
    $fieldReference = new Google_Service_Walletobjects_FieldReference();
    $fieldReference->setFieldPath("object.validTimeInterval.end");

    $fieldOption = new Google_Service_Walletobjects_FieldSelector();
    $fieldOption->setFields(array($fieldReference));

    $firstRowOption = new Google_Service_Walletobjects_FirstRowOption();
    $firstRowOption->setFieldOption($fieldOption);

    $listTemplateOverride = new Google_Service_Walletobjects_ListTemplateOverride();
    $listTemplateOverride->setFirstRowOption($firstRowOption);

    $classTemplateInfo = new Google_Service_Walletobjects_ClassTemplateInfo();
    $classTemplateInfo->setListTemplateOverride($listTemplateOverride);

    $payload->setClassTemplateInfo($classTemplateInfo);
    //... rest of class
    

Kode ini membuat kartu dengan rendisi template daftar berikut:

Contoh penggantian daftar.

Tiga baris ini dapat ditentukan dengan pemilih kolom. Kolom ditampilkan tanpa label.

Label

Semua kolom data terstruktur memiliki label yang diberikan oleh Google. Google bertanggung jawab untuk memberikan terjemahan untuk setiap label tersebut dalam semua bahasa yang didukung.

Anda dapat menyesuaikan beberapa label ini menggunakan salah satu kolom class.custom<name_of_the_field>Label. Saat menyesuaikan label, Anda bertanggung jawab menyediakan terjemahan untuk label tersebut dalam semua bahasa yang ingin didukung.

Referensi kolom

Referensi kolom digunakan di berbagai bagian template dengan bentuk class.classTemplateInfo.*.fields[]. Referensi kolom berisi daftar jalur ke kolom data terstruktur, kolom modul teks, kolom modul link, kolom modul gambar, atau pesan.

Tidak semua jenis jalur diizinkan di setiap referensi kolom. Misalnya, beberapa referensi kolom hanya mengizinkan jalur ke kolom data terstruktur berbasis teks atau kolom modul teks. Kolom terstruktur berbasis teks adalah kolom data terstruktur untuk string jenis, string yang dilokalkan, tanggal, atau uang.

Daftar ini dapat digunakan untuk menerapkan logika penggantian. Ini berarti bahwa jika jalur pertama dalam daftar mengarah ke kolom kosong, jalur berikutnya akan dievaluasi. Logika penggantian terutama ditargetkan pada kolom data terstruktur berbasis teks atau kolom modul teks. Jangan mencampur berbagai jenis kolom dalam daftar yang sama. Gunakan logika penggantian dengan hati-hati dan hanya dalam situasi tertentu ketika Anda mengharapkan pola kolom yang konsisten dan ada di beberapa objek, tetapi tidak di objek lainnya. Sering kali, membuat class terpisah lebih mudah untuk membuat kasus penggunaan terpisah.

Jika semua jalur dalam daftar referensi kolom menyelesaikan kolom kosong, item yang menggunakan referensi kolom tersebut tidak akan ditampilkan. Jika Anda ingin item yang menggunakan referensi kolom selalu ada, pastikan minimal satu jalur tidak kosong. Sebaiknya Anda menetapkan kolom ke karakter khusus, seperti '-', untuk mewakili nilai null, meskipun beberapa kolom mengizinkan string hanya dengan spasi.

Untuk mereferensikan kolom yang terdapat dalam daftar, Anda dapat menggunakan indeks kolom dalam daftar atau, dalam sebagian besar kasus, Anda dapat menggunakan ID referensi. Item daftar yang dapat direferensikan oleh ID memiliki kolom .id. Sebaiknya gunakan ID referensi daripada indeks kolom dalam daftar jika tersedia.

Berikut adalah contoh cara mereferensikan kolom yang terdapat dalam daftar.

  • object.imageModulesData[0].id = my-first-id
  • object.imageModulesData[1].id = my-second-id
  • class.detailsTemplateOverride.detailsItemInfos[0].item.firstValue.fields[0].fieldPath = object.imageModulesData[‘my-second-id’]
  • class.detailsTemplateOverride.detailsItemInfos[1].item.firstValue.fields[0].fieldPath = object.imageModulesData[0]

Dalam hal ini, item pertama di bagian detail kartu adalah gambar kedua yang dideklarasikan dalam objek. Sedangkan, item kedua di bagian detail kartu adalah gambar pertama yang dideklarasikan dalam objek.

Template default

Android

Elemen template default
  1. class.programLogo
  2. class.localizedIssuerName
    atau class.issuerName
  3. class.localizedProgramName
    atau class.programName
  4. POINTS
    atau object.loyaltyPoints.localizedLabel
    atau object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. REWARD
    atau object.secondaryLoyaltyPoints.localizedLabel
    atau object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type dan object.barcode.value
    atau object.accountId
  9. object.barcode.alternateText
    atau object.accountId
    atau object.barcode.value
  10. object.heroImage
    atau class.heroImage
  11. class.hexBackgroundColor
  12. NAMA ANGGOTA
    atau class.localizedAccountNameLabel
    atau class.accountNameLabel
  13. object.accountName
  14. ID ANGGOTA
    atau class.localizedAccountIdLabel
    atau class.accountIdLabel
  15. object.accountId
  16. Reward TINGKAT
    atau class.localizedRewardsTierLabel
    atau class.rewardsTierLabel
  17. class.localizedRewardsTier
    atau class.rewardsTier
  18. TINGKAT REWARD TERTENTU
    atau class.localizedSecondaryRewardsTierLabel
    atau class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    atau class.secondaryRewardsTier
  20. class.imageModulesData[0].mainImage
  21. object.imageModulesData[0].mainImage
  22. class.messages[].header
  23. class.messages[].body
  24. object.messages[].header
  25. object.messages[].body
  26. class.textModulesData[0..9].header
  27. class.textModulesData[0..9].body
  28. object.textModulesData[0..9].header
  29. object.textModulesData[0..9].body
  30. class.linksModuleData.uris[].description
  31. object.linksModuleData.uris[].description
  32. class.homepageUri

Web

Elemen template default
  1. class.programLogo
  2. class.localizedIssuerName
    atau class.issuerName
  3. class.localizedProgramName
    atau class.programName
  4. POINTS
    atau object.loyaltyPoints.localizedLabel
    atau object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. REWARD
    atau object.secondaryLoyaltyPoints.localizedLabel
    atau object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type dan object.barcode.value
    atau object.accountId
  9. object.barcode.alternateText
    atau object.accountId
    atau object.barcode.value
  10. object.heroImage
    atau class.heroImage
  11. class.hexBackgroundColor
  12. NAMA ANGGOTA
    atau class.localizedAccountNameLabel
    atau class.accountNameLabel
  13. object.accountName
  14. ID ANGGOTA
    atau class.localizedAccountIdLabel
    atau class.accountIdLabel
  15. object.accountId
  16. Reward TINGKAT
    atau class.localizedRewardsTierLabel
    atau class.rewardsTierLabel
  17. class.localizedRewardsTier
    atau class.rewardsTier
  18. TINGKAT REWARD TERTENTU
    atau class.localizedSecondaryRewardsTierLabel
    atau class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    atau class.secondaryRewardsTier
  20. class.imageModulesData[0].mainImage
  21. object.imageModulesData[0].mainImage
  22. class.messages[].header
  23. class.messages[].body
  24. object.messages[].header
  25. object.messages[].body
  26. class.textModulesData[0..9].header
  27. class.textModulesData[0..9].body
  28. object.textModulesData[0..9].header
  29. object.textModulesData[0..9].body
  30. class.linksModuleData.uris[].description
  31. object.linksModuleData.uris[].description
  32. class.homepageUri

Untuk kolom modul gambar, kami menampilkan satu dan hanya satu kolom modul gambar dari class serta satu dan hanya satu kolom modul gambar dari objek. Jika Anda memerlukan lebih dari satu kolom modul gambar di kedua level, ganti template default.

Untuk kolom modul teks, kita hanya menampilkan maksimum 10 kolom modul teks dari class dan 10 kolom modul teks dari objek. Kolom ditampilkan dalam urutan yang sama seperti yang ditentukan dalam array. Jika Anda memerlukan lebih dari 10 kolom modul teks di kedua level, ganti template default.

Untuk pesan, kita hanya menampilkan maksimum 10 pesan dari class dan 10 pesan dari objek. Kami tidak menjamin urutan pesan. Jika Anda memerlukan lebih dari 10 pesan di salah satu level, atau jaminan untuk pesanan apa pun, ganti template default.

Untuk kolom modul link, tidak ada batasan jumlah URI yang dapat Anda tentukan. Uri dikelompokkan berdasarkan urutan berikut untuk setiap level (class atau objek):

  1. Koordinat peta
  2. Nomor telepon
  3. Alamat email
  4. Halaman web

Untuk setiap grup, URI ditampilkan dalam urutan yang sama seperti yang ditetapkan dalam array. Jika Anda memerlukan urutan yang berbeda, ganti template default.

Elemen template daftar default
  1. class.localizedIssuerName
    atau class.issuerName
  2. class.localizedProgramName
    atau class.programName
  3. class.programLogo
  4. class.hexBackgroundColor