Bordkartenvorlage

Bordkarten unterstützen das Rendern von Vorlagen. Wenn keine Vorlage definiert ist, wird die Standardvorlage verwendet.

Vorlagendefinition

Eine Kartenvorlage wird auf Klassenebene definiert und dazu verwendet, ein mit der Klasse verknüpftes Objekt anzuzeigen. In der Vorlage wird definiert, welche Felder in den verschiedenen Abschnitten der Karte angezeigt werden.

Die Vorlage ist in folgende Abschnitte unterteilt:

Android

Vorlagenübersicht

Web

Vorlagenübersicht

Titel der Karte

Android

Elemente des Kartentitels
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    oder class.localizedIssuerName
    oder class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    oder class.flightHeader.carrier.carrierIcaoCode)
    und class.flightHeader.flightNumber
  4. Stadt des Flughafens (hergeleitet von class.origin.airportIataCode)
    oder class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. Stadt des Flughafens (hergeleitet von class.destination.airportIataCode)
    oder class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. object.hexBackgroundColor
    oder class.hexBackgroundColor

Web

Elemente des Kartentitels
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    oder class.localizedIssuerName
    oder class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    oder class.flightHeader.carrier.carrierIcaoCode)
    und class.flightHeader.flightNumber
  4. Stadt des Flughafens (hergeleitet von class.origin.airportIataCode)
    oder class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. Stadt des Flughafens (hergeleitet von class.destination.airportIataCode)
    oder class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. object.hexBackgroundColor
    oder class.hexBackgroundColor

Im Abschnitt des Kartentitels werden das Logo, der Name der Fluggesellschaft und die Flugzusammenfassung angezeigt. Alle drei Elemente sind erforderlich. Weder die Feldverweise, die zum Ausfüllen verwendet werden, noch ihre Position können verändert werden.

Sind class.origin.airportNameOverride oder class.detination.airportNameOverride nicht angegeben, wird der Name der Stadt des Flughafens jeweils automatisch mit der Stadt ausgefüllt, auf die sich der IATA-Code in class.origin.airportIataCode und class.destination.airportIataCode bezieht.

Kartenvorlage

Android

Vorlagenübersicht

Web

Vorlagenübersicht

Im Abschnitt „Kartenvorlage“ werden zusätzliche Zeilen angezeigt. Diese Zeilen können textbasierte strukturierte Datenfelder oder Textmodulfelder enthalten.

Du kannst die Anzahl der Zeilen festlegen, die die Menge der Objekte in der class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[]-Liste definieren. Es muss mindestens ein Element angegeben werden, empfohlen werden maximal zwei. Jedes Element muss einen der folgenden Typen haben:

  • oneItem für ein Element:
    • item
  • twoItems für zwei Elemente:
    • startItem
    • endItem
  • threeItems für drei Elemente:
    • startItem
    • middleItem
    • endItem

Jedes Element kann entweder als ein einzelner Feldselektor (.firstValue), als zwei Feldselektoren (.firstValue und .secondValue) oder als vordefiniertes Element (.predefinedItem) festgelegt werden. Es werden sowohl die Werte des ausgewählten Feldes als auch die jeweiligen Labels angezeigt. Werden zwei Feldselektoren definiert, werden die Werte in den ausgewählten Feldern mit einem „/“ als Trennzeichen angezeigt. Dasselbe gilt für die Labels der gewählten Felder. Vordefinierte Elemente werden zum Festlegen von komplexeren Renderingaufgaben verwendet.

Das folgende Codebeispiel zeigt, wie die Zeilenabschnitte der Kartenvorlage überschrieben werden können, um zwei Zeilen festzulegen. Jede Zeile enthält drei Elemente, die jeweils auf sechs benutzerdefinierte textModuleData-Felder auf Klassenebene und ihre Header als Labels verweisen:

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

Mit dem Code wird eine Karte in folgendem Format im Codevorlagenabschnitt erstellt:

Beispiel für eine Labelüberschreibung.

Leere Elemente werden nicht angezeigt. Weitere Informationen findest du unter Feldverweise. Wenn alle Elemente in einer Zeile leer sind, wird die Zeile nicht angezeigt. Sind nur einige Elemente in einer Zeile leer, werden die vorhandenen Elemente neu geordnet und als Zeile mit weniger Elementen angezeigt.

Wird die Kartenvorlage nicht überschrieben, werden die standardmäßige Anzahl an Zeilen und Elementen sowie die standardmäßigen Feldverweise verwendet. Weitere Informationen findest du unter Standardvorlage.

