Treuepunktevorlage

Für Treuepunktekarten wird das Rendern von Vorlagen unterstützt. Wenn keine Vorlage definiert ist, wird die Standardvorlage verwendet.

Vorlagendefinition

Eine Karten-/Ticketvorlage ist auf Klassenebene definiert und wird verwendet, um alle mit der Klasse verknüpften Objekte anzuzeigen. Mit der Vorlage wird definiert, welche Felder in verschiedenen Bereichen der Karte bzw. des Tickets angezeigt werden.

Die Vorlage ist in folgende Abschnitte unterteilt:

Android

Vorlagenübersicht

Web

Vorlagenübersicht

Titel der Karte

Android

Elemente des Kartentitels
  1. class.programLogo
  2. class.localizedIssuerName
    oder class.issuerName
  3. class.localizedProgramName
    oder class.programName
  4. class.hexBackgroundColor

Web

Elemente des Kartentitels
  1. class.programLogo
  2. class.localizedIssuerName
    oder class.issuerName
  3. class.localizedProgramName
    oder class.programName
  4. class.hexBackgroundColor

Im Bereich „Kartentitel“ werden das Logo, der Name des Ausstellers und der Programmtitel angezeigt. Weder die Feldverweise, mit denen sie ausgefüllt werden, noch ihre Position können geändert werden.

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.

Sie können die Anzahl der Zeilen angeben, mit denen die Anzahl der Objekte in der Liste class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[] definiert wird. Die Liste erfordert mindestens ein Element. Wir empfehlen, höchstens zwei Elemente zu verwenden. Es gibt folgende Typen von Elementen:

  • oneItem, in der ein Element akzeptiert wird:
    • item
  • twoItems, die zwei Elemente akzeptiert:
    • startItem
    • endItem
  • threeItems, die drei Elemente akzeptiert:
    • startItem
    • middleItem
    • endItem

Jedes Element kann entweder als Einzelfeldauswahl (.firstValue), als Feldauswahl (.firstValue und .secondValue) oder als vordefiniertes Element (.predefinedItem) definiert werden. Es werden sowohl die Werte des ausgewählten Felds als auch die zugehörigen Labels angezeigt. Wenn Sie zwei Feldauswahlen definieren, werden die Werte der ausgewählten Felder mit einem Trennzeichen „/“ angezeigt. Dasselbe gilt für die Labels der ausgewählten Felder. Mit vordefinierten Elementen lässt sich ein komplexeres Rendering definieren.

Im folgenden Codebeispiel wird gezeigt, wie Sie die Zeilenbereiche der Kartenvorlagenkarte überschreiben, um zwei Zeilen anzugeben. 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/ein Ticket mit dem folgenden Format für den Abschnitt „Codevorlage“ erstellt:

Beispiel für das Überschreiben von Labels

Leere Elemente werden nicht angezeigt. Weitere Informationen finden Sie unter Feldreferenzen. Wenn alle Elemente in einer Zeile leer sind, wird die Zeile nicht angezeigt. Wenn nicht alle Elemente in einer Zeile leer sind, werden die nicht leeren Elemente neu angeordnet und als Zeile mit weniger Elementen angezeigt.

Wenn Sie die Kartenvorlage nicht überschreiben, werden die Standardanzahl von Zeilen, die Standardanzahl von Elementen und die Standardfeldverweise verwendet. Weitere Informationen finden Sie unter Standardvorlage.

Nachdem Sie ein Hero-Image definiert haben, kann es nach der ersten Zeile erscheinen, wenn mehrere Zeilen in der Liste cardRowTemplateInfos enthalten sind, oder über der Zeile, wenn nur eine Zeile vorhanden ist.

Barcode der Karte

Android

Elemente des Karten-Barcodes
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type und object.barcode.value
    oder object.accountId
  4. object.barcode.alternateText
    oder object.accountId
    oder object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail
  6. object.heroImage
    oder class.heroImage

Web

Elemente des Karten-Barcodes
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type und object.barcode.value
    oder object.accountId
  4. object.barcode.alternateText
    oder object.accountId
    oder object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

