Modèle de carte d'embarquement

Les cartes d'embarquement sont compatibles avec le rendu de modèle. 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 carte est défini au niveau de la classe et permet d'afficher tout objet associé à la classe. Le modèle définit les champs à afficher dans les différentes sections de la carte.

Le modèle comprend les sections suivantes :

Android

Présentation du modèle

Web

Présentation du modèle

Titre de la carte

Android

Éléments du titre de la carte
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    ou class.localizedIssuerName
    ou class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    ou class.flightHeader.carrier.carrierIcaoCode)
    et class.flightHeader.flightNumber
  4. ville de l'aéroport (issue de class.origin.airportIataCode)
    ou class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. ville de l'aéroport (issue de class.destination.airportIataCode)
    ou class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. object.hexBackgroundColor
    ou class.hexBackgroundColor

Web

Éléments du titre de la carte
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    ou class.localizedIssuerName
    ou class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    ou class.flightHeader.carrier.carrierIcaoCode)
    et class.flightHeader.flightNumber
  4. ville de l'aéroport (issue de class.origin.airportIataCode)
    ou class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. ville de l'aéroport (issue de class.destination.airportIataCode)
    ou class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. object.hexBackgroundColor
    ou class.hexBackgroundColor

La section du titre de la carte affiche le logo, le nom de la compagnie aérienne et le résumé du vol. Ces trois éléments sont obligatoires. Ni les références de champ utilisées pour les renseigner, ni leur position ne peuvent être modifiées.

Si class.origin.airportNameOverride ou class.detination.airportNameOverride n'est pas défini, le nom de la ville de l'aéroport est renseigné automatiquement avec la ville associée au code IATA dans class.origin.airportIataCode et class.destination.airportIataCode respectivement.

Modèle de carte

Android

Présentation du modèle

Web

Présentation du modèle

La section du modèle de carte permet d'afficher des lignes supplémentaires. Ces lignes peuvent contenir des champs de données structurées textuelles 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 contenir au moins un élément, mais nous recommandons d'en utiliser deux au maximum. Chaque élément doit être de l'un des types suivants :

  • oneItem, qui accepte un item :
    • item
  • twoItems, qui accepte deux items :
    • startItem
    • endItem
  • threeItems, qui accepte trois items :
    • startItem
    • middleItem
    • endItem

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

L'exemple de code suivant montre comment remplacer les sections de ligne de la carte du modèle de carte pour spécifier deux lignes. Chaque ligne comprend trois items qui référencent chacun six champs textModuleData personnalisés au niveau de la 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 dont la section de modèle de code a le format suivant :

Exemple de remplacement de libellé.

Si un item est vide, il n'est pas affiché. Pour en savoir plus, consultez Références de champ. Si tous les items d'une ligne sont vides, la ligne n'est pas affichée. Si certains items d'une ligne sont vides (mais pas tous), les items non vides sont réorganisés et affichés sous la forme d'une ligne comportant moins d'items.

Si vous ne remplacez pas le modèle de carte, les nombres de lignes et d'items et les références de champ par défaut sont utilisés. Pour en savoir plus, consultez Modèle par défaut.

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

Code-barres de la carte

Android

Éléments du 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.reservationInfo.confirmationCode
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

Web

Éléments du 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.reservationInfo.confirmationCode
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

La section du 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 champ peuvent être utilisés pour définir deux champs côte à côte au-dessus du code-barres et un en dessous. Ceux-ci sont affichés sans libellé, et peuvent être des champs de données structurées textuelles, des champs de module de texte ou des champs de module d'image. Si vous utilisez des images, elles 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, du texte peut s'afficher directement sous le code-barres. Ce texte peut, entre autres, faciliter la lecture des codes-barres.

L'exemple de code suivant montre comment remplacer la section du 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 dont la section de code-barres a le format suivant :

Exemple de remplacement de code-barres d&#39;une carte.

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

Modèle des détails

Android

