大眾運輸票證範本

大眾運輸票證支援範本顯示功能。如未定義任何範本,系統會使用預設範本。

範本定義

系統會在類別層級定義票證範本,用來顯示與類別相關聯的任何物件。範本會定義要在票證的不同區段中顯示的欄位,

範本分為以下幾個部分:

Android

範本總覽

網頁

範本總覽

資訊卡標題

Android

資訊卡標題元素 預設資訊卡標題
  1. class.logo
  2. class.localizedIssuerName
    class.issuerName
  3. object.ticketLeg.originName
  4. object.ticketLeg.destinationName
  5. object.ticketLeg.originStationCode
  6. object.ticketLeg.destinationStationCode
  7. object.tripType
  8. object.hexBackgroundColor
    class.hexBackgroundColor

寬標誌資訊卡標題
  1. class.wideLogo
  2. object.ticketLeg.originName
  3. object.ticketLeg.destinationName
  4. object.ticketLeg.originStationCode
  5. object.ticketLeg.destinationStationCode
  6. object.tripType
  7. object.hexBackgroundColor
    class.hexBackgroundColor

網頁

資訊卡標題元素
  1. class.logo
  2. class.localizedIssuerName
    class.issuerName
  3. object.ticketLeg.originName
  4. object.ticketLeg.destinationName
  5. object.ticketLeg.originStationCode
  6. object.ticketLeg.destinationStationCode
  7. object.tripType
  8. object.hexBackgroundColor
    class.hexBackgroundColor

卡片標題區段會顯示大眾運輸業者的標誌和名稱,以及旅程摘要。這三個元素皆為必填,而用來填入元素的欄位參照和元素位置都無法變更。

不過,顯示邏輯允許在頂端列進行一些彈性調整。如為單段車程的旅程,呈現旅程摘要的票證頂端資料列是由下列 TransitObject 中的欄位控制:

  • object.tripType
  • object.ticketLeg.originName
  • object.ticketLeg.destinationName
  • object.ticketLeg.originStationCode
  • object.ticketLeg.destinationStationCode

票證的顯示方式取決於哪些欄位並非空白。它會以下列方式轉譯:

  • 僅限出發地名稱:出發地名稱是唯一顯示的資訊。如果票證包含某個區域,而非特定旅程,這種顯示方式就格外實用。
  • 出發地與目的地:起點位於左側,目的地則在右側。兩者之間的符號取決於行程類型。出發地與目的地會以下列其中一種方式顯示:
    • 名稱和站點代碼:系統會顯示站點代碼,並在上方以較小的文字顯示名稱。
    • 僅顯示名稱:系統會顯示名稱。
    • 僅顯示站點代碼:系統會顯示站點代碼。

多段車程 TransitObject 物件的運作方式非常類似。在這種情況下,請勿使用 object.ticketLeg。您必須改用 object.ticketLegs[] 清單。且須定義出發地與目的地。在每段車程中必須一致使用名稱或站點代碼,或同時使用兩者。顯示的起點是陣列中第一個元素的起點,而顯示的目的地是陣列中最後一個元素的目的地。

票證的背景顏色並非必填欄位,可以同時在類別層級和物件層級定義。物件欄位有較高的優先順序,可用來覆寫類別欄位。

設定寬標誌欄位後,在 Android 裝置上,預設範本標頭會包含標誌和核發機構名稱,然後替換為寬標誌。

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

資訊卡範本

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.typeobject.barcode.value
    object.ticketNumber
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

網頁

卡片條碼元素
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.typeobject.barcode.value
    object.ticketNumber
  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[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].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
    

程式碼會建立票證,並在其中包含採用以下格式的詳細資料區段:

覆寫詳細資料的範例。

空白項目不會顯示。詳情請參閱欄位參照一節。

如未覆寫詳細資料範本,系統會以預設順序顯示預設參照欄位清單。詳情請參閱預設範本

如果旅程中包含多段車程,區段頂端會顯示無法移動的簡要行程資訊。如果旅程僅含一段車程,您可以設定 class.enableSingleLegItinerary 來顯示簡要行程資訊。

多段車程行程
  1. class.tranistType
  2. object.ticketLegs[i].originName
    object.ticketLegs[i].originStationCode
  3. object.ticketLegs[i].departureDateTime (只顯示時間)
  4. object.ticketLegs[i].transitOperatorName
  5. COACH 或 class.customCoachLabel
  6. object.ticketLegs[i].ticketSeat.coach
    object.ticketLegs[i].ticketSeats[*].coach
  7. SEAT 或 class.customSeatLabel
  8. object.ticketLegs[i].ticketSeat.seat
    object.ticketLegs[i].ticketSeat.seatAssignment
    object.ticketLegs[i].ticketSeats[*].seat
    object.ticketLegs[i].ticketSeats[*].seatAssignment
    或無特定款式
  9. object.hexBackgroundColor
    class.hexBackgroundColor
  10. object.ticketLegs[i].destinationName
    object.ticketLegs[i].destinationStationCode
  11. object.ticketLegs[i].arrivalDateTime (只顯示時間)
  12. 轉移至:平台
    或轉移至:class.customPlatformLabel
    或轉移 (如果未定義任何平台)
  13. object.ticketLegs[i+1].platform

