登機證範本

登機證支援範本轉譯。如未定義範本,系統會使用預設範本。

範本定義

票證範本是在類別層級定義,用於顯示與類別相關聯的任何物件。範本會定義要在票證的不同部分顯示哪些欄位。

範本分為以下幾個部分:

Android

票證範本版面配置區段和位置總覽

網頁

票證範本版面配置區段和位置總覽

資訊卡標題

Android

資訊卡標題版面配置元素和欄位位置 預設卡片標題
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    或 class.localizedIssuerName
    或 class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    或 class.flightHeader.carrier.carrierIcaoCode)
    和 class.flightHeader.flightNumber
  4. 機場所在城市 (衍生自 class.origin.airportIataCode)
    或 class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. 機場所在城市 (衍生自 class.destination.airportIataCode)
    或 class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. object.hexBackgroundColor
    或 class.hexBackgroundColor

寬標誌資訊卡標題
  1. class.flightHeader.wideAirlineLogo
  2. (class.flightHeader.carrier.carrierIataCode
    或 class.flightHeader.carrier.carrierIcaoCode)
    和 class.flightHeader.flightNumber
  3. 機場所在城市 (衍生自 class.origin.airportIataCode)
    或 class.origin.airportNameOverride
  4. class.origin.airportIataCode
  5. 機場所在城市 (衍生自 class.destination.airportIataCode)
    或 class.destination.airportNameOverride
  6. class.destination.airportIataCode
  7. object.hexBackgroundColor
    或 class.hexBackgroundColor

網頁

資訊卡標題版面配置元素和欄位位置 預設卡片標題
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    或 class.localizedIssuerName
    或 class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    或 class.flightHeader.carrier.carrierIcaoCode)
    和 class.flightHeader.flightNumber
  4. 機場所在城市 (衍生自 class.origin.airportIataCode)
    或 class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. 機場所在城市 (衍生自 class.destination.airportIataCode)
    或 class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. object.hexBackgroundColor
    或 class.hexBackgroundColor

寬標誌資訊卡標題
  1. class.flightHeader.wideAirlineLogo
  2. (class.flightHeader.carrier.carrierIataCode
    或 class.flightHeader.carrier.carrierIcaoCode)
    和 class.flightHeader.flightNumber
  3. 機場所在城市 (衍生自 class.origin.airportIataCode)
    或 class.origin.airportNameOverride
  4. class.origin.airportIataCode
  5. 機場所在城市 (衍生自 class.destination.airportIataCode)
    或 class.destination.airportNameOverride
  6. class.destination.airportIataCode
  7. object.hexBackgroundColor
    或 class.hexBackgroundColor

資訊卡標題部分會顯示標誌、航空公司名稱和航班摘要。這三個元素缺一不可,且用於填入這些元素的欄位參照和位置都無法變更。

如未設定 class.origin.airportNameOverride 或 class.destination.airportNameOverride,系統會根據 class.origin.airportIataCode 和 class.destination.airportIataCode 中的 IATA 代碼,自動填入機場的城市名稱。

設定寬版標誌欄位後,行動裝置上含有標誌和核發機構名稱的預設範本標頭,會替換為寬版標誌。

建立寬版標頭標誌時,請遵循寬版標誌圖片規範,以最佳方式在票證上顯示圖片。

卡片範本

Android

資訊卡範本列版面配置元素和欄位位置

網頁

資訊卡範本列版面配置元素和欄位位置

資訊卡範本部分用於顯示額外資料列。這些資料列可包含文字結構化資料欄位或文字模組欄位。

您可以指定資料列數量,定義 class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[] 清單中的物件數量。清單至少須包含一個元素,建議最多使用兩個元素。每個元素都必須是下列其中一種類型:

  • oneItem,可接受一個項目:
    • item
  • twoItems,可接受兩個項目:
    • startItem
    • endItem
  • threeItems,可接受三個項目:
    • startItem
    • middleItem
    • endItem

