Szablon lojalnościowy

Karty lojalnościowe obsługują renderowanie szablonów. Jeśli nie zdefiniowano żadnego szablonu, używany jest szablon domyślny.

Definicja szablonu

Szablon karty jest definiowany na poziomie klasy i służy do wyświetlania dowolnego obiektu powiązanego z klasą. Szablon określa, które pola mają być wyświetlane w różnych sekcjach karty.

Szablon jest podzielony na te sekcje:

Android

Omówienie sekcji i pozycji układu szablonu karty

Sieć

Omówienie sekcji i pozycji układu szablonu karty

Tytuł karty

Android

Elementy układu tytułu karty i pozycje pól Tytuł karty domyślnej
  1. class.programLogo
  2. class.localizedIssuerName
    lub class.issuerName
  3. class.localizedProgramName
    lub class.programName
  4. class.hexBackgroundColor

Tytuł karty z szerokim logo
  1. class.wideProgramLogo
  2. class.localizedProgramName
    lub class.programName
  3. class.hexBackgroundColor

Sieć

Elementy układu tytułu karty i pozycje pól Tytuł karty domyślnej
  1. class.programLogo
  2. class.localizedIssuerName
    lub class.issuerName
  3. class.localizedProgramName
    lub class.programName
  4. class.hexBackgroundColor

Tytuł karty z szerokim logo
  1. class.wideProgramLogo
  2. class.localizedProgramName
    lub class.programName
  3. class.hexBackgroundColor

W sekcji tytułu karty wyświetlane są logo, nazwa wydawcy i tytuł programu. Nie można zmienić odwołań do pól używanych do ich wypełniania ani ich pozycji.

Jeśli pole szerokiego logo jest ustawione, na urządzeniach mobilnych domyślny nagłówek szablonu z logo i nazwą wydawcy jest zastępowany szerokim logo.

Podczas tworzenia szerokiego logo nagłówka postępuj zgodnie ze wskazówkami dotyczącymi szerokiego logo, aby obraz był optymalnie wyświetlany na kartach.

Szablon karty

Android

Elementy układu wiersza szablonu karty i pozycje pól

Sieć

Elementy układu wiersza szablonu karty i pozycje pól

Sekcja szablonu karty służy do wyświetlania dodatkowych wierszy. Te wiersze mogą zawierać pola uporządkowanych danych tekstowych lub pola modułu tekstowego.

Możesz określić liczbę wierszy, która definiuje liczbę obiektów na liście class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[]. Lista musi zawierać co najmniej 1 element, ale zalecamy użycie maksymalnie 2 elementów. Każdy element musi być jednego z tych typów:

  • oneItem, który akceptuje 1 element:
    • item
  • twoItems, który przyjmuje 2 elementy:
    • startItem
    • endItem
  • threeItems, który przyjmuje 3 elementy:
    • startItem
    • middleItem
    • endItem

Każdy element można zdefiniować jako pojedynczy selektor pola (.firstValue), 2 selektory pola (.firstValue i .secondValue) lub wstępnie zdefiniowany element (.predefinedItem). Wyświetlane są zarówno wartości wybranego pola, jak i ich etykiety. Jeśli zdefiniujesz 2 selektory pól, wartości wybranych pól będą wyświetlane z separatorem „/”. To samo dotyczy etykiet wybranych pól. Wstępnie zdefiniowane elementy służą do definiowania bardziej złożonego renderowania.

Poniższy przykładowy kod pokazuje, jak zastąpić sekcje wierszy karty w szablonie karty, aby określić 2 wiersze. Każdy wiersz zawiera 3 elementy, z których każdy odwołuje się do 6 pól niestandardowych textModuleData na poziomie klasy i ich nagłówków jako etykiet:

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

Kod tworzy kartę z tym formatem sekcji szablonu kodu:

Przykład zastąpienia etykiety.

Jeśli element jest pusty, nie jest wyświetlany. Więcej informacji znajdziesz w dokumentacji dotyczącej odwołań do pól. Jeśli wszystkie elementy w wierszu są puste, wiersz nie jest wyświetlany. Jeśli niektóre, ale nie wszystkie elementy w wierszu są puste, elementy niepuste są ponownie rozmieszczane i wyświetlane jako wiersz z mniejszą liczbą elementów.

