Template boarding pass

Boarding pass mendukung rendering template. Jika tidak ada template yang ditentukan, template default akan digunakan.

Definisi template

Template kartu didefinisikan di tingkat class dan digunakan untuk menampilkan objek apa pun yang terkait dengan class. Template menentukan kolom mana yang akan ditampilkan di berbagai bagian kartu.

Template ini dibagi menjadi beberapa bagian berikut:

Android

Ringkasan bagian dan posisi tata letak template kartu

Web

Ringkasan bagian dan posisi tata letak template kartu

Judul kartu

Android

Elemen tata letak judul kartu dan posisi kolom Judul kartu default
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    atau class.localizedIssuerName
    atau class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    atau class.flightHeader.carrier.carrierIcaoCode)
    dan class.flightHeader.flightNumber
  4. kota bandara (berasal dari class.origin.airportIataCode)
    atau class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. kota bandara (berasal dari class.destination.airportIataCode)
    atau class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. object.hexBackgroundColor
    atau class.hexBackgroundColor

Judul kartu logo lebar
  1. class.flightHeader.wideAirlineLogo
  2. (class.flightHeader.carrier.carrierIataCode
    atau class.flightHeader.carrier.carrierIcaoCode)
    dan class.flightHeader.flightNumber
  3. kota bandara (berasal dari class.origin.airportIataCode)
    atau class.origin.airportNameOverride
  4. class.origin.airportIataCode
  5. kota bandara (berasal dari class.destination.airportIataCode)
    atau class.destination.airportNameOverride
  6. class.destination.airportIataCode
  7. object.hexBackgroundColor
    atau class.hexBackgroundColor

Web

Elemen tata letak judul kartu dan posisi kolom Judul kartu default
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    atau class.localizedIssuerName
    atau class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    atau class.flightHeader.carrier.carrierIcaoCode)
    dan class.flightHeader.flightNumber
  4. kota bandara (berasal dari class.origin.airportIataCode)
    atau class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. kota bandara (berasal dari class.destination.airportIataCode)
    atau class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. object.hexBackgroundColor
    atau class.hexBackgroundColor

Judul kartu logo lebar
  1. class.flightHeader.wideAirlineLogo
  2. (class.flightHeader.carrier.carrierIataCode
    atau class.flightHeader.carrier.carrierIcaoCode)
    dan class.flightHeader.flightNumber
  3. kota bandara (berasal dari class.origin.airportIataCode)
    atau class.origin.airportNameOverride
  4. class.origin.airportIataCode
  5. kota bandara (berasal dari class.destination.airportIataCode)
    atau class.destination.airportNameOverride
  6. class.destination.airportIataCode
  7. object.hexBackgroundColor
    atau class.hexBackgroundColor

Bagian judul kartu menampilkan logo, nama maskapai penerbangan, dan ringkasan penerbangan. Ketiga elemen ini wajib ada dan baik referensi kolom yang digunakan untuk mengisinya maupun posisinya tidak dapat diubah.

Jika class.origin.airportNameOverride atau class.destination.airportNameOverride tidak ditetapkan, nama kota bandara akan diisi secara otomatis dengan kota yang terkait dengan kode IATA di class.origin.airportIataCode dan class.destination.airportIataCode masing-masing.

Jika kolom logo lebar ditetapkan, di perangkat Android, header template default dengan logo dan nama penerbit diganti dengan logo lebar.

Ikuti panduan gambar logo lebar saat membuat logo header lebar untuk menampilkan gambar Anda secara optimal di kartu Anda.

Template kartu

Android

Elemen tata letak baris template kartu dan posisi kolom

Web

Elemen tata letak baris template kartu dan posisi kolom

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 memerlukan setidaknya satu elemen dan sebaiknya gunakan paling banyak 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 ditentukan (.predefinedItem). Nilai kolom yang dipilih dan labelnya masing-masing 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 ditentukan 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 tingkat kelas dan headernya 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 mengetahui detail selengkapnya, lihat Referensi Kolom. Jika semua item dalam baris kosong, baris tidak 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 baris default, jumlah item default, dan referensi kolom default akan digunakan. Untuk mengetahui detail selengkapnya, lihat Template default.

Setelah Anda menentukan Gambar Utama, gambar tersebut dapat muncul setelah baris pertama, jika ada beberapa baris dalam daftar cardRowTemplateInfos, atau di atas baris, jika hanya ada satu baris.

Kode batang kartu

Android

Elemen dan posisi tata letak barcode kartu
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type dan object.barcode.value
    atau object.reservationInfo.confirmationCode
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

Web

Elemen dan posisi tata letak barcode kartu
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type dan object.barcode.value
    atau object.reservationInfo.confirmationCode
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

Bagian barcode kartu digunakan untuk menampilkan teks atau gambar tambahan sebelum dan setelah barcode. Tidak ada kolom yang wajib diisi di bagian ini.