Nachdem du ein Hero-Image definiert hast, kann es nach der ersten Zeile angezeigt werden, falls die cardRowTemplateInfos-Liste mehrere Zeilen enthält, oder über der Zeile, falls es nur eine gibt.

Kartenbarcode

Android

Elemente des Kartenbarcodes
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type und object.barcode.value
    oder object.reservationInfo.confirmationCode
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

Web

Elemente des Kartenbarcodes
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type und object.barcode.value
    oder object.reservationInfo.confirmationCode
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

Im Abschnitt „Kartenbarcode“ werden zusätzliche Textangaben oder Bilder ober- und unterhalb des Barcodes angezeigt. Keines der Felder in diesem Abschnitt ist erforderlich.

Es stehen drei Feldselektoren zur Auswahl, mit denen zwei nebeneinanderliegende Felder oberhalb des Barcodes und eines darunter definiert werden können. Sie werden ohne Label angezeigt und können entweder textbasierte strukturierte Datenfelder, Textmodulfelder oder Bildmodulfelder sein. Bei Verwendung von Bildern müssen die Markenrichtlinien eingehalten werden.

Der Barcode wird nach Typ und Wert definiert. Eine Liste der unterstützten Barcodetypen findest du unter Referenz. Außerdem kann unterhalb des Barcodes ein Text angezeigt werden. Dadurch lässt sich unter anderem der Barcode leichter scannen.

Das folgende Codebeispiel zeigt, wie der Barcodeabschnitt einer Karte überschrieben werden kann, um ein Bild über dem Barcode anzuzeigen:

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

Mit dem Code wird eine Karte mit folgendem Format im Barcodeabschnitt erstellt:

Beispiel für die Überschreibung eines Kartenbarcodes.

Wird der Barcodeabschnitt nicht überschrieben, werden die standardmäßigen Barcodefelder verwendet. Weitere Informationen findest du unter Standardvorlage.

Vorlage für Details

Android

Abschnitte „Vorlage für Details“
  • 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

Abschnitte „Vorlage für Details“
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • ...

Der Abschnitt „Vorlage für Details“ besteht aus einer Liste mit class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]-Elementen. Die Elemente können beliebige strukturierte Datenfelder, Textmodulfelder, Linkmodulfelder, Bildmodulfelder oder Nachrichten sein.

Jedes Element kann entweder als ein einzelner Feldselektor (.firstValue), als zwei Feldselektoren (.firstValue und .secondValue) oder als vordefiniertes Element (.predefinedItem) festgelegt werden. Es werden sowohl die Werte des ausgewählten Feldes als auch ihre jeweiligen Labels angezeigt. Werden zwei Feldselektoren definiert, werden die Werte in den ausgewählten Feldern mit einem „/“ als Trennzeichen angezeigt. Dasselbe gilt für die Labels der ausgewählten Felder. Vordefinierte Elemente werden zum Festlegen von komplexeren Renderingaufgaben verwendet. Bildmodulfelder werden in voller Breite ohne Label gerendert.

Das folgende Codebeispiel zeigt, wie der Detailabschnitt der Karte überschrieben werden kann, um ein einzelnes linksModuleData-Feld mit Label anzuzeigen:

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
    

Mit dem Code wird eine Karte mit folgendem Format im Detailabschnitt erstellt:

Beispiel für eine Detailüberschreibung.

Leere Elemente werden nicht angezeigt. Weitere Informationen findest du unter Feldverweise.

Wird die Detailvorlage nicht überschrieben, wird die Standardliste der Verweisfelder in der standardmäßigen Reihenfolge angezeigt. Weitere Informationen findest du unter Standardvorlage.

Listenvorlage

Elemente der Listenvorlage
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.localScheduledDepartureDateTime
      (nur Datum) (gruppiert)
    oder class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.flightHeader.carrier.airlineLogo
  4. object.hexBackgroundColor
    oder class.hexBackgroundColor
  5. <# passes> (gruppiert)

Im Abschnitt „Listenvorlage“ wird ausgewählt, welches Feld in der Ansicht „Karten/Tickets“ der Google Wallet App verwendet wird. Die Karte oder das Ticket wird in der Liste mit dem Logo, der Hintergrundfarbe und drei Zeilen dargestellt.

Das folgende Codebeispiel zeigt, wie die Listenvorlage überschrieben werden kann, um das Feld mit dem Ablaufdatum für ein Objekt einer einzelnen Karte oder eines einzelnen Tickets in der ersten Zeile der Listenvorlage anzeigen zu lassen:

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
    