清單範本

清單範本元素
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. object.ticketLeg.departureDateTime (已分組)
    class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.logo
  4. object.hexBackgroundColor
    class.hexBackgroundColor
  5. <# 張票證> (已分組)

清單範本區段可用來選取要在 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
    

程式碼會建立票證,並在其中包含了以下清單範本:

覆寫清單的範例。

第一列可透過欄位選取器定義,或者顯示旅程摘要。摘要格式可為以下任何一種:

  • originAndDestinationCodes
  • originAndDestinationNames
  • originName

第二和第三列只能透過欄位選取器定義。這些欄位都不會顯示任何標籤。如果是分組票證,第二列一律會顯示出發日期,第三列則一律顯示分組票證的數量。

標籤

所有結構化資料欄位都有 Google 提供的標籤。Google 負責為這些標籤提供所有支援的語言翻譯。

您可以使用其中一個 class.custom<name_of_the_field>Label 欄位自訂部分標籤。如果您自訂標籤,就必須負責為該特定標籤提供您要支援的所有語言的翻譯。

欄位參照

欄位參照可用於範本的不同部分,格式為 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.logo
  2. class.localizedIssuerName
    class.issuerName
  3. 查看資訊卡標題
  4. 發車或有效:FROM
  5. object.ticketLeg.departureDateTime (日期和時間)
    object.validTimeInterval.start.date
  6. 抵達時或提前失效
  7. object.ticketLeg.arrivalDateTime (只顯示時間)
    object.validTimeInterval.end.date
  8. 少女
  9. object.passengerNames
  10. CARRIAGE 或 class.customCarriageLabel
  11. object.ticketLeg.carriage
  12. COACH 或 class.customCoachLabel
  13. object.ticketLeg.ticketSeat.coach
  14. SEAT 或 class.customSeatLabel
  15. object.ticketLeg.ticketSeat.seat
    object.ticketLeg.ticketSeat.seatAssignment
  16. object.barcode.typeobject.barcode.value
    object.ticketNumber
  17. object.barcode.alternateText
  18. object.hexBackgroundColor
    class.hexBackgroundColor
  19. 多段車程的行程
  20. TICKET NUMBER 或 class.customTicketNumberLabel
  21. object.ticketNumber
  22. 票卡狀態
  23. object.ticketStatusobject.customTicketStatus
  24. 發車
  25. object.ticketLeg.departureDateTime
  26. 抵達時間
  27. object.ticketLeg.arrivalDateTime
  28. FARE NAME 或 class.customFareNameLabel
  29. object.ticketLeg.fareName
  30. PLATFORM 或 class.customPlatformLabel
  31. object.ticketLeg.platform
  32. ZONE 或 class.customZoneLabel
  33. object.ticketLeg.zone
  34. FARE Class 或 class.customFareClassLabel
  35. object.ticketLeg.ticketSeat.fareClass
    object.ticketLeg.ticketSeat.customFareClass
  36. 敏感類別
    class.customConcessionCategoryLabel
  37. object.concessionCategory
    object.customConcessionCategory
  38. 轉送限制
    class.customRouteRestrictionsLabel
  39. object.ticketRestrictions.routeRestrictions
  40. 轉送限制詳細資料
    class.customRouteRestrictionsDetailsLabel
  41. object.ticketRestrictions.routeRestrictionsDetails
  42. 時間限制
    class.customTimeRestrictionsLabel
  43. object.ticketRestrictions.timeRestrictions
  44. 其他限制
    class.customOtherRestrictionsLabel
  45. object.ticketRestrictions.otherRestrictions
  46. 收據編號
    class.customPurchaseReceiptNumberLabel
  47. object.purchaseDetails.purchaseReceiptNumber
  48. 購買日期
  49. object.purchaseDetails.purchaseDateTime
  50. 帳戶 ID
  51. object.purchaseDetails.accountId
  52. 確認代碼
    class.customConfirmationCodeLabel
  53. object.purchaseDetails.confirmationCode
  54. FACE VALUE 或 class.customPurchaseFaceValueLabel
  55. object.purchaseDetails.ticketCost.faceValue
  56. PRICE 或 class.customPurchasePriceLabel
  57. object.purchaseDetails.ticketCost.purchasePrice
  58. DISCOUNT MESSAGE
    class.customDiscountMessageLabel
  59. object.purchaseDetails.ticketCost.discountMessage
  60. class.imageModulesData[0].mainImage
  61. object.imageModulesData[0].mainImage
  62. class.messages[].header
  63. class.messages[].body
  64. object.messages[].header
  65. object.messages[].body
  66. class.textModulesData[0..9].header
  67. class.textModulesData[0..9].body
  68. object.textModulesData[0..9].header
  69. object.textModulesData[0..9].body
  70. class.linksModuleData.uris[].description
  71. object.linksModuleData.uris[].description