Sections du modèle des détails
  • 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 des détails
  • 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 du modèle des détails est une liste d'items class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. Ces items peuvent contenir tout 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 item peut être défini comme un sélecteur de champ unique (.firstValue), deux sélecteurs de champ (.firstValue et .secondValue) ou un item prédéfini (.predefinedItem). Les valeurs du champ sélectionné et leurs libellés respectifs s'affichent. Si vous définissez deux sélecteurs de champ, les valeurs des champs sélectionnés sont affichées avec un séparateur "/". Il en va de même pour les libellés des champs sélectionnés. Les items prédéfinis sont utilisés pour définir un rendu plus complexe. Les champs de module d'image sont affichés en pleine largeur, sans libellé.

L'exemple de code suivant montre comment remplacer la section des détails de la carte pour afficher un champ linksModuleData unique 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 dont la section des détails a le format suivant :

Exemple de remplacement des détails.

Si un item est vide, il n'est pas affiché. Pour en savoir plus, consultez Références de champ.

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

Modèle de liste

Éléments du modèle de liste
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.localScheduledDepartureDateTime
    (date uniquement) (groupée)
    ou class.classTemplateInfo.listTemplateOverride
    .secondRowOption.fields[]
  3. class.flightHeader.carrier.airlineLogo
  4. object.hexBackgroundColor
    ou class.hexBackgroundColor
  5. <# cartes> (groupées)

La section du modèle de liste permet de sélectionner les champs à afficher dans la vue "Cartes" de l'application Google Wallet. 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 dans la première ligne du modèle de liste un champ de date d'expiration de l'objet correspondant à une carte donnée :

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 le rendu de modèle de liste suivant :

Exemple de remplacement de liste.

Les trois lignes peuvent être définies avec un sélecteur de champ. Les champs s'affichent sans libellé. Pour les cartes groupées, la deuxième ligne indique toujours la date locale prévue pour le départ et la troisième ligne indique toujours le nombre de cartes groupées.

Références de champ

Les références de champ sont utilisées dans différentes parties du modèle sous la forme 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 d'accès 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 à des champs de données structurées textuelles ou à des champs de module de texte. Les champs de données structurées textuelles 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 d'accès de la liste correspond à un champ vide, le chemin suivant est évalué. La logique de remplacement cible principalement les champs de données structurées textuelles 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 prudence et uniquement dans des cas spécifiques où vous attendez un schéma cohérent de champs qui existent dans certains objets, mais pas dans d'autres. La plupart du temps, il est plus simple de créer des classes distinctes pour chaque cas d'utilisation.

Si tous les chemins d'accès d'une liste de références de champ correspondent à des champs vides, l'item utilisant la référence de champ ne s'affiche pas. Si vous souhaitez que l'item utilisant 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 sur un caractère spécial, par exemple "-", afin de représenter une valeur nulle, même si certains champs autorisent des chaînes contenant uniquement un espace.

Pour référencer un champ contenu dans une liste, vous pouvez utiliser son index dans la liste ou, dans la plupart des cas, un identifiant de référence. Les items d'une liste pouvant être référencés à l'aide d'un identifiant comportent un champ .id. Nous vous recommandons d'utiliser un identifiant de référence plutôt que l'index du champ dans la liste, lorsque cela est possible.