Jeśli nie zastąpisz szablonu karty, używana będzie domyślna liczba wierszy, domyślna liczba elementów i domyślne odwołania do pól. Więcej informacji znajdziesz w sekcji Szablon domyślny.

Po zdefiniowaniu banera powitalnego może on pojawić się po pierwszym wierszu, jeśli na liście cardRowTemplateInfos jest wiele wierszy, lub nad wierszem, jeśli jest tylko jeden.

Kod kreskowy karty

Android

Elementy i pozycje układu kodu kreskowego karty
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type i object.barcode.value
    lub object.accountId
  4. object.barcode.alternateText
    lub object.accountId
    lub object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail
  6. object.heroImage
    lub class.heroImage

Sieć

Elementy i pozycje układu kodu kreskowego karty
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type i object.barcode.value
    lub object.accountId
  4. object.barcode.alternateText
    lub object.accountId
    lub object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

Sekcja kodu kreskowego karty służy do wyświetlania dodatkowego tekstu lub obrazów przed kodem kreskowym i po nim. Żadne z pól w tej sekcji nie jest wymagane.

Dostępne są 3 selektory pól, za pomocą których można zdefiniować 2 pola obok siebie przed kodem kreskowym i 1 pole po nim. Są one wyświetlane bez etykiety i mogą być polami uporządkowanych danych tekstowych, polami modułu tekstowego lub polami modułu graficznego. Jeśli używasz obrazów, powinny być one zgodne ze wskazówkami dotyczącymi marki.

Kod kreskowy jest określany przez typ i wartość. Listę obsługiwanych typów kodów kreskowych znajdziesz w dokumentacji. Dodatkowo pod kodem kreskowym może być wyświetlany tekst. Ten tekst może ułatwić m.in. skanowanie kodów kreskowych.

Poniższy przykładowy kod pokazuje, jak zastąpić sekcję kodu kreskowego na karcie, aby wyświetlić obraz nad kodem kreskowym:

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

Kod tworzy kartę z tym formatem sekcji kodu kreskowego:

Przykład zastąpienia kodu kreskowego karty.

Jeśli nie zastąpisz sekcji kodu kreskowego, używane są domyślne pola kodu kreskowego. Więcej informacji znajdziesz w artykule Szablon domyślny.

Dolna sekcja

Android

Dolne sekcje i elementy szablonu szczegółów
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • …

Sieć

Dolne sekcje i elementy szablonu szczegółów
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • …

Dolna sekcja to lista elementów class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. Elementy mogą zawierać dowolne pola uporządkowanych danych, pola modułu tekstowego, pola modułu linków, pola modułu obrazów lub wiadomości.

Każdy element można zdefiniować jako selektor pojedynczego pola (.firstValue), selektor 2 pól (.firstValue i .secondValue) lub wstępnie zdefiniowany element (.predefinedItem). Wyświetlane są zarówno wartości wybranego pola, jak i ich etykiety. Jeśli zdefiniujesz 2 selektory pól, wartości wybranych pól będą wyświetlane z separatorem „/”. To samo dotyczy etykiet wybranych pól. Wstępnie zdefiniowane elementy służą do definiowania bardziej złożonego renderowania. Pola modułu obrazu są renderowane na pełną szerokość bez etykiety.

Poniższy przykładowy kod pokazuje, jak zastąpić dolną sekcję karty, aby wyświetlić jedno pole linksModuleData z etykietą:

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
    

Kod tworzy kartę z tym formatem dolnej sekcji:

Przykład zastąpienia dolnej sekcji.

Jeśli element jest pusty, nie jest wyświetlany. Więcej informacji znajdziesz w dokumentacji dotyczącej odwołań do pól.

Jeśli nie zastąpisz dolnej sekcji, wyświetli się domyślna lista pól referencyjnych w domyślnej kolejności. Więcej informacji znajdziesz w artykule o szablonie domyślnym.

Szablon listy

Wyświetlanie elementów szablonu listy
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.programLogo
  4. class.hexBackgroundColor

Sekcja szablonu listy służy do wybierania pola, które ma być wyświetlane w widoku „Karty” w aplikacji Portfel Google. Karta jest reprezentowana na liście za pomocą logo, koloru tła i 3 wierszy.

Poniższy przykładowy kod pokazuje, jak zastąpić szablon listy karty, aby w pierwszym wierszu szablonu listy wyświetlić pole daty ważności obiektu pojedynczej karty:

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
    