Im Abschnitt „Karten-Barcode“ werden zusätzlicher Text oder Bilder über und unter dem Barcode angezeigt. Keines der Felder in diesem Abschnitt ist erforderlich.

Es gibt drei Feldauswahlen, mit denen zwei nebeneinanderliegende Felder über und eines unter dem Barcode definiert werden können. Diese werden ohne Label angezeigt und können entweder textbasierte Felder für strukturierte Daten, Textmodule oder Bildmodulfelder sein. Wenn du Bilder verwendest, müssen diese den Markenrichtlinien entsprechen.

Der Barcode wird durch einen Typ und einen Wert definiert. Eine Liste der unterstützten Barcodetypen finden Sie unter Referenz. Außerdem kann direkt unter dem Barcode ein Text angezeigt werden. Dieser Text erleichtert unter anderem das Scannen von Barcodes.

Im folgenden Codebeispiel wird gezeigt, wie Sie den Barcodeabschnitt einer Karte / eines Tickets überschreiben, 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 / ein Ticket in folgendem Format erstellt:

Beispiel für das Überschreiben einer Kartenbarcode

Wenn Sie den Bereich für den Barcode nicht überschreiben, werden die Standardfelder für den Barcode verwendet. Weitere Informationen finden Sie unter Standardvorlage.

Detailvorlage

Android

Details der Vorlagenabschnitte
  • 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

Details der Vorlagenabschnitte
  • 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 Bereich mit der Vorlage für Details enthält eine Liste von Elementen class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. Die Elemente können alle Arten strukturierter Datenfelder, Textmodulfelder, Linkmodulfelder, Bildmodulfelder oder Nachrichten enthalten.

Jedes Element kann entweder als Einzelfeldauswahl (.firstValue), als Feldauswahl (.firstValue und .secondValue) oder als vordefiniertes Element (.predefinedItem) definiert werden. Es werden sowohl die Werte des ausgewählten Felds als auch die zugehörigen Labels angezeigt. Wenn Sie zwei Feldauswahlen definieren, werden die Werte der ausgewählten Felder mit einem Trennzeichen „/“ angezeigt. Dasselbe gilt für die Labels der ausgewählten Felder. Mit vordefinierten Elementen lässt sich ein komplexeres Rendering definieren. Die Felder des Bildmoduls werden in voller Breite ohne Label gerendert.

Im folgenden Codebeispiel wird gezeigt, wie Sie den Detailabschnitt der Karte / des Tickets überschreiben, um ein einzelnes linksModuleData-Feld mit seinem 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/ein Ticket mit dem folgenden Format des Abschnitts „Details“ erstellt:

Beispiel für eine Detailüberschreibung.

Leere Elemente werden nicht angezeigt. Weitere Informationen finden Sie unter Feldreferenzen.

Wenn Sie die Detailvorlage nicht überschreiben, wird die Standardliste der Referenzfelder in der Standardreihenfolge angezeigt. Weitere Informationen finden Sie unter Standardvorlage.

Listenvorlage

Vorlagenelemente auflisten
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.programLogo
  4. class.hexBackgroundColor

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

Im folgenden Codebeispiel wird gezeigt, wie Sie die Listenvorlage einer Karte / eines Tickets überschreiben, um das Feld für das Ablaufdatum einer einzelnen Karte bzw. eines einzelnen Tickets in der ersten Zeile der Liste zu präsentieren:

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
    

Der Code erstellt eine Karte/ein Ticket mit der folgenden Listenvorlage:

Beispiel für eine Überschreibung der Liste

Die drei Zeilen können mit einer Feldauswahl definiert werden. Die Felder werden ohne Label angezeigt.

Labels

Alle Felder mit strukturierten Daten sind mit einem Label von Google versehen. Google ist dafür verantwortlich, für jedes dieser Labels eine Übersetzung in allen unterstützten Sprachen bereitzustellen.

