Modello fedeltà

Le tessere fedeltà supportano il rendering dei modelli. Se non viene definito alcun modello, viene utilizzato quello predefinito.

Definizione del template

Un modello di tessera viene definito a livello di classe e viene utilizzato per visualizzare qualsiasi oggetto associato alla classe. Il template definisce i campi da visualizzare nelle diverse sezioni della tessera.

Il modello è suddiviso nelle seguenti sezioni:

Android

Panoramica delle sezioni e delle posizioni del layout dei modelli di tessera

Web

Panoramica delle sezioni e delle posizioni del layout dei modelli di tessera

Titolo della scheda

Android

Elementi di layout del titolo della scheda e posizioni dei campi Titolo della scheda predefinita
  1. class.programLogo
  2. class.localizedIssuerName
    o class.issuerName
  3. class.localizedProgramName
    o class.programName
  4. class.hexBackgroundColor

Titolo della scheda con logo largo
  1. class.wideProgramLogo
  2. class.localizedProgramName
    o class.programName
  3. class.hexBackgroundColor

Web

Elementi di layout del titolo della scheda e posizioni dei campi Titolo della scheda predefinita
  1. class.programLogo
  2. class.localizedIssuerName
    o class.issuerName
  3. class.localizedProgramName
    o class.programName
  4. class.hexBackgroundColor

Titolo della scheda con logo largo
  1. class.wideProgramLogo
  2. class.localizedProgramName
    o class.programName
  3. class.hexBackgroundColor

La sezione del titolo della tessera mostra il logo, il nome dell'emittente e il titolo del programma. Né i riferimenti ai campi utilizzati per compilarli né la loro posizione possono essere modificati.

Quando il campo del logo largo è impostato, sui dispositivi mobili l'intestazione del modello predefinito con il logo e il nome dell'autorità di certificazione viene sostituita con il logo largo.

Segui le linee guida per l'immagine del logo largo quando crei il logo largo dell'intestazione per visualizzare l'immagine in modo ottimale sulle tessere.

Modello di scheda

Android

Elementi di layout delle righe e posizioni dei campi del modello di scheda

Web

Elementi di layout delle righe e posizioni dei campi del modello di scheda

La sezione del modello di scheda viene utilizzata per visualizzare righe aggiuntive. Queste righe possono contenere campi di dati strutturati basati su testo o campi di moduli di testo.

Puoi specificare il numero di righe che definiscono il numero di oggetti nell'elenco class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[] . L'elenco richiede almeno un elemento e consigliamo di utilizzare al massimo due elementi. Ogni elemento deve essere di uno dei seguenti tipi:

  • oneItem, che accetta un elemento:
    • item
  • twoItems, che accetta due elementi:
    • startItem
    • endItem
  • threeItems, che accetta tre elementi:
    • startItem
    • middleItem
    • endItem

Ogni elemento può essere definito come un singolo selettore di campo (.firstValue), due selettori di campo (.firstValue e .secondValue) o un elemento predefinito (.predefinedItem). Vengono visualizzati sia i valori del campo selezionato sia le rispettive etichette. Quando definisci due selettori di campi, i valori dei campi selezionati vengono visualizzati con un separatore "/". Lo stesso vale per le etichette dei campi selezionati. Gli elementi predefiniti vengono utilizzati per definire un rendering più complesso.

Il seguente esempio di codice mostra come eseguire l'override delle sezioni delle righe della scheda del modello di scheda per specificare due righe. Ogni riga include tre elementi che fanno riferimento ciascuno a sei campi personalizzati textModuleData a livello di classe e alle relative intestazioni come etichette:

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

Il codice crea una tessera con il seguente formato della sezione del modello di codice:

Esempio di override di un'etichetta.

Se un elemento è vuoto, non viene visualizzato. Per maggiori dettagli, consulta Riferimenti ai campi. Se tutti gli elementi di una riga sono vuoti, la riga non viene visualizzata. Se alcuni elementi di una riga sono vuoti, ma non tutti, gli elementi non vuoti vengono riorganizzati e visualizzati come una riga con meno elementi.