Kod tworzy kartę z tą wersją szablonu listy:

Przykład zastąpienia listy.

Te 3 wiersze można zdefiniować za pomocą selektora pól. Pola są wyświetlane bez etykiety.

Etykiety

Wszystkie pola danych strukturalnych mają etykietę dostarczoną przez Google. Google odpowiada za zapewnienie tłumaczenia każdej z tych etykiet na wszystkie obsługiwane języki.

Niektóre z tych etykiet możesz dostosować za pomocą jednego z pól class.custom<name_of_the_field>Label. Jeśli dostosujesz etykietę, musisz podać jej tłumaczenia we wszystkich językach, które chcesz obsługiwać.

Odwołania do pól

Odwołania do pól są używane w różnych częściach szablonu w postaci class.classTemplateInfo.*.fields[]. Odwołanie do pola zawiera listę ścieżek do pól uporządkowanych danych, pól modułu tekstowego, pól modułu linków, pól modułu obrazów lub wiadomości.

Nie wszystkie typy ścieżek są dozwolone w każdym odwołaniu do pola. Na przykład niektóre odwołania do pól zezwalają tylko na ścieżki do pól tekstowych uporządkowanych danych lub pól modułów tekstowych. Tekstowe pola uporządkowane to pola danych uporządkowanych typu ciąg znaków, zlokalizowany ciąg znaków, data lub waluta.

Listę można wykorzystać do wdrożenia logiki kreacji zastępczej. Oznacza to, że jeśli pierwsza ścieżka na liście prowadzi do pustego pola, oceniana jest następna ścieżka. Logika kreacji zastępczej jest przeznaczona głównie do pól uporządkowanych danych tekstowych lub pól modułów tekstowych. Nie mieszaj różnych typów pól na tej samej liście. Logiki zastępczej używaj ostrożnie i tylko w określonych sytuacjach, gdy spodziewasz się spójnego wzorca pól, które występują w niektórych obiektach, ale nie we wszystkich. W większości przypadków łatwiej jest utworzyć osobne klasy dla różnych przypadków użycia.

Jeśli wszystkie ścieżki na liście odwołań do pól prowadzą do pustych pól, element, który używa odwołania do pola, nie jest wyświetlany. Jeśli chcesz, aby element, który używa odwołania do pola, był zawsze obecny, upewnij się, że co najmniej jedna ścieżka nie jest pusta. Zalecamy ustawienie pola na znak specjalny, np. „-”, aby reprezentować wartość null, nawet jeśli niektóre pola zezwalają na ciągi znaków zawierające tylko spację.

Aby odwołać się do pola zawartego na liście, możesz użyć indeksu pola na liście lub, w większości przypadków, identyfikatora referencyjnego. Elementy listy, do których można się odwoływać za pomocą identyfikatora, mają pole .id. Zalecamy używanie identyfikatora referencyjnego zamiast indeksu pola na liście, jeśli jest dostępny.

Oto przykład odwoływania się do pól zawartych na liście.

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

W tym przypadku pierwszym elementem w sekcji szczegółów karty jest drugi obraz zadeklarowany w obiekcie. Drugim elementem w sekcji szczegółów karty jest pierwszy obraz zadeklarowany w obiekcie.

Domyślny szablon

Android

Domyślne elementy i pozycje układu szablonu karty
  1. class.programLogo
  2. class.localizedIssuerName
    lub class.issuerName
  3. class.localizedProgramName
    lub class.programName
  4. object.barcode.type i object.barcode.value
    lub object.accountId
  5. object.barcode.alternateText
    lub object.accountId
    lub object.barcode.value
  6. PUNKTY
    lub object.loyaltyPoints.localizedLabel
    lub object.loyaltyPoints.label
  7. object.loyaltyPoints.balance
  8. REWARDS
    lub object.secondaryLoyaltyPoints.localizedLabel
    lub object.secondaryLoyaltyPoints.label
  9. object.secondaryLoyaltyPoints.balance
  10. class.hexBackgroundColor
  11. object.heroImage
    lub class.heroImage
  12. NAZWA CZŁONKA
    lub class.localizedAccountNameLabel
    lub class.accountNameLabel
  13. object.accountName
  14. IDENTYFIKATOR UCZESTNIKA
    lub class.localizedAccountIdLabel
    lub class.accountIdLabel
  15. object.accountId
  16. POZIOM NAGRÓD
    lub class.localizedRewardsTierLabel
    lub class.rewardsTierLabel
  17. class.localizedRewardsTier
    lub class.rewardsTier
  18. SECONDARY REWARDS TIER
    lub class.localizedSecondaryRewardsTierLabel
    lub class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    lub class.secondaryRewardsTier
  20. class.messages[].header
  21. class.messages[].body
  22. object.messages[].header
  23. object.messages[].body
  24. class.textModulesData[0..9].header
  25. class.textModulesData[0..9].body
  26. object.textModulesData[0..9].header
  27. object.textModulesData[0..9].body
  28. class.linksModuleData.uris[].description
  29. object.linksModuleData.uris[].description
  30. class.homepageUri