Einige dieser Labels können mithilfe eines der class.custom<name_of_the_field>Label-Felder angepasst werden. Wenn Sie ein Label anpassen, sind Sie dafür verantwortlich, Übersetzungen für das jeweilige Label in allen Sprachen bereitzustellen, die Sie unterstützen möchten.

Feldreferenzen

Feldreferenzen werden in verschiedenen Teilen der Vorlage mit dem Format class.classTemplateInfo.*.fields[] verwendet. Eine Feldreferenz enthält eine Liste mit Pfaden zu Feldern für strukturierte Daten, zu Textmodulen, zu Feldern für das Linkmodul, zu Feldern für Bildmodule oder zu Nachrichten.

Nicht alle Pfadtypen sind in jeder Feldreferenz zulässig. Einige Feldverweise erlauben beispielsweise nur Pfade zu textbasierten Feldern für strukturierte Daten oder Feldern für Textmodule. Textbasierte strukturierte Felder sind strukturierte Datenfelder vom Typ „String“, „Lokalisierter String“, „Datum“ oder „Geld“.

Mithilfe der Liste kann eine Fallback-Logik implementiert werden. Wenn der erste Pfad in der Liste also in ein leeres Feld aufgelöst wird, wird der nächste Pfad ausgewertet. Die Fallback-Logik ist hauptsächlich auf textbasierte Felder bzw. Felder für Textmodule ausgerichtet. Mischen Sie nicht verschiedene Feldtypen in derselben Liste. Verwenden Sie die Fallback-Logik mit Vorsicht und nur in bestimmten Situationen, wenn Sie ein konsistentes Muster von Feldern erwarten, die in einigen Objekten vorhanden sind, in anderen aber nicht. In den meisten Fällen ist es einfacher, separate Klassen für separate Anwendungsfälle zu erstellen.

Wenn alle Pfade in einer Feldreferenzliste in leere Felder aufgelöst werden, wird das Element, das die Feldreferenz verwendet, nicht angezeigt. Wenn das Element, das den Feldverweis verwendet, immer vorhanden sein soll, muss mindestens ein Pfad leer sein. Wir empfehlen, ein Feld auf ein Sonderzeichen wie „-“ festzulegen, um einen Nullwert darzustellen, auch wenn einige Felder Strings mit nur einem Leerzeichen zulassen.

Wenn Sie auf ein Feld in einer Liste verweisen möchten, können Sie entweder den Index des Felds in der Liste oder in den meisten Fällen eine Referenz-ID verwenden. Elemente einer Liste, auf die nach ID verwiesen werden kann, haben das Feld .id. Wir empfehlen, eine Referenz-ID für den Index des Feldes in der Liste zu verwenden, sofern verfügbar.

Hier ein Beispiel dafür, wie Sie auf Felder in einer Liste verweisen:

  • 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 Detail der Karte bzw. des Tickets das zweite Bild, das im Objekt deklariert wird. Das zweite Element im Detail der Karte bzw. des Tickets ist hingegen das erste Bild, das im Objekt deklariert wird.

Standardvorlage

Android

Standardvorlagenelemente
  1. class.programLogo
  2. class.localizedIssuerName
    oder class.issuerName
  3. class.localizedProgramName
    oder class.programName
  4. PUNKTE
    oder object.loyaltyPoints.localizedLabel
    oder object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. PRÄMIEN
    oder object.secondaryLoyaltyPoints.localizedLabel
    oder object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type und object.barcode.value
    oder object.accountId
  9. object.barcode.alternateText
    oder object.accountId
    oder object.barcode.value
  10. object.heroImage
    oder class.heroImage
  11. class.hexBackgroundColor
  12. MITGLIEDERNAME
    oder class.localizedAccountNameLabel
    oder class.accountNameLabel
  13. object.accountName
  14. MEMBER ID
    oder class.localizedAccountIdLabel
    oder class.accountIdLabel
  15. object.accountId
  16. PRÄMIE PRÄSENTIEREN
    oder class.localizedRewardsTierLabel
    oder class.rewardsTierLabel
  17. class.localizedRewardsTier
    oder class.rewardsTier
  18. SEKUNDÄRE PRÄMIE
    oder class.localizedSecondaryRewardsTierLabel
    oder class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    oder class.secondaryRewardsTier
  20. class.imageModulesData[0].mainImage
  21. object.imageModulesData[0].mainImage
  22. class.messages[].header
  23. class.messages[].body
  24. object.messages[].header
  25. object.messages[].body
  26. class.textModulesData[0..9].header
  27. class.textModulesData[0..9].body
  28. object.textModulesData[0..9].header
  29. object.textModulesData[0..9].body
  30. class.linksModuleData.uris[].description
  31. object.linksModuleData.uris[].description
  32. class.homepageUri

