Modèle de fidélité

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Utilisez l'outil suivant pour personnaliser votre carte de fidélité et reportez-vous aux extraits de code ci-dessous.

Affichage des modèles de fidélité compatible. Si aucun modèle n'est défini, le modèle par défaut est utilisé.

Définition du modèle

Un modèle de pass est défini au niveau de la classe et permet d'afficher tous les objets associés à la classe. Le modèle définit les champs à afficher dans les différentes sections de la carte.

Le modèle est divisé en plusieurs sections:

Android

Présentation du modèle

Web

Présentation du modèle

Le titre de la fiche

Android

Éléments du titre de la fiche
  1. class.programLogo
  2. class.localizedIssuerName
    ou class.issuerName
  3. class.localizedProgramName
    ou class.programName
  4. class.hexBackgroundColor

Web

Éléments du titre de la fiche
  1. class.programLogo
  2. class.localizedIssuerName
    ou class.issuerName
  3. class.localizedProgramName
    ou class.programName
  4. class.hexBackgroundColor

La section du titre de la fiche présente le logo, le nom de l'émetteur et le titre du programme. Ni les références de champ utilisées pour les remplir, ni leur position ne peuvent être modifiées.

Modèle de fiche

Android

Présentation du modèle

Web

Présentation du modèle

La section des modèles de fiche permet d'afficher des lignes supplémentaires. Ces lignes peuvent contenir des champs de données structurées ou des champs de module de texte.

Vous pouvez spécifier le nombre de lignes qui définissent le nombre d'objets dans la liste class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[]. La liste doit comporter au moins un élément, et nous avons recommencé à utiliser au maximum deux éléments. Chaque élément doit correspondre à l'un des types suivants:

  • oneItem, qui accepte un article :
    • item
  • twoItems, qui accepte deux éléments :
    • startItem
    • endItem
  • threeItems, qui accepte trois éléments :
    • startItem
    • middleItem
    • endItem

Chaque élément peut être défini comme un seul sélecteur de champ (.firstValue), deux sélecteurs de champ (.firstValue et .secondValue) ou un élément prédéfini (.predefinedItem). Les valeurs du champ sélectionné et leurs étiquettes respectives sont affichées. Lorsque vous définissez deux sélecteurs de champ, les valeurs des champs sélectionnés s'affichent avec un séparateur "&". Il en va de même pour les libellés des champs sélectionnés. Les éléments prédéfinis sont utilisés pour définir un rendu plus complexe.

L'exemple de code suivant montre comment remplacer les sections de fiches de modèles de fiches pour spécifier deux lignes. Chaque ligne comprend trois éléments qui font référence à six champs personnalisés textModuleData de niveau de classe et leurs en-têtes en tant que libellés:

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

Le code crée une carte au format de section de modèle de code suivant:

Exemple de remplacement de libellé

Si un élément est vide, il ne s'affiche pas. Pour en savoir plus, consultez la page Références de champ. Si tous les éléments d'une ligne sont vides, celle-ci ne s'affiche pas. Si certains éléments d'une ligne, mais pas tous, sont vides, les éléments non vides sont réorganisés et affichés sur une ligne contenant moins d'éléments.

Si vous ne remplacez pas le modèle de fiche, le nombre par défaut de lignes, d'éléments et de références de champ est utilisé. Pour en savoir plus, consultez Modèle par défaut.

Une fois que vous avez défini une image principale, celle-ci peut s'afficher après la première ligne si la liste cardRowTemplateInfos contient plusieurs lignes ou au-dessus de la ligne s'il n'y en a qu'une.

Code-barres de la carte

Android

Éléments de code-barres de la carte
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type et object.barcode.value
    ou object.accountId
  4. object.barcode.alternateText
    , object.accountId
    ou object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail
  6. object.heroImage
    ou class.heroImage

Web

Éléments de code-barres de la carte
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type et object.barcode.value
    ou object.accountId
  4. object.barcode.alternateText
    , object.accountId
    ou object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

La section de code-barres de la carte permet d'afficher du texte ou des images supplémentaires au-dessus et en dessous du code-barres. Aucun des champs de cette section n'est obligatoire.

Trois sélecteurs de champs peuvent être utilisés pour définir deux champs côte à côte au-dessus et un en dessous du code-barres. Elles sont affichées sans étiquette et peuvent être des champs de données structurées de type texte, des champs de module de texte ou des champs de module d'image. Si vous utilisez des images, celles-ci doivent respecter les consignes relatives à la marque.

Le code-barres est défini par un type et une valeur. Pour obtenir la liste des types de codes-barres acceptés, consultez la documentation de référence. De plus, un texte peut s'afficher juste en dessous du code-barres. Ce texte peut, entre autres, faciliter la lecture de codes-barres.