Mit dem Code wird eine Karte mit der folgenden Listenvorlagenversion erstellt:

Beispiel für eine Listenüberschreibung.

Die drei Zeilen können mit einem Feldselektor definiert werden. Die Felder werden ohne Label angezeigt. Bei gruppierten Karten zeigt die zweite Zeile immer das lokale Datum des Abflugs und die dritte Zeile immer die Anzahl der gruppierten Karten an.

Feldverweise

Feldverweise werden in verschiedenen Bereichen der Vorlage im Format class.classTemplateInfo.*.fields[] verwendet. Ein Feldverweis umfasst eine Liste mit Pfaden zu strukturierten Datenfeldern, Textmodulfeldern, Linkmodulfeldern, Bildmodulfeldern oder Mitteilungen.

Nicht alle Pfadtypen sind in jedem Feldverweis zulässig. So erlauben manche Feldverweise beispielsweise nur Pfade zu textbasierten strukturierten Datenfeldern oder Textmodulfeldern. Textbasierte strukturierte Felder sind strukturierte Datenfelder des Typs String, lokalisierter String, Datum oder Geld.

Über die Liste kann eine Fallback-Logik implementiert werden. Das bedeutet: Falls der erste Pfad in der Liste zu einem leeren Feld führt, wird der nächste Pfad ausgewertet. Die Fallback-Logik zielt hauptsächlich auf textbasierte strukturierte Datenfelder oder Textmodulfelder ab. Unterschiedliche Feldtypen dürfen nicht in einer Liste vermischt werden. Die Fallback-Logik sollte mit Bedacht und nur in bestimmten Situationen verwendet werden, wenn ein einheitliches Feldmuster erwartet wird, das in einigen Objekten vorkommt, in anderen aber nicht. Meist ist es einfacher, separate Klassen für separate Anwendungsfälle zu erstellen.

Falls alle Pfade in der Feldverweisliste zu leeren Feldern führen, wird das zum Feldverweis gehörende Element nicht angezeigt. Wenn das Element, das den Feldverweis verwendet, immer angezeigt werden soll, darf mindestens ein Pfad nicht leer sein. Es empfiehlt sich, ein Feld auf ein Sonderzeichen wie „-“ einzustellen, um einen Nullwert darzustellen, selbst wenn einige Felder Strings mit nur einem Leerzeichen zulassen.

Wenn du auf ein Feld in einer Liste verweisen möchtest, kannst du entweder den Index des entsprechenden Feldes oder üblicherweise eine Referenz-ID verwenden. Elemente einer Liste, auf die mit einer ID verwiesen werden kann, haben ein .id-Feld. Es empfiehlt sich, eine Referenz-ID über den Index des Felds in der Liste zu verwenden, soweit verfügbar.

Hier ist ein Beispiel dafür, wie auf Felder in einer Liste verwiesen werden kann.

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

In diesem Fall ist das erste Element im Abschnitt „Details“ der Karte das zweite Bild, das im Objekt deklariert wurde. Das zweite Element im Abschnitt „Details“ der Karte ist dagegen das erste Bild, das im Objekt deklariert wurde.

Standardvorlage

Android