Sieć

Domyślne elementy i pozycje układu szablonu karty
  1. class.programLogo
  2. class.localizedIssuerName
    lub class.issuerName
  3. class.localizedProgramName
    lub class.programName
  4. object.barcode.type i object.barcode.value
    lub object.accountId
  5. object.barcode.alternateText
    lub object.accountId
    lub object.barcode.value
  6. PUNKTY
    lub object.loyaltyPoints.localizedLabel
    lub object.loyaltyPoints.label
  7. object.loyaltyPoints.balance
  8. REWARDS
    lub object.secondaryLoyaltyPoints.localizedLabel
    lub object.secondaryLoyaltyPoints.label
  9. object.secondaryLoyaltyPoints.balance
  10. class.hexBackgroundColor
  11. object.heroImage
    lub class.heroImage
  12. NAZWA CZŁONKA
    lub class.localizedAccountNameLabel
    lub class.accountNameLabel
  13. object.accountName
  14. IDENTYFIKATOR UCZESTNIKA
    lub class.localizedAccountIdLabel
    lub class.accountIdLabel
  15. object.accountId
  16. POZIOM NAGRÓD
    lub class.localizedRewardsTierLabel
    lub class.rewardsTierLabel
  17. class.localizedRewardsTier
    lub class.rewardsTier
  18. SECONDARY REWARDS TIER
    lub class.localizedSecondaryRewardsTierLabel
    lub class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    lub class.secondaryRewardsTier
  20. class.messages[].header
  21. class.messages[].body
  22. object.messages[].header
  23. object.messages[].body
  24. class.textModulesData[0..9].header
  25. class.textModulesData[0..9].body
  26. object.textModulesData[0..9].header
  27. object.textModulesData[0..9].body
  28. class.linksModuleData.uris[].description
  29. object.linksModuleData.uris[].description
  30. class.homepageUri

W przypadku pól modułu obrazu wyświetlamy tylko jedno pole modułu obrazu z klasy i tylko jedno pole modułu obrazu z obiektu. Jeśli potrzebujesz więcej niż 1 pola modułu obrazu na dowolnym poziomie, zastąp szablon domyślny.

W przypadku pól modułu tekstowego wyświetlamy maksymalnie 20 pól modułu tekstowego z klasy i 20 pól modułu tekstowego z obiektu. Pola są wyświetlane w tej samej kolejności, w jakiej są zdefiniowane w tablicy. Jeśli potrzebujesz więcej niż 20 pól modułu tekstowego na dowolnym poziomie, zastąp szablon domyślny.

W przypadku wiadomości wyświetlamy maksymalnie 20 wiadomości z klasy i 20 wiadomości z obiektu. Nie gwarantujemy zachowania kolejności wiadomości. Jeśli potrzebujesz więcej niż 20 wiadomości na dowolnym poziomie lub gwarancji dotyczącej zamówień, zastąp szablon domyślny.

W przypadku pola modułu linków nie ma limitu liczby identyfikatorów URI, które można zdefiniować. Identyfikatory URI są wyświetlane w grupach w tej kolejności na każdym poziomie (klasy lub obiektu):

  1. Współrzędne na mapie
  2. numery telefonów;
  3. Adresy e-mail
  4. strony internetowe.

W każdej grupie identyfikatory URI są wyświetlane w takiej samej kolejności, w jakiej są zdefiniowane w tablicy. Jeśli potrzebujesz innej kolejności, zastąp domyślny szablon.