L'exemple de code suivant montre comment remplacer la section de code-barres d'une carte pour afficher une image au-dessus du code-barres:

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

Le code crée une carte au format de section de code-barres suivant:

Exemple de remplacement de code-barres de carte

Si vous ne remplacez pas la section des codes-barres, les champs de code-barres par défaut sont utilisés. Pour en savoir plus, consultez Modèle par défaut.

Modèle d'informations

Android

Sections du modèle d&#39;informations
  • 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

Sections du modèle d&#39;informations
  • 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 section des modèles d'informations correspond à une liste d'éléments class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. Les éléments peuvent contenir n'importe quel type de champs de données structurées, de champs de module de texte, de champs de module de lien, de champs de module d'image ou de messages.

Chaque élément peut être défini comme un seul sélecteur de champ (.firstValue), deux sélecteurs de champ (.firstValue et .secondValue) ou un élément prédéfini (.predefinedItem). Les valeurs du champ sélectionné et leurs étiquettes respectives sont affichées. Lorsque vous définissez deux sélecteurs de champ, les valeurs des champs sélectionnés s'affichent avec un séparateur "&/t". Il en va de même pour les libellés des champs sélectionnés. Les éléments prédéfinis sont utilisés pour définir un rendu plus complexe. Les champs du module d'image sont affichés en pleine largeur sans étiquette.

L'exemple de code suivant montre comment remplacer la section des détails de la carte pour afficher un seul champ linksModuleData avec son libellé:

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
    

Le code crée une carte au format de section de détails suivant:

Exemple de remplacement détaillé

Si un élément est vide, il ne s'affiche pas. Pour en savoir plus, consultez la page Références de champ.

Si vous ne remplacez pas le modèle de détails, la liste des champs de référence par défaut dans l'ordre par défaut s'affiche. Pour en savoir plus, consultez Modèle par défaut.

Modèle de liste

Lister les éléments du modèle
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.programLogo
  4. class.hexBackgroundColor

La section "Modèle de liste" permet de sélectionner le champ à afficher dans la vue "Passes" de l'application Google Pay. La carte est représentée dans la liste avec le logo, la couleur d'arrière-plan et trois lignes.

L'exemple de code suivant montre comment remplacer le modèle de liste d'une carte pour afficher le champ de date d'expiration de l'objet d'un seul passage dans la première ligne du modèle de liste:

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
    

Le code crée une carte avec l'affichage du modèle de liste suivant:

Exemple de remplacement de liste

Les trois lignes peuvent être définies à l'aide d'un sélecteur de champ. Les champs s'affichent sans libellé.

Libellés

Tous les champs de données structurées comportent un libellé fourni par Google. Google est chargé de fournir une traduction pour chacune de ces étiquettes dans toutes les langues acceptées.

Vous pouvez personnaliser certains de ces libellés à l'aide de l'un des champs class.custom<name_of_the_field>Label. Lorsque vous personnalisez un libellé, vous devez fournir des traductions pour celui-ci dans toutes les langues que vous souhaitez proposer.

Références de champ

Les références de champ sont utilisées dans différentes parties du modèle au format class.classTemplateInfo.*.fields[]. Une référence de champ contient une liste de chemins d'accès à des champs de données structurées, des champs de module de texte, des champs de module de lien, des champs de module d'image ou des messages.

Tous les types de chemins ne sont pas autorisés dans chaque référence de champ. Par exemple, certaines références de champ n'autorisent que les chemins d'accès aux champs de données structurées ou aux champs de module de texte. Les champs structurés textuels sont des champs de données structurées de type chaîne, chaîne localisée, date ou valeur monétaire.

La liste peut être utilisée pour implémenter une logique de remplacement. Cela signifie que si le premier chemin de la liste renvoie vers un champ vide, le chemin suivant est évalué. La logique de remplacement est principalement ciblée sur les champs de données structurées ou les champs de module de texte. Ne mélangez pas différents types de champs dans la même liste. Utilisez la logique de remplacement avec précaution et uniquement dans des situations spécifiques où vous attendez un modèle cohérent de champs qui existe dans certains objets mais pas dans d'autres. La plupart du temps, il est plus facile de créer des classes distinctes pour des cas d'utilisation distincts.

Si tous les chemins d'une liste de référence de champ correspondent à des champs vides, l'élément qui utilise la référence de champ ne s'affiche pas. Si vous souhaitez que l'élément qui utilise la référence de champ soit toujours présent, assurez-vous qu'au moins un chemin d'accès n'est pas vide. Nous vous recommandons de définir un champ avec un caractère spécial, tel que "-", pour représenter une valeur nulle, même si certains champs n'autorisent que des chaînes contenant uniquement un espace.

