Modelo de fidelidade

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Use a ferramenta a seguir para personalizar seu cartão de fidelidade e consulte os snippets de código abaixo.

Os cartões de fidelidade são compatíveis com a renderização do modelo. Se nenhum modelo for definido, o padrão será usado.

Definição do modelo

Um modelo de cartão é definido no nível da classe e usado para exibir qualquer objeto associado à classe. O modelo define quais campos serão exibidos em diferentes seções do cartão.

O modelo é dividido nas seguintes seções:

Android

Visão geral do modelo

Web

Visão geral do modelo

Título do cartão

Android

Elementos do título do card
  1. class.programLogo
  2. class.localizedIssuerName
    ou class.issuerName
  3. class.localizedProgramName
    ou class.programName
  4. class.hexBackgroundColor

Web

Elementos do título do card
  1. class.programLogo
  2. class.localizedIssuerName
    ou class.issuerName
  3. class.localizedProgramName
    ou class.programName
  4. class.hexBackgroundColor

A seção de título do cartão exibe o logotipo, o nome do emissor e o título do programa. Não é possível mudar as referências de campo usadas para preenchê-las nem a posição delas.

Modelo do card

Android

Visão geral do modelo

Web

Visão geral do modelo

A seção de modelo do card é usada para exibir linhas extras. Essas linhas podem conter campos de dados estruturados baseados em texto ou campos de módulo de texto.

É possível especificar o número de linhas que definem o número de objetos na lista class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[]. A lista exige pelo menos um elemento, e recomendamos o uso de no máximo dois elementos. Cada elemento precisa ser de um dos seguintes tipos:

  • oneItem, que aceita um item:
    • item
  • twoItems, que aceita dois itens:
    • startItem
    • endItem
  • threeItems, que aceita três itens:
    • startItem
    • middleItem
    • endItem

Cada item pode ser definido como um seletor de campo (.firstValue), dois seletores de campo (.firstValue e .secondValue) ou um item predefinido (.predefinedItem). Os valores do campo selecionado e os respectivos rótulos são exibidos. Ao definir dois seletores de campo, os valores dos campos selecionados são exibidos com um separador "/". O mesmo vale para os rótulos dos campos selecionados. Os itens predefinidos são usados para definir a renderização mais complexa.

O exemplo de código a seguir mostra como substituir as seções de linha do cartão de modelo de cartão para especificar duas linhas. Cada linha inclui três itens que fazem referência a seis campos personalizados de textModuleData no nível da classe e os cabeçalhos como rótulos:

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

O código cria um cartão com o seguinte formato de seção de modelo de código:

Exemplo de uma modificação de rótulo.

Se um item estiver vazio, ele não será exibido. Para mais detalhes, consulte Referências de campo. Se todos os itens de uma linha estiverem vazios, a linha não será exibida. Se apenas alguns itens em uma linha estiverem vazios, os itens não vazios serão reorganizados e exibidos como uma linha com menos itens.

Se você não modificar o modelo do cartão, serão usados o número padrão de linhas, de itens e as referências de campo padrão. Para mais detalhes, consulte Modelo padrão.

Após definir uma imagem principal, ela poderá aparecer depois da primeira linha, se houver várias linhas na lista cardRowTemplateInfos, ou acima da linha, se houver apenas uma.

Código de barras do cartão

Android

Elementos do código de barras do cartão
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type e object.barcode.value
    ou object.accountId
  4. object.barcode.alternateText
    ou object.accountId
    ou object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail
  6. object.heroImage
    ou class.heroImage

Web

Elementos do código de barras do cartão
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type e object.barcode.value
    ou object.accountId
  4. object.barcode.alternateText
    ou object.accountId
    ou object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

A seção de código de barras do cartão é usada para exibir texto ou imagens extras acima e abaixo do código de barras. Nenhum dos campos desta seção é obrigatório.

Três seletores de campos podem ser usados para definir dois campos lado a lado acima e um abaixo do código de barras. Eles são exibidos sem rótulo e podem ser campos de dados estruturados baseados em texto, campos de módulo de texto ou campos de módulo de imagem. Se você usa imagens, elas precisam seguir as diretrizes da marca.

O código de barras é definido por um tipo e um valor. Para ver uma lista de tipos de código de barras compatíveis, consulte a Referência. Além disso, o texto pode ser exibido logo abaixo do código de barras. Esse texto pode facilitar a leitura de códigos de barras, entre outros usos.