Voici un exemple montrant comment référencer 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 item de la section des détails de la carte est la deuxième image déclarée dans l'objet, tandis que le deuxième item 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 du modèle par défaut
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    ou class.localizedIssuerName
    ou class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    ou class.flightHeader.carrier.carrierIcaoCode)
    et class.flightHeader.flightNumber
  4. ville de l'aéroport (issue de class.origin.airportIataCode)
    ou class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. ville de l'aéroport (issue de class.destination.airportIataCode)
    ou class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. TERMINAL
  9. class.origin.terminal
  10. GATE
  11. class.origin.gate
  12. CABIN (par défaut) ou CLASS ou TIER (selon
    class.boardingAndSeatingPolicy.SeatClassPolicy)
  13. object.boardingAndSeatingInfo.SeatClass
  14. BOARDING
    ou GATE CLOSES
    ou DEPARTURE
  15. class.localBoardingDateTime (heure uniquement)
    ou class.localGateClosingDateTime (heure uniquement)
    ou class.localEstimatedOrActualDepartureDateTime (heure uniquement)
    ou class.localScheduledDepartureDateTime (heure uniquement)
  16. PASSENGER
  17. object.passengerName
  18. ZONE (par défaut) ou GROUP (selon
    class.boardingAndSeatingPolicy.boardingPolicy)
  19. object.boardingAndSeatingInfo.boardingGroup
  20. SEAT
  21. object.boardingAndSeatingInfo.seatNumber
    ou object.boardingAndSeatingInfo.seatAssignment
  22. object.securityProgramLogo
  23. object.boardingAndSeatingInfo.boardingPrivilegeImage
  24. object.barcode.type et object.barcode.value
    ou object.reservationInfo.confirmationCode
  25. object.barcode.alternateText
  26. class.flightHeader.carrier.airlineAllianceLogo
  27. object.hexBackgroundColor
    ou class.hexBackgroundColor
  28. POSITION
  29. object.boardingAndSeatingInfo.boardingPosition
  30. SEQUENCE
  31. object.boardingAndSeatingInfo.sequenceNumber
  32. BOARDING DOOR
  33. object.boardingAndSeatingInfo.boardingDoor
  34. FLIGHT NUMBER
  35. (class.flightHeader.operatingCarrier.carrierIataCode
    ou class.flightHeader.operatingCarrier.carrierIcaoCode)
    et class.flightHeader.operatingFlightNumber
    et class.flightHeader.operatingCarrier.airlineName
  36. CONFIRMATION NUMBER
  37. object.reservationInfo.confirmationCode
  38. TICKET NUMBER
  39. object.reservationInfo.eticketNumber
  40. FREQUENT FLYER NUMBER
  41. object.reservationInfo
    .frequentFlyerInfo.frequentFlyerNumber
    et object.reservationInfo
    .frequentFlyerInfo.frequentFlyerProgramName
  42. GATE CLOSES
  43. class.localGateClosingDateTime
  44. SCHEDULED DEPARTURE TIME
  45. class.localScheduledDepartureDateTime
  46. ESTIMATED DEPARTURE TIME
  47. class.localEstimatedOrActualDepartureDateTime
  48. SCHEDULED ARRIVAL TIME
  49. class.localScheduledArrivalDateTime
  50. ESTIMATED ARRIVAL TIME
  51. class.localEstimatedOrActualArrivalDateTime
  52. ARRIVAL TERMINAL
  53. class.destination.terminal
  54. ARRIVAL GATE
  55. class.destination.gate
  56. class.imageModulesData[0].mainImage
  57. object.imageModulesData[0].mainImage
  58. class.messages[].header
  59. class.messages[].body
  60. object.messages[].header
  61. object.messages[].body
  62. class.textModulesData[0..9].header
  63. class.textModulesData[0..9].body
  64. object.textModulesData[0..9].header
  65. object.textModulesData[0..9].body
  66. class.linksModuleData.uris[].description
  67. object.linksModuleData.uris[].description

Web

