Modello fedeltà

Utilizza il seguente strumento per personalizzare il tuo pass fedeltà e fare riferimento agli snippet di codice riportati di seguito.

I programmi fedeltà supportano il rendering dei modelli. Se non è definito alcun modello, viene utilizzato quello predefinito.

Definizione di modello

Un modello di pass viene definito a livello di corso e viene utilizzato per visualizzare qualsiasi oggetto associato alla classe. Il modello definisce i campi da visualizzare in diverse sezioni del pass.

Il modello è suddiviso nelle seguenti sezioni:

Android

Panoramica dei modelli

Web

Panoramica dei modelli

Titolo della scheda

Android

Elementi title della scheda
  1. class.programLogo
  2. class.localizedIssuerName
    o class.issuerName
  3. class.localizedProgramName
    o class.programName
  4. class.hexBackgroundColor

Web

Elementi title della scheda
  1. class.programLogo
  2. class.localizedIssuerName
    o class.issuerName
  3. class.localizedProgramName
    o class.programName
  4. class.hexBackgroundColor

Nella sezione del titolo della carta vengono visualizzati il logo, il nome dell'emittente e il titolo del programma. Non è possibile modificare i riferimenti ai campi utilizzati per compilarli né la loro posizione.

Modello scheda

Android

Panoramica dei modelli

Web

Panoramica dei modelli

La sezione relativa ai modelli di schede 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 abbiamo consigliato 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 che 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 il rendering più complesso.

Il seguente codice di esempio mostra come sostituire le sezioni di righe delle schede modelli di scheda per specificare due righe. Ogni riga include tre elementi che fanno riferimento 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 un pass con il formato di sezione del modello di codice seguente:

Esempio di sostituzione di un&#39;etichetta.

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

Se non sostituisci il 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 la sezione Modello predefinito.

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

Codice a barre carta

Android

Elementi codice a barre della scheda
  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 codice a barre della scheda
  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 dei codici a barre delle schede viene utilizzata per visualizzare testo o immagini extra sopra e sotto il codice a barre. Nessuno dei campi di questa sezione è obbligatorio.

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

Il codice a barre è definito da un tipo e un valore. Per un elenco dei tipi di codici a barre supportati, consulta la sezione Riferimento. Inoltre, è possibile visualizzare un testo direttamente sotto il codice a barre. Questo testo consente di eseguire più facilmente la scansione di codici a barre, tra gli altri utilizzi.

Il seguente esempio di codice mostra come sostituire la sezione del codice a barre di un pass 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 un pass con il formato di sezione del codice a barre seguente:

Esempio di sostituzione del codice a barre di una carta.

Se non sostituisci la sezione del codice a barre, vengono utilizzati i campi del codice a barre predefiniti. Per scoprire di più, vedi Modello predefinito.

Modello Dettagli

Android

Sezioni del modello di 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 del modello di 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 del modello dei dettagli è un elenco di elementi class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. Gli elementi possono contenere qualsiasi tipo di campi di dati strutturati, campi del modulo di testo, campi del modulo di link, campi del modulo immagine o messaggi.

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 che 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. I campi del modulo per le immagini vengono visualizzati a larghezza intera senza un'etichetta.

Il seguente esempio di codice mostra come sostituire la sezione dei dettagli del pass per mostrare un singolo campo linksModuleData con la sua 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 un pass con il formato di sezione dei dettagli seguente:

Esempio di override dei dettagli.

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

Se non sostituisci il modello dei dettagli, viene visualizzato l'elenco predefinito dei campi di riferimento nell'ordine predefinito. Per maggiori informazioni, consulta la sezione Modello predefinito.

Modello di elenco

Elenco elementi modello
  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 "Pass" dell'app Google Wallet. Il pass è rappresentato nell'elenco con il logo, il colore di sfondo e tre righe.

Il seguente esempio di codice mostra come sostituire il modello di elenco di un pass per mostrare il campo della data di scadenza di un singolo pass nella prima riga del modello 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 un pass con la seguente visualizzazione del modello di elenco:

Esempio di sostituzione di un elenco.

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

Etichette

Tutti i campi dei dati strutturati hanno un'etichetta fornita da Google. Google è responsabile di fornire una traduzione per 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, sei responsabile della traduzione di quell'etichetta specifica in tutte le lingue che vuoi supportare.

Riferimenti sui campi

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

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