每個項目都可以定義為單一欄位選取器 (.firstValue)、兩個欄位選取器 (.firstValue 和 .secondValue) 或預先定義的項目 (.predefinedItem)。系統會顯示所選欄位的值和各自的標籤。定義兩個欄位選取器時,所選欄位的值會以「/」分隔符顯示。所選欄位的標籤也是如此。預先定義的項目可用來定義更複雜的轉譯。

下列程式碼範例說明如何覆寫資訊卡範本資訊卡列區段,以指定兩列。每列包含三個項目,每個項目分別參照六個類別層級 textModuleData 自訂欄位,並以其標頭做為標籤:

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);
    

程式碼會使用下列程式碼範本區段格式建立票證:

標籤覆寫範例。

如果項目空白,就不會顯示。詳情請參閱「欄位參考資料」。如果資料列中的所有項目都是空白,系統就不會顯示該資料列。如果一列中只有部分項目空白,系統會重新排列非空白項目,並顯示為項目較少的一列。

如未覆寫資訊卡範本,系統會使用預設的列數、項目數和欄位參照。詳情請參閱「預設範本」。

定義主頁橫幅後,如果 cardRowTemplateInfos 清單中有多個資料列,主頁橫幅可能會顯示在第一個資料列之後;如果只有一個資料列,則會顯示在資料列上方。

卡片條碼

Android

卡片條碼版面配置元素和位置
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type 和 object.barcode.value
    或 object.reservationInfo.confirmationCode
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

網頁

卡片條碼版面配置元素和位置
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type 和 object.barcode.value
    或 object.reservationInfo.confirmationCode
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

資訊卡條碼部分用於顯示條碼前後的額外文字或圖片。這個部分的所有欄位皆為選填。

您可以使用三個欄位選取器,定義條碼前後的兩個並排欄位和一個後續欄位。這類欄位不會顯示標籤,可以是文字結構化資料欄位、文字模組欄位或圖片模組欄位。如果使用圖片,請務必遵守品牌宣傳指南。

條碼是由類型和值定義。如需支援的條碼類型清單,請參閱參考資料。此外,條碼下方也可以顯示文字。這段文字可讓您更輕鬆地掃描條碼,以及用於其他用途。

下列程式碼範例說明如何覆寫票證的條碼部分,在條碼上方顯示圖片:

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);
    

程式碼會建立票證,並採用下列條碼區段格式:

卡片條碼覆寫範例。

如未覆寫條碼部分,系統會使用預設條碼欄位。詳情請參閱「預設範本」。

底部

Android

詳細資料範本底部區段和項目
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • ...

網頁

詳細資料範本底部區段和項目
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • ...

底部區段是項目清單 class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]。項目可包含任何類型的結構化資料欄位、文字模組欄位、連結模組欄位、圖片模組欄位或訊息。

每個項目都可以定義為單一欄位選取器 (.firstValue)、兩個欄位選取器 (.firstValue 和 .secondValue) 或預先定義的項目 (.predefinedItem)。系統會顯示所選欄位的值和各自的標籤。定義兩個欄位選取器時,所選欄位的值會以「/」分隔符顯示。所選欄位的標籤也是如此。預先定義的項目可用來定義更複雜的轉譯。圖片模組欄位會以全寬顯示,不含標籤。

以下程式碼範例說明如何覆寫票證底部,顯示單一 linksModuleData 欄位及其標籤:

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
    

程式碼會建立具有下列底部格式的票證:

底部區段覆寫範例。

如果項目空白,就不會顯示。詳情請參閱「欄位參考資料」。

如未覆寫底部區段,系統會依預設順序顯示參考欄位的預設清單。詳情請參閱「預設範本」。

清單範本

清單範本元素
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.localScheduledDepartureDateTime
      (僅限日期) (分組)
    或 class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.flightHeader.carrier.airlineLogo
  4. object.hexBackgroundColor
    或 class.hexBackgroundColor
  5. <# passes> (grouped)

清單範本部分用於選取要在 Google 錢包應用程式的「票證」檢視畫面中顯示的欄位。票證在清單中會以標誌、背景顏色和三列顯示。

以下程式碼範例說明如何覆寫票證的清單範本,在清單範本的第一列顯示單一票證物件的到期日欄位:

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
    

