패스 템플릿

다음 패스 카테고리 중 하나를 선택하여 사용 방법을 자세히 알아보세요.


교통카드에는 템플릿 렌더링이 지원됩니다. 템플릿이 정의되지 않으면 기본 템플릿이 사용됩니다.

템플릿

패스 템플릿은 클래스 수준에서 정의되고 클래스와 연결된 모든 객체를 표시하는 데 사용됩니다. 템플릿은 패스의 여러 다른 섹션에 표시할 필드를 정의합니다.

템플릿은 다음 섹션으로 구성되어 있습니다.

카드 제목

카드 제목 섹션

카드 제목 섹션에는 운송업체 로고와 이름, 여정 요약이 표시됩니다. 이 세 요소는 모두 필요하며 이 필드를 채우는 데 사용된 필드 참조와 위치 모두 변경할 수 없습니다.

그러나 렌더링 로직에서는 상단 행을 일부 변경할 수 있습니다. 여정 요약을 나타내는 패스의 상단 행은 단일 구간 여정의 TransitObject에 있는 다음 필드로 제어합니다.

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

패스가 렌더링되는 방법은 비어 있지 않은 필드에 따라 다릅니다. 다음과 같은 방법으로 렌더링할 수 있습니다.

  • 출발지 이름만: 출발지 이름 정보만 유일하게 표시됩니다. 이 방법은 특정 여정이 아닌 지역을 포함하는 티켓에 특히 유용합니다.
  • 출발지 및 목적지: 출발지는 왼쪽에, 목적지는 오른쪽에 표시됩니다. 출발지와 목적지 사이의 기호는 여행 유형에 따라 다릅니다. 출발지와 목적지는 다음 중 하나로 표시됩니다.
    • 이름과 정류장 코드: 상단에 작은 텍스트로 표기된 이름이 있는 정류장 코드가 표시됩니다.
    • 이름만: 이름이 표시됩니다.
    • 정류장 코드만: 정류장 코드가 표시됩니다.

다구간 TransitObject 객체는 매우 유사하게 작동하는데 이 경우에는 object.ticketLeg를 사용하지 말고 object.ticketLegs[] 목록을 사용해야 합니다. 출발지와 목적지를 모두 정의해야 하며 이름 또는 정류장 코드 또는 둘 다를 각 구간에서 일관되게 사용해야 합니다. 배열에서 첫 번째 요소의 출발지와 마지막 요소의 목적지가 출발지와 목적지로 표시됩니다.

패스의 배경색은 필수 필드가 아니며 클래스 수준과 객체 수준 모두에서 정의할 수 있습니다. 우선 순위가 더 높은 객체 필드를 사용하여 클래스 필드를 재정의할 수 있습니다.

카드 템플릿

카드 템플릿 섹션을 사용하여 추가 행을 표시합니다. 이러한 행에는 텍스트 기반의 구조화된 데이터 필드 또는 텍스트 모듈 필드가 있습니다.

class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[] 목록에서 객체 수를 정의하는 행 수를 지정할 수 있습니다. 목록에는 요소가 하나 이상 있어야 하며 최대 두 개 사용할 수 있습니다. 각 요소는 다음 유형 중 하나여야 합니다.

  • 항목 1개를 사용하는 oneItem:
    • item
  • 항목 2개를 사용하는 twoItems:
    • startItem
    • endItem
  • 항목 3개를 사용하는 threeItems:
    • startItem
    • midItem
    • endItem

각 항목은 단일 필드 선택기(.firstValue), 2개 필드 선택기(.firstValue.secondValue), 미리 정의된 항목(.predefinedItem) 중 하나로 정의할 수 있습니다. 선택한 필드의 값과 각 라벨이 모두 표시됩니다. 2개 필드 선택기를 정의하면 선택한 필드의 값이 '/' 구분선과 함께 표시됩니다. 선택한 필드의 라벨도 마찬가지입니다. 미리 정의된 항목은 더 복잡한 렌더링을 정의하는 데 사용됩니다.

다음 코드 샘플은 카드 템플릿 카드 행 섹션을 재정의하여 각각 3개의 항목이 있는 2개의 행을 지정하고, 6개의 클래스 수준 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']"
                            }]
                        }
                    },
                }
            }]
        }
    }
}
    

자바

// 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 목록에 여러 행이 포함된 경우 첫 행 다음에 표시됩니다. 행이 하나뿐인 경우에는 히어로 이미지가 행 위에 표시됩니다.

카드 바코드

카드 바코드 요소

카드 바코드 섹션을 사용하여 바코드 위아래에 추가 텍스트 또는 이미지를 표시할 수 있습니다. 이 섹션에는 필드가 필요하지 않습니다.

3개 필드 선택기를 사용하여 바코드 위에 필드 2개를 나란히 정의하고 바코드 아래에 필드 1개를 정의할 수 있습니다. 이러한 필드는 라벨 없이 표시되며 텍스트 기반의 구조화된 데이터 필드, 텍스트 모듈 필드, 이미지 모듈 필드 중 하나입니다. 이미지를 사용하는 경우 브랜드 가이드라인을 준수해야 합니다.

바코드는 유형과 값으로 정의됩니다. 지원되는 바코드 유형 목록은 참조를 확인하세요. 또한 바코드 바로 아래에 텍스트를 표시할 수 있습니다. 이 텍스트는 바코드 스캐닝을 쉽게 하기 위한 것이지만 다른 용도에 맞게 변경하여 사용할 수 있습니다.

다음 코드 샘플은 패스의 바코드 섹션을 재정의하여 바코드 위에 이미지를 표시하는 방법을 보여줍니다.

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"
                        }
                    ]
                }
            }
        }
    }
}
    

자바

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