Na amostra de código a seguir, mostramos como modificar a seção de código de barras de um cartão para exibir uma imagem acima do código de barras:

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

O código cria um cartão com o seguinte formato de seção de código de barras:

Exemplo de uma substituição de código de barras do cartão.

Se você não modificar a seção do código de barras, serão usados os campos padrão. Para mais informações, consulte Modelo padrão.

Modelo de detalhes

Android

Seções do modelo de detalhes
  • 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

Seções do modelo de detalhes
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item

A seção de modelo de detalhes é uma lista de itens class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. Os itens podem conter qualquer tipo de campo de dados estruturados, campos de módulo de texto, campos de módulo de link, campos de módulo de imagem ou mensagens.

Cada item pode ser definido como um seletor de campo único (.firstValue), dois seletores de campo (.firstValue e .secondValue) ou um item predefinido (.predefinedItem). Os valores do campo selecionado e os respectivos rótulos são exibidos. Ao definir dois seletores de campo, os valores dos campos selecionados são exibidos com um separador "/". O mesmo vale para os rótulos dos campos selecionados. Os itens predefinidos são usados para definir uma renderização mais complexa. Os campos do módulo de imagem são renderizados na largura total sem um rótulo.

O exemplo de código a seguir mostra como substituir a seção de detalhes do cartão para mostrar um único campo linksModuleData pelo rótulo:

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
    

O código cria um cartão com o seguinte formato de seção de detalhes:

Exemplo de uma modificação de
                                                                             detalhes.

Se um item estiver vazio, ele não será exibido. Para mais detalhes, consulte Referências de campo.

Se você não modificar o modelo de detalhes, será exibida a lista padrão de campos de referência na ordem padrão. Para mais informações, consulte Modelo padrão.

Modelo de lista

Listar elementos do modelo
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.programLogo
  4. class.hexBackgroundColor

A seção de modelo de lista é usada para selecionar o campo a ser exibido na visualização "Cartões" do app Carteira do Google. O cartão é representado na lista com o logotipo, cor de fundo e três linhas.

Na amostra de código a seguir, mostramos como substituir o modelo de lista de um cartão para mostrar o campo de data de validade de um objeto de cartão único na primeira linha do modelo de lista:

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
    

O código cria um cartão com a seguinte execução de modelo de lista:

Exemplo de uma substituição de
                                                                           lista.

As três linhas podem ser definidas com um seletor de campo. Os campos são exibidos sem marcador.

Rótulos

Todos os campos de dados estruturados têm um rótulo fornecido pelo Google. O Google é responsável por fornecer uma tradução para cada um desses rótulos em todos os idiomas compatíveis.

É possível personalizar alguns desses rótulos usando um dos campos class.custom<name_of_the_field>Label. Ao personalizar um rótulo, você se torna responsável por traduzi-lo para todos os idiomas que quiser oferecer.

Referências de campos

As referências de campo são usadas em diferentes partes do modelo com o formato class.classTemplateInfo.*.fields[]. Uma referência de campo contém uma lista de caminhos para campos de dados estruturados, de módulo de texto, de link ou de módulo de imagem ou mensagens.

Nem todos os tipos de caminho são permitidos em todas as referências de campo. Por exemplo, algumas referências de campo permitem apenas caminhos para campos de dados estruturados baseados em texto ou campos de módulo de texto. Campos estruturados com base em texto são campos de dados estruturados do tipo string, string localizada, data ou dinheiro.

A lista pode ser usada para implementar uma lógica de fallback. Isso significa que, se o primeiro caminho da lista for resolvido em um campo vazio, o próximo caminho será avaliado. A lógica de substituição é direcionada principalmente a campos de dados estruturados baseados em texto ou a campos de módulo de texto. Não combine diferentes tipos de campos na mesma lista. Use a lógica de fallback com cuidado e somente em situações específicas em que é esperado um padrão consistente de campos em alguns objetos, mas não em outros. Na maioria das vezes, é mais fácil criar classes separadas para casos de uso separados.

Se todos os caminhos em uma lista de referência de campo forem resolvidos para campos vazios, o item que usa a referência de campo não será exibido. Se você quiser que o item que usa a referência de campo esteja sempre presente, verifique se pelo menos um caminho não está vazio. Recomendamos que você defina um campo com um caractere especial, como "-", para representar um valor nulo, mesmo que alguns campos permitam strings com apenas um espaço.