程式碼會建立票證,並使用下列清單範本轉譯:

清單覆寫範例。

這三個資料列可使用欄位選取器定義。 欄位會顯示,但沒有標籤。 如果是分組票證,第二列一律會顯示當地預定出發日期,第三列則一律會顯示分組票證數量。

欄位參照

欄位參照會以 class.classTemplateInfo.*.fields[] 格式用於範本的不同部分。欄位參照包含結構化資料欄位、文字模組欄位、連結模組欄位、圖片模組欄位或訊息的路徑清單。

並非所有類型的路徑都允許在每個欄位參照中使用。舉例來說,部分欄位參照只允許路徑指向文字結構化資料欄位或文字模組欄位。文字結構化欄位是字串、本地化字串、日期或金額類型的結構化資料欄位。

這份清單可用於實作備用邏輯。也就是說,如果清單中的第一個路徑解析為空白欄位,系統就會評估下一個路徑。備用邏輯主要用於文字型結構化資料欄位或文字模組欄位。請勿在同一份清單中混用不同類型的欄位。請謹慎使用備用邏輯,且僅在特定情況下使用,例如您預期某些物件中存在一致的欄位模式,但其他物件中不存在。在大多數情況下,為不同的用途建立不同的類別會比較容易。

如果欄位參照清單中的所有路徑都解析為空白欄位,系統就不會顯示使用該欄位參照的項目。如要一律顯示使用欄位參照的項目,請確認至少有一個路徑不為空白。建議您將欄位設為特殊字元 (例如「-」) 來代表空值,即使某些欄位允許僅含空格的字串也一樣。

如要參照清單中的欄位,可以使用清單中欄位的索引,或在多數情況下使用參照 ID。可透過 ID 參照的清單項目具有 .id 欄位。建議您盡可能使用參照 ID,而非清單中的欄位索引。

以下範例說明如何參照清單中的欄位。

  • 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]

在這種情況下,票證詳細資料部分的第一個項目,就是物件中宣告的第二張圖片。票證詳細資料部分的第二個項目,則是物件中宣告的第一張圖片。

預設範本

Android

預設票證範本版面配置元素和位置
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    或 class.localizedIssuerName
    或 class.issuerName
  3. class.origin.airportIataCode
  4. class.destination.airportIataCode
  5. 機場所在城市 (衍生自 class.origin.airportIataCode)
    或 class.origin.airportNameOverride
  6. 機場所在城市 (衍生自 class.destination.airportIataCode)
    或 class.destination.airportNameOverride
  7. (class.flightHeader.carrier.carrierIataCode
    或 class.flightHeader.carrier.carrierIcaoCode)
    和 class.flightHeader.flightNumber
  8. object.securityProgramLogo
  9. object.boardingAndSeatingInfo.boardingPrivilegeImage
  10. object.barcode.type 和 object.barcode.value
    或 object.reservationInfo.confirmationCode
  11. object.barcode.alternateText
  12. class.flightHeader.carrier.airlineAllianceLogo
  13. 乘客
  14. object.passengerName
  15. ZONE (預設) 或 GROUP (取決於
    class.boardingAndSeatingPolicy.boardingPolicy) 和
  16. SEAT (喜悅)
  17. object.boardingAndSeatingInfo.boardingGroup和
  18. object.boardingAndSeatingInfo.seatNumber
    或 object.boardingAndSeatingInfo.seatAssignment
  19. 終端機
  20. 大學生工程能力測驗 (GATE)
  21. class.origin.terminal
  22. class.origin.gate
  23. 登機
  24. class.localBoardingDateTime
  25. CABIN (預設) 或 CLASS 或 TIER (視
    class.boardingAndSeatingPolicy.SeatClassPolicy 而定)
  26. object.boardingAndSeatingInfo.SeatClass
  27. 出發
  28. class.localScheduledDepartureDateTime
  29. object.hexBackgroundColor
    或 class.hexBackgroundColor
  30. object.heroImage
    或 class.heroImage
  31. 確認號碼
  32. object.reservationInfo.confirmationCode
  33. 飛行常客號碼
  34. object.reservationInfo.frequentFlyerInfo.frequentFlyerNumber
    和 object.reservationInfo.frequentFlyerInfo.frequentFlyerProgramName
  35. 預定抵達時間
  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