Elemente der Standardvorlage
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    oder class.localizedIssuerName
    oder class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    oder class.flightHeader.carrier.carrierIcaoCode)
    und class.flightHeader.flightNumber
  4. Stadt des Flughafens (hergeleitet von class.origin.airportIataCode)
    oder class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. Stadt des Flughafens (hergeleitet von class.destination.airportIataCode)
    oder class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. TERMINAL
  9. class.origin.terminal
  10. GATE
  11. class.origin.gate
  12. SITZKLASSE (Standard) oder KLASSE oder STUFE (abhängig von
    class.boardingAndSeatingPolicy.SeatClassPolicy)
  13. object.boardingAndSeatingInfo.SeatClass
  14. BOARDING
    oder SCHLIEẞZEIT DES GATES
    oder ABFLUG
  15. class.localBoardingDateTime (nur Uhrzeit)
    oder class.localGateClosingDateTime (nur Uhrzeit)
    oder class.localEstimatedOrActualDepartureDateTime (nur Uhrzeit)
    oder class.localScheduledDepartureDateTime (nur Uhrzeit)
  16. PASSAGIER
  17. object.passengerName
  18. ZONE (Standard) oder GRUPPE (abhängig von
    class.boardingAndSeatingPolicy.boardingPolicy)
  19. object.boardingAndSeatingInfo.boardingGroup
  20. SITZPLATZ
  21. object.boardingAndSeatingInfo.seatNumber
    oder object.boardingAndSeatingInfo.seatAssignment
  22. object.securityProgramLogo
  23. object.boardingAndSeatingInfo.boardingPrivilegeImage
  24. object.barcode.type und object.barcode.value
    oder object.reservationInfo.confirmationCode
  25. object.barcode.alternateText
  26. class.flightHeader.carrier.airlineAllianceLogo
  27. object.hexBackgroundColor
    oder class.hexBackgroundColor
  28. POSITION
  29. object.boardingAndSeatingInfo.boardingPosition
  30. SEQUENZ
  31. object.boardingAndSeatingInfo.sequenceNumber
  32. EINSTIEGSTÜR
  33. object.boardingAndSeatingInfo.boardingDoor
  34. FLUGNUMMER
  35. (class.flightHeader.operatingCarrier.carrierIataCode
    oder class.flightHeader.operatingCarrier.carrierIcaoCode)
    und class.flightHeader.operatingFlightNumber
    und class.flightHeader.operatingCarrier.airlineName
  36. BESTÄTIGUNGSNUMMER
  37. object.reservationInfo.confirmationCode
  38. TICKETNUMMER
  39. object.reservationInfo.eticketNumber
  40. VIELFLIEGERNUMMER
  41. object.reservationInfo
      .frequentFlyerInfo.frequentFlyerNumber
    und object.reservationInfo
      .frequentFlyerInfo.frequentFlyerProgramName
  42. SCHLIEẞZEIT DES GATES
  43. class.localGateClosingDateTime
  44. PLANMÄẞIGE ABFLUGZEIT
  45. class.localScheduledDepartureDateTime
  46. GESCHÄTZTE ABFLUGZEIT
  47. class.localEstimatedOrActualDepartureDateTime
  48. PLANMÄẞIGE ANKUNFTSZEIT
  49. class.localScheduledArrivalDateTime
  50. GESCHÄTZTE ANKUNFTSZEIT
  51. class.localEstimatedOrActualArrivalDateTime
  52. ANKUNFTSTERMINAL
  53. class.destination.terminal
  54. ANKUNFTSGATE
  55. class.destination.gate
  56. class.imageModulesData[0].mainImage
  57. object.imageModulesData[0].mainImage
  58. class.messages[].header
  59. class.messages[].body
  60. object.messages[].header
  61. object.messages[].body
  62. class.textModulesData[0..9].header
  63. class.textModulesData[0..9].body
  64. object.textModulesData[0..9].header
  65. object.textModulesData[0..9].body
  66. class.linksModuleData.uris[].description
  67. object.linksModuleData.uris[].description

Web