Ada tiga pemilih kolom yang dapat digunakan untuk menentukan dua kolom berdampingan sebelum dan satu setelah kode batang. Kolom 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 merek.

Kode batang ditentukan oleh jenis dan nilai. Untuk mengetahui 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 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.

Bagian bawah

Android

Bagian dan item bawah 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 dan item bawah 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 bawah adalah daftar item class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. Item dapat berisi berbagai jenis kolom data terstruktur, kolom modul teks, kolom modul link, kolom modul gambar, atau pesan.

Setiap item dapat ditentukan sebagai satu pemilih kolom (.firstValue), dua pemilih kolom (.firstValue dan .secondValue), atau item yang telah ditentukan (.predefinedItem). Nilai kolom yang dipilih dan labelnya masing-masing 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 ditentukan digunakan untuk menentukan rendering yang lebih kompleks. Kolom modul gambar dirender dengan lebar penuh tanpa label.

Contoh kode berikut menunjukkan cara mengganti bagian bawah 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 bawah berikut:

Contoh bagian bawah
                                                                             penggantian.

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

Jika Anda tidak mengganti bagian bawah, daftar kolom referensi default dalam urutan default akan ditampilkan. Untuk mengetahui informasi selengkapnya, lihat Template default.

Template daftar

Mencantumkan elemen template
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.localScheduledDepartureDateTime
      (hanya tanggal) (dikelompokkan)
    atau class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.flightHeader.carrier.airlineLogo
  4. object.hexBackgroundColor
    atau class.hexBackgroundColor
  5. <# passes> (dikelompokkan)

Bagian template daftar digunakan untuk memilih kolom yang akan ditampilkan di tampilan "Kartu" pada aplikasi Google Wallet. Kartu ditampilkan 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 tampilan template daftar berikut:

Contoh penggantian
                                                                           daftar.

Tiga baris dapat ditentukan dengan pemilih kolom. Kolom ditampilkan tanpa label. Untuk kartu grup, baris kedua selalu menampilkan tanggal keberangkatan terjadwal lokal dan baris ketiga selalu menampilkan jumlah kartu grup.

Referensi kolom

Referensi kolom digunakan di berbagai bagian template dengan formulir 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 dalam 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 berjenis string, string yang dilokalkan, tanggal, atau uang.

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

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

Untuk merujuk ke kolom yang ada dalam daftar, Anda dapat menggunakan indeks kolom dalam daftar atau, dalam sebagian besar kasus, Anda dapat menggunakan ID referensi. Item daftar yang dapat dirujuk berdasarkan ID memiliki kolom .id. Sebaiknya gunakan ID referensi daripada indeks kolom dalam daftar jika tersedia.

Berikut adalah contoh cara mereferensikan kolom yang ada 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 dinyatakan dalam objek. Sementara itu, item kedua di bagian detail kartu adalah gambar pertama yang dideklarasikan dalam objek.

Template default

Android

Elemen dan posisi tata letak template kartu default
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    atau class.localizedIssuerName
    atau class.issuerName
  3. class.origin.airportIataCode
  4. class.destination.airportIataCode
  5. kota bandara (berasal dari class.origin.airportIataCode)
    atau class.origin.airportNameOverride
  6. kota bandara (berasal dari class.destination.airportIataCode)
    atau class.destination.airportNameOverride
  7. (class.flightHeader.carrier.carrierIataCode
    atau class.flightHeader.carrier.carrierIcaoCode)
    dan class.flightHeader.flightNumber
  8. object.securityProgramLogo
  9. object.boardingAndSeatingInfo.boardingPrivilegeImage
  10. object.barcode.type dan object.barcode.value
    atau object.reservationInfo.confirmationCode
  11. object.barcode.alternateText
  12. class.flightHeader.carrier.airlineAllianceLogo
  13. PENUMPANG
  14. object.passengerName
  15. ZONE (default) atau GROUP (bergantung pada
    class.boardingAndSeatingPolicy.boardingPolicy) dan
  16. SEAT
  17. object.boardingAndSeatingInfo.boardingGroup dan
  18. object.boardingAndSeatingInfo.seatNumber
    atau object.boardingAndSeatingInfo.seatAssignment
  19. TERMINAL
  20. GATE
  21. class.origin.terminal
  22. class.origin.gate
  23. NAIK PESAWAT
  24. class.localBoardingDateTime
  25. KABIN (default) atau KELAS atau TINGKAT (bergantung pada
    class.boardingAndSeatingPolicy.SeatClassPolicy)
  26. object.boardingAndSeatingInfo.SeatClass
  27. KEBERANGKATAN
  28. class.localScheduledDepartureDateTime
  29. object.hexBackgroundColor
    atau class.hexBackgroundColor
  30. object.heroImage
    atau class.heroImage
  31. NOMOR KONFIRMASI
  32. object.reservationInfo.confirmationCode
  33. NOMOR FREQUENT FLYER
  34. object.reservationInfo.frequentFlyerInfo.frequentFlyerNumber
    dan object.reservationInfo.frequentFlyerInfo.frequentFlyerProgramName
  35. WAKTU KEDATANGAN TERJADWAL
  36. class.localScheduledArrivalDateTime
  37. class.messages[].header
  38. class.messages[].body
  39. object.messages[].header
  40. object.messages[].body
  41. class.textModulesData[0..9].header
  42. class.textModulesData[0..9].body
  43. object.textModulesData[0..9].header
  44. object.textModulesData[0..9].body
  45. class.linksModuleData.uris[].description
  46. object.linksModuleData.uris[].description