Se non esegui l'override del modello di scheda, vengono utilizzati il numero predefinito di righe, il numero predefinito di elementi e i riferimenti ai campi predefiniti. Per maggiori dettagli, consulta Modello predefinito.

Dopo aver definito un'immagine hero, questa può essere visualizzata dopo la prima riga, se sono presenti più righe nell'elenco cardRowTemplateInfos, o sopra la riga, se ce n'è solo una.

Codice a barre della carta

Android

Elementi e posizioni del layout del codice a barre della tessera
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type e object.barcode.value
    o object.accountId
  4. object.barcode.alternateText
    o object.accountId
    o object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail
  6. object.heroImage
    o class.heroImage

Web

Elementi e posizioni del layout del codice a barre della tessera
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type e object.barcode.value
    o object.accountId
  4. object.barcode.alternateText
    o object.accountId
    o object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

La sezione del codice a barre della tessera viene utilizzata per visualizzare testo o immagini aggiuntivi prima e dopo il codice a barre. Nessuno dei campi di questa sezione è obbligatorio.

Esistono tre selettori di campi che possono essere utilizzati per definire due campi affiancati che precedono il codice a barre e uno che lo segue. Questi vengono visualizzati senza etichetta e possono essere campi di dati strutturati basati su testo, campi di moduli di testo o campi di moduli di immagini. Se utilizzi immagini, queste devono seguire le linee guida per il brand.

Il codice a barre è definito da un tipo e da un valore. Per un elenco dei tipi di codici a barre supportati, consulta la sezione Riferimento. Inoltre, è possibile mostrare un testo direttamente sotto il codice a barre. Questo testo può semplificare la scansione dei codici a barre, tra gli altri utilizzi.

Il seguente esempio di codice mostra come eseguire l'override della sezione del codice a barre di una tessera per visualizzare un'immagine sopra il codice a barre:

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

Il codice crea una tessera con il seguente formato della sezione del codice a barre:

Esempio di override del codice a barre di una tessera.

Se non esegui l'override della sezione del codice a barre, vengono utilizzati i campi predefiniti del codice a barre. Per saperne di più, consulta Modello predefinito.

Sezione inferiore

Android

Sezioni e voci inferiori del modello dei dettagli
  • 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

Sezioni e voci inferiori del modello dei dettagli
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • …

La sezione inferiore è un elenco di elementi class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. Gli elementi possono contenere qualsiasi tipo di campo di dati strutturati, campo di modulo di testo, campo di modulo di link, campo di modulo di immagine o messaggio.

Ogni elemento può essere definito come un singolo selettore di campo (.firstValue), due selettori di campo (.firstValue e .secondValue) o un elemento predefinito (.predefinedItem). Vengono visualizzati sia i valori del campo selezionato sia le rispettive etichette. Quando definisci due selettori di campo, i valori dei campi selezionati vengono visualizzati con un separatore "/". Lo stesso vale per le etichette dei campi selezionati. Gli elementi predefiniti vengono utilizzati per definire un rendering più complesso. I campi del modulo immagine vengono visualizzati a larghezza intera senza etichetta.

Il seguente esempio di codice mostra come eseguire l'override della sezione inferiore della tessera per mostrare un singolo campo linksModuleData con la relativa etichetta:

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
    

Il codice crea una tessera con il seguente formato della sezione inferiore:

Esempio di override della sezione inferiore.

Se un elemento è vuoto, non viene visualizzato. Per maggiori dettagli, consulta Riferimenti ai campi.

Se non esegui l'override della sezione inferiore, viene visualizzato l'elenco predefinito dei campi di riferimento nell'ordine predefinito. Per saperne di più, consulta Modello predefinito.

Modello elenco

Elenca gli elementi del template
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.programLogo
  4. class.hexBackgroundColor

La sezione del modello di elenco viene utilizzata per selezionare il campo da visualizzare nella visualizzazione "Tessere" dell'app Google Wallet. La tessera è rappresentata nell'elenco con il logo, il colore di sfondo e tre righe.