Elemente der Standardvorlage
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    oder class.localizedIssuerName
    oder class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    oder class.flightHeader.carrier.carrierIcaoCode)
    und class.flightHeader.flightNumber
  4. Stadt des Flughafens (hergeleitet von class.origin.airportIataCode)
    oder class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. Stadt des Flughafens (hergeleitet von class.destination.airportIataCode)
    oder class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. TERMINAL
  9. class.origin.terminal
  10. GATE
  11. class.origin.gate
  12. SITZKLASSE (Standard) oder KLASSE oder STUFE (abhängig von
    class.boardingAndSeatingPolicy.SeatClassPolicy)
  13. object.boardingAndSeatingInfo.SeatClass
  14. BOARDING
    oder SCHLIEẞZEIT DES GATES
    oder ABFLUG
  15. class.localBoardingDateTime (nur Uhrzeit)
    oder class.localGateClosingDateTime (nur Uhrzeit)
    oder class.localEstimatedOrActualDepartureDateTime (nur Uhrzeit)
    oder class.localScheduledDepartureDateTime (nur Uhrzeit)
  16. PASSAGIER
  17. object.passengerName
  18. ZONE (Standard) oder GRUPPE (abhängig von
    class.boardingAndSeatingPolicy.boardingPolicy)
  19. object.boardingAndSeatingInfo.boardingGroup
  20. SITZPLATZ
  21. object.boardingAndSeatingInfo.seatNumber
    oder object.boardingAndSeatingInfo.seatAssignment
  22. object.securityProgramLogo
  23. object.boardingAndSeatingInfo.boardingPrivilegeImage
  24. object.barcode.type und object.barcode.value
    oder object.reservationInfo.confirmationCode
  25. object.barcode.alternateText
  26. class.flightHeader.carrier.airlineAllianceLogo
  27. object.hexBackgroundColor
    oder class.hexBackgroundColor
  28. POSITION
  29. object.boardingAndSeatingInfo.boardingPosition
  30. SEQUENZ
  31. object.boardingAndSeatingInfo.sequenceNumber
  32. EINSTIEGSTÜR
  33. object.boardingAndSeatingInfo.boardingDoor
  34. FLUGNUMMER
  35. (class.flightHeader.operatingCarrier.carrierIataCode
    oder class.flightHeader.operatingCarrier.carrierIcaoCode)
    und class.flightHeader.operatingFlightNumber
    und class.flightHeader.operatingCarrier.airlineName
  36. BESTÄTIGUNGSNUMMER
  37. object.reservationInfo.confirmationCode
  38. TICKETNUMMER
  39. object.reservationInfo.eticketNumber
  40. VIELFLIEGERNUMMER
  41. object.reservationInfo
      .frequentFlyerInfo.frequentFlyerNumber
    und object.reservationInfo
      .frequentFlyerInfo.frequentFlyerProgramName
  42. SCHLIEẞZEIT DES GATES
  43. class.localGateClosingDateTime
  44. PLANMÄẞIGE ABFLUGZEIT
  45. class.localScheduledDepartureDateTime
  46. GESCHÄTZTE ABFLUGZEIT
  47. class.localEstimatedOrActualDepartureDateTime
  48. PLANMÄẞIGE ANKUNFTSZEIT
  49. class.localScheduledArrivalDateTime
  50. GESCHÄTZTE ANKUNFTSZEIT
  51. class.localEstimatedOrActualArrivalDateTime
  52. ANKUNFTSTERMINAL
  53. class.destination.terminal
  54. ANKUNFTSGATE
  55. class.destination.gate
  56. class.imageModulesData[0].mainImage
  57. object.imageModulesData[0].mainImage
  58. class.messages[].header
  59. class.messages[].body
  60. object.messages[].header
  61. object.messages[].body
  62. class.textModulesData[0..9].header
  63. class.textModulesData[0..9].body
  64. object.textModulesData[0..9].header
  65. object.textModulesData[0..9].body
  66. class.linksModuleData.uris[].description
  67. object.linksModuleData.uris[].description

Standardmäßig zeigt der Abschnitt „Details“ auch object.boardingAndSeatingInfo.boardingGroup, object.boardingAndSeatingInfo.seatClass und object.boardingAndSeatingInfo.seatNumber an, wenn der Abschnitt für Karte überschrieben wird und diese Felder dort nicht mehr vorhanden sind.

Es werden jeweils nur ein Bildmodulfeld der Klasse und ein Bildmodulfeld des Objekts angezeigt. Wenn mehr als ein Bildmodulfeld auf einer Ebene benötigt wird, muss die Standardvorlage überschrieben werden.

Es werden maximal 20 Textmodulfelder der Klasse und 20 Textmodulfelder des Objekts angezeigt. Die Felder werden in der gleichen Reihenfolge angezeigt, in der sie im Array definiert sind. Wenn mehr als 20 Textmodulfelder auf einer Ebene benötigt werden, muss die Standardvorlage überschrieben werden.

Es werden nur maximal 20 Nachrichten der Klasse und 20 Nachrichten des Objekts angezeigt. Die Reihenfolge der Nachrichten kann nicht fest zugesichert werden. Wenn mehr als 20 Nachrichten auf einer Ebene oder eine feste Reihenfolge notwendig sind, muss die Standardvorlage überschrieben werden.

Die Anzahl der URIs, die für das Modulfeld „Links“ definiert werden können, ist nicht beschränkt. Die URIs werden in der folgenden Reihenfolge für jede Ebene (Klasse oder Objekt) gruppiert angezeigt:

  1. Kartenkoordinaten
  2. Telefonnummern
  3. E-Mail-Adressen
  4. Webseiten

Die URIs werden für jede Gruppe in der gleichen Reihenfolge angezeigt, in der sie im Array definiert sind. Wenn eine andere Reihenfolge benötigt wird, muss die Standardvorlage überschrieben werden.

Standardmäßige Listenvorlagenelemente
  1. class.origin.airportIataCode
    und class.destination.airportIataCode
  2. class.localScheduledDepartureDateTime
    (nur Datum)
  3. class.flightHeader.carrier.airlineLogo
  4. object.hexBackgroundColor
    oder class.hexBackgroundColor
  5. <# passes> (gruppiert)