코드는 다음 바코드 섹션 형식으로 패스를 만듭니다.

카드 바코드 재정의 예시

카드 바코드 섹션을 재정의하지 않으면 기본 바코드 필드가 사용됩니다. 자세한 내용은 기본 템플릿을 참조하세요.

세부정보 템플릿

세부정보 템플릿 섹션

세부정보 템플릿 섹션은 class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[] 항목으로 이루어진 목록입니다. 항목에는 모든 종류의 구조화된 데이터 필드, 텍스트 모듈 필드, 링크 모듈 필드, 이미지 모듈 필드, 메시지가 포함될 수 있습니다.

각 항목은 단일 필드 선택기(.firstValue), 2개 필드 선택기(.firstValue.secondValue), 미리 정의된 항목(.predefinedItem) 중 하나로 정의할 수 있습니다. 선택한 필드의 값과 각 라벨이 모두 표시됩니다. 2개 필드 선택기를 정의하면 선택한 필드의 값이 '/' 구분선과 함께 표시됩니다. 선택한 필드의 라벨도 마찬가지입니다. 미리 정의된 항목은 더 복잡한 렌더링을 정의하는 데 사용됩니다. 이미지 모듈 필드는 라벨 없이 전체 너비로 렌더링됩니다.

다음 코드 샘플은 패스의 세부정보 섹션을 재정의하여 라벨이 있는 단일 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
    

자바

 //... 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를 설정하여 간단한 일정을 표시할 수 있습니다.

여러 구간 여정

목록 템플릿

목록 템플릿 섹션

목록 템플릿 섹션에서는 Google Pay 앱의 '패스' 뷰에 표시할 필드를 선택할 수 있습니다. 패스는 로고, 배경색, 세 개의 행과 함께 목록에 표시됩니다.

다음 코드 샘플은 패스의 목록 템플릿을 재정의하여 목록 템플릿의 첫 번째 행에 단일 패스의 객체 만료일 필드를 표시하는 방법을 보여줍니다.

Python


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

자바

//... 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[] 형식으로 템플릿의 여러 부분에서 사용됩니다. 필드 참조에는 구조화된 데이터 필드, 텍스트 모듈 필드, 링크 모듈 필드, 이미지 모듈 필드, 메시지에 대한 경로 목록이 포함됩니다.

일부 필드 참조에서 사용할 수 없는 경로 유형도 있습니다. 예를 들어 일부 필드 참조에는 텍스트 기반의 구조화된 데이터 필드 또는 텍스트 모듈 필드에 대한 경로만 사용할 수 있습니다. 텍스트 기반의 구조화된 데이터 필드는 유형 문자열, 현지화된 문자열, 날짜, 금액의 구조화된 데이터 필드입니다.

이 목록을 사용하여 대체 로직을 구현할 수 있습니다. 즉, 목록의 첫 번째 경로가 빈 필드로 해석되면 다음 경로가 평가됩니다. 대체 로직은 주로 텍스트 기반의 구조화된 데이터 필드 또는 텍스트 모듈 필드를 대상으로 합니다. 동일한 목록에 다른 유형의 필드를 함께 사용하지 마세요. 필드가 일부 객체에는 있지만 다른 객체에는 없는 일관적인 패턴이 예상되는 특정 상황에서만 주의하여 대체 논리를 사용합니다. 대부분의 경우 사용 사례별로 클래스를 별도로 만드는 것이 더 쉽습니다.

필드 참조 목록의 모든 경로가 빈 필드로 해석되면 필드 참조를 사용하는 항목이 표시되지 않습니다. 필드 참조를 사용하는 항목을 항상 표시하려면 적어도 경로 하나는 비어 있지 않아야 합니다. 일부 필드에 공백만 있는 문자열을 사용할 수 있더라도 필드를 ‘-’와 같은 특수 문자로 설정하여 null 값을 나타내는 것이 좋습니다.

목록에 포함된 필드를 참조하려면 목록에 있는 필드의 색인을 사용할 수 있습니다. 또는 대부분의 경우 참조 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]

이 경우 패스 세부정보 섹션의 첫 번째 항목은 객체에 선언된 두 번째 이미지입니다. 반면에 패스의 세부정보 섹션에 있는 두 번째 항목은 객체에 선언된 첫 번째 이미지입니다.

기본 템플릿

기본 템플릿 섹션

이미지 모듈 필드는 클래스의 이미지 모듈 필드 1개, 객체의 이미지 모듈 필드 1개만 표시됩니다. 각 수준에서 2개 이상의 이미지 모듈 필드가 필요하면 기본 템플릿을 재정의하세요.

텍스트 모듈 필드는 클래스의 텍스트 모듈 최대 10개, 객체의 텍스트 모듈 필드 최대 10개만 표시됩니다. 필드는 배열에 정의된 순서와 동일하게 표시됩니다. 각 수준에서 11개 이상의 텍스트 모듈 필드가 필요하면 기본 템플릿을 재정의하세요.

메시지는 클래스의 메시지 최대 10개, 객체의 메시지 최대 10개만 표시됩니다. 메시지의 순서는 보장되지 않습니다. 각 수준에서 11개 이상의 메시지가 필요하거나 메시지 순서의 보장이 필요하면 기본 템플릿을 재정의하세요.

링크 모듈 필드는 정의할 수 있는 URI 수에 제한이 없습니다. URI는 각 수준(클래스 또는 객체)에서 다음 순서대로 그룹화되어 표시됩니다.

  1. 지도 좌표
  2. 전화번호
  3. 이메일 주소
  4. 웹페이지
각 그룹에서 URI는 배열에 정의된 순서와 동일하게 표시됩니다. 다른 순서로 표시해야 할 경우 기본 템플릿을 재정의하세요.

기본 목록 템플릿 섹션