Il seguente esempio di codice mostra come eseguire l'override del template di elenco di una tessera per mostrare il campo della data di scadenza dell'oggetto di una singola tessera nella prima riga del template di elenco:

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
    

Il codice crea una tessera con il seguente rendering del modello di elenco:

Esempio di override di un elenco.

Le tre righe possono essere definite con un selettore di campi. I campi vengono visualizzati senza etichetta.

Etichette

Tutti i campi dei dati strutturati hanno un'etichetta fornita da Google. Google è responsabile della traduzione di ciascuna di queste etichette in tutte le lingue supportate.

Puoi personalizzare alcune di queste etichette utilizzando uno dei campi class.custom<name_of_the_field>Label. Quando personalizzi un'etichetta, diventi responsabile della fornitura delle traduzioni per quell'etichetta specifica in tutte le lingue che vuoi supportare.

Riferimenti ai campi

I riferimenti ai campi vengono utilizzati in diverse parti del modello con il formato class.classTemplateInfo.*.fields[]. Un riferimento campo contiene un elenco di percorsi ai campi di dati strutturati, ai campi del modulo di testo, ai campi del modulo di link, ai campi del modulo di immagine o ai messaggi.

Non tutti i tipi di percorsi sono consentiti in ogni riferimento di campo. Ad esempio, alcuni riferimenti ai campi consentono solo percorsi verso campi di dati strutturati basati su testo o campi di moduli di testo. I campi strutturati basati su testo sono campi di dati strutturati di tipo stringa, stringa localizzata, data o valuta.

L'elenco può essere utilizzato per implementare una logica di riserva. Ciò significa che se il primo percorso nell'elenco restituisce un campo vuoto, viene valutato il percorso successivo. La logica di riserva è rivolta principalmente ai campi di dati strutturati basati su testo o ai campi dei moduli di testo. Non mescolare tipi di campi diversi nello stesso elenco. Utilizza la logica di riserva con cautela e solo in situazioni specifiche in cui prevedi un pattern coerente di campi presenti in alcuni oggetti, ma non in altri. Nella maggior parte dei casi, è più semplice creare classi separate per casi d'uso separati.

Se tutti i percorsi in un elenco di riferimenti ai campi rimandano a campi vuoti, l'elemento che utilizza il riferimento al campo non viene visualizzato. Se vuoi che l'elemento che utilizza il riferimento al campo sia sempre presente, assicurati che almeno un percorso non sia vuoto. Ti consigliamo di impostare un campo su un carattere speciale, ad esempio "-", per rappresentare un valore null, anche se alcuni campi consentono stringhe con un solo spazio.

Per fare riferimento a un campo contenuto in un elenco, puoi utilizzare l'indice del campo nell'elenco o, nella maggior parte dei casi, un ID di riferimento. Gli elementi di un elenco a cui è possibile fare riferimento tramite ID hanno un campo .id. Ti consigliamo di utilizzare un ID di riferimento anziché l'indice del campo nell'elenco, se disponibile.

Ecco un esempio di come fare riferimento ai campi contenuti in un elenco.

  • 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 questo caso, il primo elemento nella sezione dei dettagli della tessera è la seconda immagine dichiarata nell'oggetto. Il secondo elemento nella sezione dei dettagli della tessera è la prima immagine dichiarata nell'oggetto.

Modello predefinito

Android