Pour référencer un champ contenu dans une liste, vous pouvez utiliser son index ou, dans la plupart des cas, utiliser un ID de référence. Les éléments d'une liste pouvant être référencés par ID comportent un champ .id. Nous vous recommandons d'utiliser un ID de référence par rapport à l'index du champ de la liste lorsqu'il est disponible.

Voici un exemple de référence à des champs contenus dans une liste.

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

Dans ce cas, le premier élément de la section des détails de la carte est la deuxième image déclarée dans l'objet. Alors que le deuxième élément de la section des détails de la carte est la première image déclarée dans l'objet.

Modèle par défaut

Android

Éléments par défaut du modèle
  1. class.programLogo
  2. class.localizedIssuerName
    ou class.issuerName
  3. class.localizedProgramName
    ou class.programName
  4. POINTS
    ou object.loyaltyPoints.localizedLabel
    ou object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. RÉCOMPENSES
    ou object.secondaryLoyaltyPoints.localizedLabel
    ou object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type et object.barcode.value
    ou object.accountId
  9. object.barcode.alternateText
    , object.accountId
    ou object.barcode.value
  10. object.heroImage
    ou class.heroImage
  11. class.hexBackgroundColor
  12. NOM DU MEMBRE
    ou class.localizedAccountNameLabel
    ou class.accountNameLabel
  13. object.accountName
  14. MEMBRE
    ou class.localizedAccountIdLabel
    ou class.accountIdLabel
  15. object.accountId
  16. NIVEAU DE RÉCOMPENSES
    ou class.localizedRewardsTierLabel
    ou class.rewardsTierLabel
  17. class.localizedRewardsTier
    ou class.rewardsTier
  18. NIVEAU DE RÉCOMPENSES SECONDAIRE
    ou class.localizedSecondaryRewardsTierLabel
    ou class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    ou 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

Éléments par défaut du modèle
  1. class.programLogo
  2. class.localizedIssuerName
    ou class.issuerName
  3. class.localizedProgramName
    ou class.programName
  4. POINTS
    ou object.loyaltyPoints.localizedLabel
    ou object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. RÉCOMPENSES
    ou object.secondaryLoyaltyPoints.localizedLabel
    ou object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type et object.barcode.value
    ou object.accountId
  9. object.barcode.alternateText
    , object.accountId
    ou object.barcode.value
  10. object.heroImage
    ou class.heroImage
  11. class.hexBackgroundColor
  12. NOM DU MEMBRE
    ou class.localizedAccountNameLabel
    ou class.accountNameLabel
  13. object.accountName
  14. MEMBRE
    ou class.localizedAccountIdLabel
    ou class.accountIdLabel
  15. object.accountId
  16. NIVEAU DE RÉCOMPENSES
    ou class.localizedRewardsTierLabel
    ou class.rewardsTierLabel
  17. class.localizedRewardsTier
    ou class.rewardsTier
  18. NIVEAU DE RÉCOMPENSES SECONDAIRE
    ou class.localizedSecondaryRewardsTierLabel
    ou class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    ou 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

Pour les champs de module d'image, nous n'affichons qu'un seul champ de module d'image de la classe et un seul champ de module d'image de l'objet. Si vous avez besoin de plusieurs champs de module d'image à chaque niveau, remplacez le modèle par défaut.

Pour les champs de module de texte, nous n'affichons que 10 champs de module texte maximum pour la classe et 10 champs de module de texte à partir de l'objet. Les champs s'affichent dans l'ordre dans lequel ils sont définis dans le tableau. Si vous avez besoin de plus de 10 champs de module de texte à chaque niveau, remplacez le modèle par défaut.

Pour les messages, nous affichons 10 messages maximum provenant de la classe et 10 messages provenant de l'objet. Nous ne garantissons pas l'ordre des messages. Si vous avez besoin de plus de 10 messages ou d'une garantie pour n'importe quel niveau, ignorez le modèle par défaut.

Dans le champ du module "Liens", le nombre d'URI que vous pouvez définir n'est pas limité. Les URI sont affichés dans l'ordre suivant pour chaque niveau (classe ou objet):

  1. Coordonnées sur la carte
  2. Numéros de téléphone
  3. Adresses e-mail
  4. Pages Web

Pour chaque groupe, les URI s'affichent dans l'ordre dans lequel ils sont définis dans le tableau. Si vous souhaitez modifier l'ordre de tri, remplacez le modèle par défaut.

Éléments par défaut du modèle de liste
  1. class.localizedIssuerName
    ou class.issuerName
  2. class.localizedProgramName
    ou class.programName
  3. class.programLogo
  4. class.hexBackgroundColor