Web

Standardvorlagenelemente
  1. class.programLogo
  2. class.localizedIssuerName
    oder class.issuerName
  3. class.localizedProgramName
    oder class.programName
  4. PUNKTE
    oder object.loyaltyPoints.localizedLabel
    oder object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. PRÄMIEN
    oder object.secondaryLoyaltyPoints.localizedLabel
    oder object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type und object.barcode.value
    oder object.accountId
  9. object.barcode.alternateText
    oder object.accountId
    oder object.barcode.value
  10. object.heroImage
    oder class.heroImage
  11. class.hexBackgroundColor
  12. MITGLIEDERNAME
    oder class.localizedAccountNameLabel
    oder class.accountNameLabel
  13. object.accountName
  14. MEMBER ID
    oder class.localizedAccountIdLabel
    oder class.accountIdLabel
  15. object.accountId
  16. PRÄMIE PRÄSENTIEREN
    oder class.localizedRewardsTierLabel
    oder class.rewardsTierLabel
  17. class.localizedRewardsTier
    oder class.rewardsTier
  18. SEKUNDÄRE PRÄMIE
    oder class.localizedSecondaryRewardsTierLabel
    oder class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    oder class.secondaryRewardsTier
  20. class.imageModulesData[0].mainImage
  21. object.imageModulesData[0].mainImage
  22. class.messages[].header
  23. class.messages[].body
  24. object.messages[].header
  25. object.messages[].body
  26. class.textModulesData[0..9].header
  27. class.textModulesData[0..9].body
  28. object.textModulesData[0..9].header
  29. object.textModulesData[0..9].body
  30. class.linksModuleData.uris[].description
  31. object.linksModuleData.uris[].description
  32. class.homepageUri

Für Bildmodulfelder werden nur ein Bildmodulfeld aus der Klasse und nur ein Bildmodulfeld aus dem Objekt angezeigt. Wenn Sie auf jeder Ebene mehr als ein Bildmodulfeld benötigen, überschreiben Sie die Standardvorlage.

Für Textmodulfelder werden maximal 20 Textmodulfelder aus der Klasse und 20 Textmodulfelder aus dem Objekt angezeigt. Die Felder werden in der Reihenfolge angezeigt, in der sie im Array definiert sind. Wenn Sie mehr als 20 Textmodulfelder auf einer Ebene benötigen, überschreiben Sie die Standardvorlage.

Für Nachrichten werden maximal 20 Nachrichten aus der Klasse und 20 Nachrichten aus dem Objekt angezeigt. Wir übernehmen keine Garantie für die Reihenfolge der Nachrichten. Wenn Sie mehr als 20 Nachrichten auf einer Ebene oder eine Garantie für Bestellungen benötigen, überschreiben Sie die Standardvorlage.

Im Feld „Linkmodul“ gibt es keine Begrenzung für die Anzahl der URIs, die Sie festlegen können. URIs werden für jede Ebene (Klasse oder Objekt) in der folgenden Reihenfolge gruppiert angezeigt:

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

Für jede Gruppe werden URIs in derselben Reihenfolge angezeigt, in der sie im Array definiert sind. Wenn Sie eine andere Reihenfolge benötigen, überschreiben Sie die Standardvorlage.

Standardelemente der Listenvorlage
  1. class.localizedIssuerName
    oder class.issuerName
  2. class.localizedProgramName
    oder class.programName
  3. class.programLogo
  4. class.hexBackgroundColor