Para referenciar um campo contido em uma lista, é possível usar o índice do campo na lista ou, na maioria dos casos, usar um ID de referência. Os itens de uma lista que podem ser referenciados por ID têm um campo .id. Recomendamos que você use um ID de referência sobre o índice do campo na lista, quando disponível.

Veja um exemplo de como referenciar campos contidos em uma lista.

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

Nesse caso, o primeiro item na seção de detalhes do cartão é a segunda imagem declarada no objeto. Já o segundo item na seção de detalhes do cartão é a primeira imagem declarada no objeto.

Modelo padrão

Android

Elementos de modelo padrão
  1. class.programLogo
  2. class.localizedIssuerName
    ou class.issuerName
  3. class.localizedProgramName
    ou class.programName
  4. PONTOS
    ou object.loyaltyPoints.localizedLabel
    ou object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. PRÊMIOS
    ou object.secondaryLoyaltyPoints.localizedLabel
    ou object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type e object.barcode.value
    ou object.accountId
  9. object.barcode.alternateText
    ou object.accountId
    ou object.barcode.value
  10. object.heroImage
    ou class.heroImage
  11. class.hexBackgroundColor
  12. NOME DO MEMBRO
    ou class.localizedAccountNameLabel
    ou class.accountNameLabel
  13. object.accountName
  14. ID DO MEMBRO
    ou class.localizedAccountIdLabel
    ou class.accountIdLabel
  15. object.accountId
  16. NÍVEL DE PRÊMIOS
    ou class.localizedRewardsTierLabel
    ou class.rewardsTierLabel
  17. class.localizedRewardsTier
    ou class.rewardsTier
  18. NÍVEL DE PRÊMIOS SECUNDÁRIO
    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

Elementos de modelo padrão
  1. class.programLogo
  2. class.localizedIssuerName
    ou class.issuerName
  3. class.localizedProgramName
    ou class.programName
  4. PONTOS
    ou object.loyaltyPoints.localizedLabel
    ou object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. PRÊMIOS
    ou object.secondaryLoyaltyPoints.localizedLabel
    ou object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type e object.barcode.value
    ou object.accountId
  9. object.barcode.alternateText
    ou object.accountId
    ou object.barcode.value
  10. object.heroImage
    ou class.heroImage
  11. class.hexBackgroundColor
  12. NOME DO MEMBRO
    ou class.localizedAccountNameLabel
    ou class.accountNameLabel
  13. object.accountName
  14. ID DO MEMBRO
    ou class.localizedAccountIdLabel
    ou class.accountIdLabel
  15. object.accountId
  16. NÍVEL DE PRÊMIOS
    ou class.localizedRewardsTierLabel
    ou class.rewardsTierLabel
  17. class.localizedRewardsTier
    ou class.rewardsTier
  18. NÍVEL DE PRÊMIOS SECUNDÁRIO
    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

Exibimos apenas um campo de módulo de imagem da classe e um e apenas um campo de módulo de imagem do objeto. Se você precisar de mais de um campo de módulo de imagem em qualquer um dos níveis, modifique o modelo padrão.

Exibimos no máximo 10 campos de módulo de texto da classe e 10 campos de módulo de texto do objeto. Os campos são exibidos na mesma ordem em que são definidos na matriz. Se você precisar de mais de 10 campos de módulo de texto em qualquer nível, modifique o modelo padrão.

Para mensagens, mostramos no máximo 10 mensagens da classe e 10 mensagens do objeto. Não garantimos a ordem das mensagens. Se você precisar de mais de 10 mensagens em qualquer um dos níveis ou em uma garantia de qualquer pedido, modifique o modelo padrão.

No campo do módulo de links, não há limite para o número de URIs que podem ser definidos. Os URIs são exibidos em grupos na seguinte ordem para cada nível (classe ou objeto):

  1. Coordenadas de mapa
  2. Números de telefone
  3. Endereços de e-mail
  4. Páginas da Web

Para cada grupo, os URIs são exibidos na mesma ordem em que são definidos na matriz. Se você precisar de uma ordem diferente, modifique o modelo padrão.

Elementos do modelo de lista padrão
  1. class.localizedIssuerName
    ou class.issuerName
  2. class.localizedProgramName
    ou class.programName
  3. class.programLogo
  4. class.hexBackgroundColor