L'elenco può essere utilizzato per implementare una logica di riserva. Ciò significa che se il primo percorso dell'elenco si risolve in un campo vuoto, viene valutato il percorso successivo. La logica di riserva è principalmente indirizzata a campi di dati strutturati basati su testo o a campi di moduli di testo. Non combinare diversi tipi di campi nello stesso elenco. Utilizza la logica di riserva con cautela e solo in situazioni specifiche quando è previsto un pattern coerente di campi esistenti in alcuni oggetti, ma non in altri. Nella maggior parte dei casi è più facile creare classi separate per casi d'uso distinti.

Se tutti i percorsi in un elenco di riferimenti di campo vengono risolti in campi vuoti, l'elemento che utilizza il riferimento del campo non viene visualizzato. Se vuoi che l'elemento che utilizza il riferimento del campo sia sempre presente, assicurati che almeno un percorso non sia vuoto. Ti consigliamo di impostare un campo su un carattere speciale, come "-", per rappresentare un valore nullo, anche se alcuni campi consentono le stringhe contenenti solo uno 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, puoi utilizzare un ID di riferimento. Le voci di un elenco a cui si può fare riferimento tramite ID hanno un campo .id. Ti consigliamo di utilizzare un ID di riferimento sull'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 del pass è la seconda immagine dichiarata nell'oggetto. Il secondo elemento nella sezione dei dettagli del pass è la prima immagine dichiarata nell'oggetto.

Modello predefinito

Android

Elementi modello predefinito
  1. class.programLogo
  2. class.localizedIssuerName
    o class.issuerName
  3. class.localizedProgramName
    o class.programName
  4. PUNTI
    o object.loyaltyPoints.localizedLabel
    o object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. CELEBRAZIONI
    o object.secondaryLoyaltyPoints.localizedLabel
    o object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type e object.barcode.value
    o object.accountId
  9. object.barcode.alternateText
    o object.accountId
    o object.barcode.value
  10. object.heroImage
    o class.heroImage
  11. class.hexBackgroundColor
  12. NOME MEMBRO
    o class.localizedAccountNameLabel
    o class.accountNameLabel
  13. object.accountName
  14. ID MEMBRO
    oppure class.localizedAccountIdLabel
    o class.accountIdLabel
  15. object.accountId
  16. PREMI PER IL LIVELLO
    o class.localizedRewardsTierLabel
    o class.rewardsTierLabel
  17. class.localizedRewardsTier
    o class.rewardsTier
  18. LIVELLO SECONDARIO
    oppure class.localizedSecondaryRewardsTierLabel
    oppure class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    o 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

Elementi modello predefinito
  1. class.programLogo
  2. class.localizedIssuerName
    o class.issuerName
  3. class.localizedProgramName
    o class.programName
  4. PUNTI
    o object.loyaltyPoints.localizedLabel
    o object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. CELEBRAZIONI
    o object.secondaryLoyaltyPoints.localizedLabel
    o object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type e object.barcode.value
    o object.accountId
  9. object.barcode.alternateText
    o object.accountId
    o object.barcode.value
  10. object.heroImage
    o class.heroImage
  11. class.hexBackgroundColor
  12. NOME MEMBRO
    o class.localizedAccountNameLabel
    o class.accountNameLabel
  13. object.accountName
  14. ID MEMBRO
    oppure class.localizedAccountIdLabel
    o class.accountIdLabel
  15. object.accountId
  16. PREMI PER IL LIVELLO
    o class.localizedRewardsTierLabel
    o class.rewardsTierLabel
  17. class.localizedRewardsTier
    o class.rewardsTier
  18. LIVELLO SECONDARIO
    oppure class.localizedSecondaryRewardsTierLabel
    oppure class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    o 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

Per i campi dei moduli di immagine, mostriamo un solo campo di modulo immagine della classe e un solo campo di modulo immagine dall'oggetto. Se hai bisogno di più campi di moduli immagine in entrambi i livelli, sostituisci il modello predefinito.

Per i campi dei moduli di testo, mostriamo solo un massimo di 10 campi del modulo di testo della classe e 10 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 10 campi dei moduli di testo in entrambi i livelli, sostituisci il modello predefinito.

Per i messaggi, mostriamo solo un massimo di 10 messaggi della classe e 10 messaggi dell'oggetto. Non possiamo garantire l'ordine dei messaggi. Se hai bisogno di più di 10 messaggi in entrambi i livelli o una garanzia per tutti gli ordini, esegui l'override del modello predefinito.

Non è previsto alcun limite per il campo del modulo dei link. Gli URI vengono visualizzati nel gruppo 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, sostituisci il modello predefinito.

Elementi modello di elenco predefiniti
  1. class.localizedIssuerName
    o class.issuerName
  2. class.localizedProgramName
    o class.programName
  3. class.programLogo
  4. class.hexBackgroundColor