Web

Elemen dan posisi tata letak template kartu default
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    atau class.localizedIssuerName
    atau class.issuerName
  3. class.origin.airportIataCode
  4. class.destination.airportIataCode
  5. kota bandara (berasal dari class.origin.airportIataCode)
    atau class.origin.airportNameOverride
  6. kota bandara (berasal dari class.destination.airportIataCode)
    atau class.destination.airportNameOverride
  7. (class.flightHeader.carrier.carrierIataCode
    atau class.flightHeader.carrier.carrierIcaoCode)
    dan class.flightHeader.flightNumber
  8. object.securityProgramLogo
  9. object.boardingAndSeatingInfo.boardingPrivilegeImage
  10. object.barcode.type dan object.barcode.value
    atau object.reservationInfo.confirmationCode
  11. object.barcode.alternateText
  12. class.flightHeader.carrier.airlineAllianceLogo
  13. PENUMPANG
  14. object.passengerName
  15. ZONE (default) atau GROUP (bergantung pada
    class.boardingAndSeatingPolicy.boardingPolicy) dan
  16. SEAT
  17. object.boardingAndSeatingInfo.boardingGroup dan
  18. object.boardingAndSeatingInfo.seatNumber
    atau object.boardingAndSeatingInfo.seatAssignment
  19. TERMINAL
  20. GATE
  21. class.origin.terminal
  22. class.origin.gate
  23. NAIK PESAWAT
  24. class.localBoardingDateTime
  25. KABIN (default) atau KELAS atau TINGKAT (bergantung pada
    class.boardingAndSeatingPolicy.SeatClassPolicy)
  26. object.boardingAndSeatingInfo.SeatClass
  27. KEBERANGKATAN
  28. class.localScheduledDepartureDateTime
  29. object.hexBackgroundColor
    atau class.hexBackgroundColor
  30. object.heroImage
    atau class.heroImage
  31. NOMOR KONFIRMASI
  32. object.reservationInfo.confirmationCode
  33. NOMOR FREQUENT FLYER
  34. object.reservationInfo.frequentFlyerInfo.frequentFlyerNumber
    dan object.reservationInfo.frequentFlyerInfo.frequentFlyerProgramName
  35. WAKTU KEDATANGAN TERJADWAL
  36. class.localScheduledArrivalDateTime
  37. class.messages[].header
  38. class.messages[].body
  39. object.messages[].header
  40. object.messages[].body
  41. class.textModulesData[0..9].header
  42. class.textModulesData[0..9].body
  43. object.textModulesData[0..9].header
  44. object.textModulesData[0..9].body
  45. class.linksModuleData.uris[].description
  46. object.linksModuleData.uris[].description

Secara default, bagian bawah juga menampilkan object.boardingAndSeatingInfo.boardingGroup, object.boardingAndSeatingInfo.seatClass, dan object.boardingAndSeatingInfo.seatNumber jika bagian kartu diganti dan kolom ini tidak lagi ada di bagian kartu.

Untuk kolom modul gambar, kami menampilkan satu dan hanya satu kolom modul gambar dari class dan satu dan hanya satu kolom modul gambar dari objek. Jika Anda memerlukan lebih dari satu kolom modul gambar di tingkat mana pun, ganti template default.

Untuk kolom modul teks, kami hanya menampilkan maksimum 20 kolom modul teks dari class dan 20 kolom modul teks dari objek. Kolom ditampilkan dalam urutan yang sama dengan urutan yang ditentukan dalam array. Jika Anda memerlukan lebih dari 20 kolom modul teks di tingkat mana pun, ganti template default.

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

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

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

Untuk setiap grup, URI ditampilkan dalam urutan yang sama dengan urutan yang ditentukan dalam array. Jika Anda memerlukan pengurutan yang berbeda, ganti template default.

Elemen dan posisi tata letak template daftar default
  1. class.origin.airportIataCode
    dan class.destination.airportIataCode
  2. class.localScheduledDepartureDateTime
    (hanya tanggal)
  3. class.flightHeader.carrier.airlineLogo
  4. object.hexBackgroundColor
    atau class.hexBackgroundColor
  5. <# passes> (dikelompokkan)