Elementi e posizioni del layout del modello di tessera predefinito
  1. class.programLogo
  2. class.localizedIssuerName
    o class.issuerName
  3. class.localizedProgramName
    o class.programName
  4. object.barcode.type e object.barcode.value
    o object.accountId
  5. object.barcode.alternateText
    o object.accountId
    o object.barcode.value
  6. POINTS
    or object.loyaltyPoints.localizedLabel
    or object.loyaltyPoints.label
  7. object.loyaltyPoints.balance
  8. REWARDS
    o object.secondaryLoyaltyPoints.localizedLabel
    o object.secondaryLoyaltyPoints.label
  9. object.secondaryLoyaltyPoints.balance
  10. class.hexBackgroundColor
  11. object.heroImage
    o class.heroImage
  12. NOME MEMBRO
    o class.localizedAccountNameLabel
    o class.accountNameLabel
  13. object.accountName
  14. ID MEMBRO
    o class.localizedAccountIdLabel
    o class.accountIdLabel
  15. object.accountId
  16. LIVELLO PREMI
    o class.localizedRewardsTierLabel
    o class.rewardsTierLabel
  17. class.localizedRewardsTier
    o class.rewardsTier
  18. LIVELLO DI PREMI SECONDARIO
    o class.localizedSecondaryRewardsTierLabel
    o class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    o class.secondaryRewardsTier
  20. class.messages[].header
  21. class.messages[].body
  22. object.messages[].header
  23. object.messages[].body
  24. class.textModulesData[0..9].header
  25. class.textModulesData[0..9].body
  26. object.textModulesData[0..9].header
  27. object.textModulesData[0..9].body
  28. class.linksModuleData.uris[].description
  29. object.linksModuleData.uris[].description
  30. class.homepageUri

Web

Elementi e posizioni del layout del modello di tessera predefinito
  1. class.programLogo
  2. class.localizedIssuerName
    o class.issuerName
  3. class.localizedProgramName
    o class.programName
  4. object.barcode.type e object.barcode.value
    o object.accountId
  5. object.barcode.alternateText
    o object.accountId
    o object.barcode.value
  6. POINTS
    or object.loyaltyPoints.localizedLabel
    or object.loyaltyPoints.label
  7. object.loyaltyPoints.balance
  8. REWARDS
    o object.secondaryLoyaltyPoints.localizedLabel
    o object.secondaryLoyaltyPoints.label
  9. object.secondaryLoyaltyPoints.balance
  10. class.hexBackgroundColor
  11. object.heroImage
    o class.heroImage
  12. NOME MEMBRO
    o class.localizedAccountNameLabel
    o class.accountNameLabel
  13. object.accountName
  14. ID MEMBRO
    o class.localizedAccountIdLabel
    o class.accountIdLabel
  15. object.accountId
  16. LIVELLO PREMI
    o class.localizedRewardsTierLabel
    o class.rewardsTierLabel
  17. class.localizedRewardsTier
    o class.rewardsTier
  18. LIVELLO DI PREMI SECONDARIO
    o class.localizedSecondaryRewardsTierLabel
    o class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    o class.secondaryRewardsTier
  20. class.messages[].header
  21. class.messages[].body
  22. object.messages[].header
  23. object.messages[].body
  24. class.textModulesData[0..9].header
  25. class.textModulesData[0..9].body
  26. object.textModulesData[0..9].header
  27. object.textModulesData[0..9].body
  28. class.linksModuleData.uris[].description
  29. object.linksModuleData.uris[].description
  30. class.homepageUri

Per i campi del modulo immagine, mostriamo un solo campo del modulo immagine della classe e un solo campo del modulo immagine dell'oggetto. Se hai bisogno di più di un campo del modulo immagine a entrambi i livelli, esegui l'override del modello predefinito.

Per i campi del modulo di testo, mostriamo un massimo di 20 campi del modulo di testo della classe e 20 campi del modulo di testo dell'oggetto. I campi vengono visualizzati nello stesso ordine in cui sono definiti nell'array. Se hai bisogno di più di 20 campi del modulo di testo a uno dei due livelli, esegui l'override del modello predefinito.

Per i messaggi, mostriamo solo un massimo di 20 messaggi della classe e 20 messaggi dell'oggetto. Non garantiamo l'ordine dei messaggi. Se hai bisogno di più di 20 messaggi a uno dei due livelli o di una garanzia per gli ordini, esegui l'override del modello predefinito.

Per il campo del modulo dei link, non esiste un limite al numero di URI che puoi definire. Gli URI vengono visualizzati raggruppati nel seguente ordine per ogni livello (classe o oggetto):

  1. Coordinate mappa
  2. Numeri di telefono
  3. Indirizzi email
  4. Pagine web

Per ogni gruppo, gli URI vengono visualizzati nello stesso ordine in cui sono definiti nell'array. Se hai bisogno di un ordine diverso, esegui l'override del template predefinito.