網頁

預設票證範本版面配置元素和位置
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    或 class.localizedIssuerName
    或 class.issuerName
  3. class.origin.airportIataCode
  4. class.destination.airportIataCode
  5. 機場所在城市 (衍生自 class.origin.airportIataCode)
    或 class.origin.airportNameOverride
  6. 機場所在城市 (衍生自 class.destination.airportIataCode)
    或 class.destination.airportNameOverride
  7. (class.flightHeader.carrier.carrierIataCode
    或 class.flightHeader.carrier.carrierIcaoCode)
    和 class.flightHeader.flightNumber
  8. object.securityProgramLogo
  9. object.boardingAndSeatingInfo.boardingPrivilegeImage
  10. object.barcode.type 和 object.barcode.value
    或 object.reservationInfo.confirmationCode
  11. object.barcode.alternateText
  12. class.flightHeader.carrier.airlineAllianceLogo
  13. 乘客
  14. object.passengerName
  15. ZONE (預設) 或 GROUP (取決於
    class.boardingAndSeatingPolicy.boardingPolicy) 和
  16. SEAT (喜悅)
  17. object.boardingAndSeatingInfo.boardingGroup和
  18. object.boardingAndSeatingInfo.seatNumber
    或 object.boardingAndSeatingInfo.seatAssignment
  19. 終端機
  20. 大學生工程能力測驗 (GATE)
  21. class.origin.terminal
  22. class.origin.gate
  23. 登機
  24. class.localBoardingDateTime
  25. CABIN (預設) 或 CLASS 或 TIER (視
    class.boardingAndSeatingPolicy.SeatClassPolicy 而定)
  26. object.boardingAndSeatingInfo.SeatClass
  27. 出發
  28. class.localScheduledDepartureDateTime
  29. object.hexBackgroundColor
    或 class.hexBackgroundColor
  30. object.heroImage
    或 class.heroImage
  31. 確認號碼
  32. object.reservationInfo.confirmationCode
  33. 飛行常客號碼
  34. object.reservationInfo.frequentFlyerInfo.frequentFlyerNumber
    和 object.reservationInfo.frequentFlyerInfo.frequentFlyerProgramName
  35. 預定抵達時間
  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

根據預設,如果資訊卡部分遭到覆寫,且這些欄位不再出現在資訊卡部分,則底部部分也會顯示 object.boardingAndSeatingInfo.boardingGroup、object.boardingAndSeatingInfo.seatClass 和 object.boardingAndSeatingInfo.seatNumber。

對於圖片模組欄位,我們會顯示類別中的一個圖片模組欄位,以及物件中的一個圖片模組欄位。如果任一層級需要多個圖片模組欄位,請覆寫預設範本。

如果是文字模組欄位,我們最多只會顯示類別中的 20 個文字模組欄位,以及物件中的 20 個文字模組欄位。欄位的顯示順序與在陣列中定義的順序相同。如果任一層級需要超過 20 個文字模組欄位,請覆寫預設範本。

訊息方面,我們最多只會顯示 20 則來自類別的訊息,以及 20 則來自物件的訊息。我們無法保證訊息的顯示順序,如果您在任一層級需要超過 20 則訊息,或需要任何訂單的保證,請覆寫預設範本。

連結模組欄位可定義的 URI 數量沒有上限。URI 會按照下列順序分組顯示,每個層級 (類別或物件) 都有:

  1. 地圖座標
  2. 電話號碼
  3. 電子郵件地址
  4. 網頁

每個群組的 URI 顯示順序與陣列中的定義順序相同。 如需其他排序方式,請覆寫預設範本。

預設清單範本版面配置元素和位置
  1. class.origin.airportIataCode
    和 class.destination.airportIataCode
  2. class.localScheduledDepartureDateTime
    (僅限日期)
  3. class.flightHeader.carrier.airlineLogo
  4. object.hexBackgroundColor
    或 class.hexBackgroundColor
  5. <# passes> (grouped)