網頁

預設範本元素
  1. class.logo
  2. class.localizedIssuerName
    class.issuerName
  3. 查看資訊卡標題
  4. 發車或有效:FROM
  5. object.ticketLeg.departureDateTime (日期和時間)
    object.validTimeInterval.start.date
  6. 抵達時或提前失效
  7. object.ticketLeg.arrivalDateTime (只顯示時間)
    object.validTimeInterval.end.date
  8. 少女
  9. object.passengerNames
  10. CARRIAGE 或 class.customCarriageLabel
  11. object.ticketLeg.carriage
  12. COACH 或 class.customCoachLabel
  13. object.ticketLeg.ticketSeat.coach
  14. SEAT 或 class.customSeatLabel
  15. object.ticketLeg.ticketSeat.seat
    object.ticketLeg.ticketSeat.seatAssignment
  16. object.barcode.typeobject.barcode.value
    object.ticketNumber
  17. object.barcode.alternateText
  18. object.hexBackgroundColor
    class.hexBackgroundColor
  19. 多段車程的行程
  20. TICKET NUMBER 或 class.customTicketNumberLabel
  21. object.ticketNumber
  22. 票卡狀態
  23. object.ticketStatusobject.customTicketStatus
  24. 發車
  25. object.ticketLeg.departureDateTime
  26. 抵達時間
  27. object.ticketLeg.arrivalDateTime
  28. FARE NAME 或 class.customFareNameLabel
  29. object.ticketLeg.fareName
  30. PLATFORM 或 class.customPlatformLabel
  31. object.ticketLeg.platform
  32. ZONE 或 class.customZoneLabel
  33. object.ticketLeg.zone
  34. FARE Class 或 class.customFareClassLabel
  35. object.ticketLeg.ticketSeat.fareClass
    object.ticketLeg.ticketSeat.customFareClass
  36. 敏感類別
    class.customConcessionCategoryLabel
  37. object.concessionCategory
    object.customConcessionCategory
  38. 轉送限制
    class.customRouteRestrictionsLabel
  39. object.ticketRestrictions.routeRestrictions
  40. 轉送限制詳細資料
    class.customRouteRestrictionsDetailsLabel
  41. object.ticketRestrictions.routeRestrictionsDetails
  42. 時間限制
    class.customTimeRestrictionsLabel
  43. object.ticketRestrictions.timeRestrictions
  44. 其他限制
    class.customOtherRestrictionsLabel
  45. object.ticketRestrictions.otherRestrictions
  46. 收據編號
    class.customPurchaseReceiptNumberLabel
  47. object.purchaseDetails.purchaseReceiptNumber
  48. 購買日期
  49. object.purchaseDetails.purchaseDateTime
  50. 帳戶 ID
  51. object.purchaseDetails.accountId
  52. 確認代碼
    class.customConfirmationCodeLabel
  53. object.purchaseDetails.confirmationCode
  54. FACE VALUE 或 class.customPurchaseFaceValueLabel
  55. object.purchaseDetails.ticketCost.faceValue
  56. PRICE 或 class.customPurchasePriceLabel
  57. object.purchaseDetails.ticketCost.purchasePrice
  58. DISCOUNT MESSAGE
    class.customDiscountMessageLabel
  59. object.purchaseDetails.ticketCost.discountMessage
  60. class.imageModulesData[0].mainImage
  61. object.imageModulesData[0].mainImage
  62. class.messages[].header
  63. class.messages[].body
  64. object.messages[].header
  65. object.messages[].body
  66. class.textModulesData[0..9].header
  67. class.textModulesData[0..9].body
  68. object.textModulesData[0..9].header
  69. object.textModulesData[0..9].body
  70. class.linksModuleData.uris[].description
  71. object.linksModuleData.uris[].description

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

以文字模組欄位來說,系統最多只會顯示類別中的 20 個文字模組欄位,以及物件中的 20 個文字模組欄位。系統會按照欄位在陣列中的定義順序顯示這些欄位。如果您在任一層級需要超過 20 個文字模組欄位,請覆寫預設範本。

以訊息來說,我們最多只會顯示該類別中的 20 則訊息,以及物件中的 20 則訊息。我們不保證郵件的顯示順序。如果您在任一層級需要超過 20 則訊息,或是要對任何訂單提供保證,請覆寫預設範本。

至於連結模組欄位,可定義的 URI 數量沒有限制。系統在顯示各個層級 (類別或物件) 的 URI 時,會依據下列順序進行分組:

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

系統會按照在陣列中的定義順序顯示各個群組的 URI。如果您需要不同的順序,請覆寫預設範本。

預設清單範本元素
  1. (object.ticketLeg.originName
    object.ticketLeg.destinationName)
    或 (object.ticketLeg.originStationCode
    object.ticketLeg.destinationStationCode)
    object.ticketLeg.originName
  2. object.ticketLeg.departureDateTime
    object.validTimeInterval.end.date
  3. class.logo
  4. object.hexBackgroundColor
    class.hexBackgroundColor
  5. <# 張票證> (已分組)