Éléments du modèle par défaut
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    ou class.localizedIssuerName
    ou class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    ou class.flightHeader.carrier.carrierIcaoCode)
    et class.flightHeader.flightNumber
  4. ville de l'aéroport (issue de class.origin.airportIataCode)
    ou class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. ville de l'aéroport (issue de class.destination.airportIataCode)
    ou class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. TERMINAL
  9. class.origin.terminal
  10. GATE
  11. class.origin.gate
  12. CABIN (par défaut) ou CLASS ou TIER (selon
    class.boardingAndSeatingPolicy.SeatClassPolicy)
  13. object.boardingAndSeatingInfo.SeatClass
  14. BOARDING
    ou GATE CLOSES
    ou DEPARTURE
  15. class.localBoardingDateTime (heure uniquement)
    ou class.localGateClosingDateTime (heure uniquement)
    ou class.localEstimatedOrActualDepartureDateTime (heure uniquement)
    ou class.localScheduledDepartureDateTime (heure uniquement)
  16. PASSENGER
  17. object.passengerName
  18. ZONE (par défaut) ou GROUP (selon
    class.boardingAndSeatingPolicy.boardingPolicy)
  19. object.boardingAndSeatingInfo.boardingGroup
  20. SEAT
  21. object.boardingAndSeatingInfo.seatNumber
    ou object.boardingAndSeatingInfo.seatAssignment
  22. object.securityProgramLogo
  23. object.boardingAndSeatingInfo.boardingPrivilegeImage
  24. object.barcode.type et object.barcode.value
    ou object.reservationInfo.confirmationCode
  25. object.barcode.alternateText
  26. class.flightHeader.carrier.airlineAllianceLogo
  27. object.hexBackgroundColor
    ou class.hexBackgroundColor
  28. POSITION
  29. object.boardingAndSeatingInfo.boardingPosition
  30. SEQUENCE
  31. object.boardingAndSeatingInfo.sequenceNumber
  32. BOARDING DOOR
  33. object.boardingAndSeatingInfo.boardingDoor
  34. FLIGHT NUMBER
  35. (class.flightHeader.operatingCarrier.carrierIataCode
    ou class.flightHeader.operatingCarrier.carrierIcaoCode)
    et class.flightHeader.operatingFlightNumber
    et class.flightHeader.operatingCarrier.airlineName
  36. CONFIRMATION NUMBER
  37. object.reservationInfo.confirmationCode
  38. TICKET NUMBER
  39. object.reservationInfo.eticketNumber
  40. FREQUENT FLYER NUMBER
  41. object.reservationInfo
    .frequentFlyerInfo.frequentFlyerNumber
    et object.reservationInfo
    .frequentFlyerInfo.frequentFlyerProgramName
  42. GATE CLOSES
  43. class.localGateClosingDateTime
  44. SCHEDULED DEPARTURE TIME
  45. class.localScheduledDepartureDateTime
  46. ESTIMATED DEPARTURE TIME
  47. class.localEstimatedOrActualDepartureDateTime
  48. SCHEDULED ARRIVAL TIME
  49. class.localScheduledArrivalDateTime
  50. ESTIMATED ARRIVAL TIME
  51. class.localEstimatedOrActualArrivalDateTime
  52. ARRIVAL TERMINAL
  53. class.destination.terminal
  54. ARRIVAL GATE
  55. class.destination.gate
  56. class.imageModulesData[0].mainImage
  57. object.imageModulesData[0].mainImage
  58. class.messages[].header
  59. class.messages[].body
  60. object.messages[].header
  61. object.messages[].body
  62. class.textModulesData[0..9].header
  63. class.textModulesData[0..9].body
  64. object.textModulesData[0..9].header
  65. object.textModulesData[0..9].body
  66. class.linksModuleData.uris[].description
  67. object.linksModuleData.uris[].description

Par défaut, la section des détails affiche également object.boardingAndSeatingInfo.boardingGroup, object.boardingAndSeatingInfo.seatClass et object.boardingAndSeatingInfo.seatNumber si la section de la carte est remplacée et que ces champs ne sont plus présents dans la section de la carte.

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

Pour les champs de module de texte, nous affichons uniquement un maximum de 20 champs de module de texte de la classe et 20 champs de module de texte 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 20 champs de module de texte au niveau de la classe ou de l'objet, remplacez le modèle par défaut.

Pour les messages, nous affichons uniquement un maximum de 20 messages de la classe et 20 messages de l'objet. Nous ne garantissons pas l'ordre des messages. Si vous avez besoin de plus de 20 messages au niveau de la classe ou de l'objet, ou d'une garantie concernant leur ordre, remplacez le modèle par défaut.

Pour le champ de module de lien, le nombre d'URI que vous pouvez définir n'est pas limité. Les URI sont affichés de manière groupée dans l'ordre suivant pour chaque niveau (classe ou objet) :

  1. Coordonnées géographiques
  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 avez besoin d'un ordre différent, remplacez le modèle par défaut.

Éléments du modèle de liste par défaut
  1. class.origin.airportIataCode
    et class.destination.airportIataCode
  2. class.localScheduledDepartureDateTime
    (date uniquement)
  3. class.flightHeader.carrier.airlineLogo
  4. object.hexBackgroundColor
    ou class.hexBackgroundColor
  5. <# cartes> (groupées)