الگوی وفاداری

مجوزهای وفاداری از پرداز قالب پشتیبانی می‌کنند. اگر الگویی تعریف نشده باشد، از الگوی پیش‌فرض استفاده می‌شود.

تعریف الگو

الگوی مجوز در سطح کلاس تعریف می‌شود و برای نمایش هر شیء مرتبط با کلاس استفاده می‌شود. الگو تعیین می‌کند کدام فیلدها در بخش‌های مختلف مجوز نمایش داده شود.

الگو به بخش‌های زیر تقسیم شده است:

Android

نمای کلی بخش‌ها و موقعیت‌های طرح‌بندی الگوی مجوز

وب

نمای کلی بخش‌ها و موقعیت‌های طرح‌بندی الگوی مجوز

عنوان کارت

Android

عناصر چیدمان عنوان کارت و موقعیت‌های فیلد عنوان کارت پیش‌فرض
  1. class.programLogo
  2. class.localizedIssuerName
    یا class.issuerName
  3. class.localizedProgramName
    یا class.programName
  4. class.hexBackgroundColor

عنوان کارت نشان‌واره عریض
  1. class.wideProgramLogo
  2. class.localizedProgramName
    یا class.programName
  3. class.hexBackgroundColor

وب

عناصر چیدمان عنوان کارت و موقعیت‌های فیلد عنوان کارت پیش‌فرض
  1. class.programLogo
  2. class.localizedIssuerName
    یا class.issuerName
  3. class.localizedProgramName
    یا class.programName
  4. class.hexBackgroundColor

عنوان کارت نشان‌واره عریض
  1. class.wideProgramLogo
  2. class.localizedProgramName
    یا class.programName
  3. class.hexBackgroundColor

بخش عنوان کارت، نشان‌واره، نام صادرکننده، و عنوان برنامه را نمایش می‌دهد. نه ارجاع‌های فیلد استفاده‌شده برای پر کردن آن‌ها و نه موقعیت آن‌ها قابل‌تغییر است.

وقتی فیلد نشان‌واره عریض تنظیم شود، در دستگاه‌های Android، سرصفحه الگوی پیش‌فرض با نشان‌واره و نام صادرکننده با نشان‌واره عریض جایگزین می‌شود.

هنگام ایجاد نشان‌واره سرصفحه عریض، دستورالعمل‌های تصویر نشان‌واره عریض را دنبال کنید تا تصویرتان به‌طور بهینه در مجوزهایتان نمایش داده شود.

الگوی کارت

Android

عناصر چیدمان ردیف الگوی کارت و موقعیت‌های فیلد

وب

عناصر چیدمان ردیف الگوی کارت و موقعیت‌های فیلد

بخش الگوی کارت برای نمایش ردیف‌های اضافی استفاده می‌شود. این ردیف‌ها می‌توانند حاوی فیلدهای داده ساختاریافته مبتنی بر نوشتار یا فیلدهای واحد نوشتاری باشند.

می‌توانید تعداد ردیف‌هایی را که تعداد اشیاء را در فهرست class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[] تعریف می‌کنند مشخص کنید. این فهرست حداقل به یک عنصر نیاز دارد و توصیه می‌کنیم حداکثر از دو عنصر استفاده کنید. هر عنصر باید یکی از انواع زیر باشد:

  • ‫oneItem، که یک مورد را می‌پذیرد:
    • item
  • ‫twoItems که دو مورد را می‌پذیرد:
    • startItem
    • endItem
  • ‫threeItems که سه مورد را می‌پذیرد:
    • startItem
    • middleItem
    • endItem

هر مورد را می‌توان به‌عنوان انتخابگر فیلد تکی (.firstValue)، دو انتخابگر فیلد (.firstValue و .secondValue)، یا مورد ازپیش تعریف‌شده (.predefinedItem) تعریف کرد. هم مقادیر فیلد انتخاب‌شده و هم برچسب‌های مربوطه آن‌ها نمایش داده می‌شود. وقتی دو انتخابگر فیلد تعریف می‌کنید، مقادیر فیلدهای انتخاب‌شده با جداکننده «/» نمایش داده می‌شود. همین امر برای برچسب‌های فیلدهای انتخاب‌شده نیز صدق می‌کند. از موارد ازپیش تعریف‌شده برای تعریف کردن پردازش پیچیده‌تر استفاده می‌شود.

نمونه کد زیر نشان می‌دهد که چگونه بخش‌های ردیف کارت الگوی کارت را لغو کنید تا دو ردیف را مشخص کنید. هر ردیف شامل سه مورد است که هرکدام به شش فیلد سفارشی textModuleData در سطح کلاس و سرصفحه‌های آن‌ها به‌عنوان برچسب ارجاع می‌دهند:

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']"
                            }]
                        }
                    },
                }
            }]
        }
    }
}
    

جاوا

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

این کد مجوزی با قالب بخش الگوی کد زیر ایجاد می‌کند:

نمونه‌ای از لغو برچسب.

اگر موردی خالی باشد، نمایش داده نمی‌شود. برای جزئیات بیشتر، مرجع‌های فیلد را ببینید. اگر همه موارد در یک ردیف خالی باشد، آن ردیف نمایش داده نمی‌شود. اگر برخی از موارد در یک ردیف خالی باشند اما نه همه آن‌ها، موارد غیرخالی دوباره مرتب می‌شوند و به‌عنوان ردیفی با موارد کمتر نمایش داده می‌شوند.

اگر الگوی کارت را لغو نکنید، از تعداد پیش‌فرض ردیف‌ها، تعداد پیش‌فرض موارد، و ارجاع‌های پیش‌فرض فیلد استفاده می‌شود. برای جزئیات بیشتر، الگوی پیش‌فرض را ببینید.

پس‌از تعریف نگاره اصلی، اگر چند ردیف در فهرست cardRowTemplateInfos وجود داشته باشد، این نگاره می‌تواند پس‌از ردیف اول ظاهر شود، یا اگر فقط یک ردیف وجود داشته باشد، بالای آن ردیف ظاهر می‌شود.

رمزینه کارت

Android

عناصر و موقعیت‌های چیدمان رمزینه کارت
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. ‫object.barcode.type و object.barcode.value
    یا object.accountId
  4. object.barcode.alternateText
    یا object.accountId
    یا object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail
  6. object.heroImage
    یا class.heroImage

وب

عناصر و موقعیت‌های چیدمان رمزینه کارت
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. ‫object.barcode.type و object.barcode.value
    یا object.accountId
  4. object.barcode.alternateText
    یا object.accountId
    یا object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

از بخش رمزینه کارت برای نمایش نوشتار یا تصاویر اضافی قبل و بعداز رمزینه استفاده می‌شود. هیچ‌کدام از فیلدهای این بخش الزامی نیست.

سه انتخابگر فیلد وجود دارد که می‌توان از آن‌ها برای تعریف دو فیلد کنارهم قبل‌از رمزینه و یک فیلد بعداز رمزینه استفاده کرد. این فیلدها بدون برچسب نمایش داده می‌شوند و می‌توانند فیلدهای داده ساختاریافته نوشتارمحور، فیلدهای واحد نوشتار، یا فیلدهای واحد تصویر باشند. اگر از تصویر استفاده می‌کنید، این تصاویر باید از رهنمودهای نمانام پیروی کنند.

رمزینه با نوع و مقدار تعریف می‌شود. برای مشاهده فهرست انواع رمزینه‌های پشتیبانی‌شده، مرجع را ببینید. علاوه‌براین، می‌توان نوشتاری را درست زیر رمزینه نشان داد. این نوشتار می‌تواند اسکن کردن رمزینه‌ها را آسان‌تر کند، ازجمله کاربردهای دیگر.

نمونه کد زیر نحوه لغو بخش رمزینه مجوز را برای نمایش تصویر بالای رمزینه نشان می‌دهد:

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"
                        }
                    ]
                }
            }
        }
    }
}
    

جاوا

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

این کد مجوزی با قالب بخش بارکد زیر ایجاد می‌کند:

نمونه‌ای از لغو بارکد کارت.

اگر بخش رمزینه را لغو نکنید، از فیلدهای رمزینه پیش‌فرض استفاده می‌شود. برای اطلاعات بیشتر، به الگوی پیش‌فرض مراجعه کنید.

بخش پایین

Android

بخش‌ها و موارد پایین الگوی جزئیات
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • …

وب

بخش‌ها و موارد پایین الگوی جزئیات
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • …

بخش پایین فهرستی از موارد است class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. این موارد می‌توانند حاوی هر نوع فیلد داده ساختاریافته، فیلد واحد نوشتاری، فیلد واحد پیوند، فیلد واحد تصویر، یا پیام باشند.

هر مورد را می‌توان به‌عنوان انتخابگر فیلد تکی (.firstValue)، انتخابگر فیلد دوتایی (.firstValue و .secondValue)، یا مورد ازپیش تعریف‌شده (.predefinedItem) تعریف کرد. هم مقادیر فیلد انتخاب‌شده و هم برچسب‌های مربوطه آن‌ها نمایش داده می‌شود. وقتی دو انتخابگر فیلد تعریف می‌کنید، مقادیر فیلدهای انتخاب‌شده با جداکننده «/» نمایش داده می‌شود. همین امر برای برچسب‌های فیلدهای انتخاب‌شده نیز صدق می‌کند. از موارد ازپیش تعریف‌شده برای تعریف کردن پردازش پیچیده‌تر استفاده می‌شود. فیلدهای پیمانه تصویر به‌صورت تمام‌عرض و بدون برچسب پرداز زده می‌شوند.

نمونه کد زیر نشان می‌دهد که چگونه می‌توان بخش پایینی مجوز را لغو کرد تا یک فیلد linksModuleData با برچسب آن نشان داده شود:

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
    

جاوا

 //... 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
    

این کد مجوزی با قالب بخش پایینی زیر ایجاد می‌کند:

نمونه‌ای از لغو بخش پایین.

اگر موردی خالی باشد، نمایش داده نمی‌شود. برای جزئیات بیشتر، مرجع‌های فیلد را ببینید.

اگر بخش پایین را لغو نکنید، فهرست پیش‌فرض فیلدهای مرجع با ترتیب پیش‌فرض نمایش داده می‌شود. برای اطلاعات بیشتر، الگوی پیش‌فرض را ببینید.

الگوی فهرست

فهرست کردن عناصر الگو
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.programLogo
  4. class.hexBackgroundColor

از بخش الگوی فهرست برای انتخاب فیلدی که در نمای «مجوزها» در برنامه «کیف پول Google» نمایش داده می‌شود استفاده می‌شود. مجوز در فهرست با نشان‌واره، رنگ پس‌زمینه، و سه ردیف نشان داده می‌شود.

نمونه کد زیر نحوه لغو کردن الگوی فهرست مجوز را برای نشان دادن فیلد تاریخ انقضای شیء مجوزهای تکی در ردیف اول الگوی فهرست نشان می‌دهد:

Python

#... rest of class definition
   "classTemplateInfo": {
        "listTemplateOverride":{
            "firstRowOption": {
                "fieldOption":{
                    "fields": [{
                        "fieldPath": "object.validTimeInterval.end"
                    }]
                }
            }
        }
   }
}
    

جاوا

//... 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
    

این کد مجوزی با تفسیر الگوی فهرست زیر ایجاد می‌کند:

نمونه‌ای از لغو فهرست.

این سه ردیف را می‌توان با گزینشگر فیلد تعریف کرد. فیلدها بدون برچسب نمایش داده می‌شوند.

برچسب‌ها

همه فیلدهای داده‌های ساختاریافته برچسبی دارند که Google ارائه کرده است. Google مسئول ارائه ترجمه برای هریک از این برچسب‌ها به همه زبان‌های پشتیبانی‌شده است.

می‌توانید برخی‌از این برچسب‌ها را بااستفاده از یکی از فیلدهای class.custom<name_of_the_field>Label سفارشی‌سازی کنید. وقتی برچسبی را سفارشی‌سازی می‌کنید، مسئولیت ارائه ترجمه برای آن برچسب خاص به همه زبان‌هایی که می‌خواهید پشتیبانی کنید برعهده شما خواهد بود.

مرجع‌های فیلد

ارجاع‌های فیلد در بخش‌های مختلف الگو با فرم class.classTemplateInfo.*.fields[] استفاده می‌شوند. مرجع فیلد حاوی فهرستی از مسیرها به فیلدهای داده ساختاریافته، فیلدهای ماژول نوشتار، فیلدهای ماژول پیوند، فیلدهای ماژول تصویر، یا پیام‌ها است.

همه انواع مسیرها در هر مرجع فیلد مجاز نیستند. برای مثال، برخی‌از ارجاع‌های فیلد فقط مسیرهای منتهی به فیلدهای داده ساختاریافته مبتنی بر نوشتار یا فیلدهای واحد نوشتار را مجاز می‌کنند. فیلدهای ساختاریافته مبتنی بر نوشتار فیلدهای داده ساختاریافته از نوع رشته، رشته بومی‌سازی‌شده، تاریخ، یا پول هستند.

از این فهرست می‌توان برای پیاده‌سازی منطق بازگشت استفاده کرد. این یعنی اگر اولین مسیر در فهرست به فیلد خالی منتهی شود، مسیر بعدی ارزیابی می‌شود. منطق بازگشت عمدتاً فیلدهای داده ساختاریافته مبتنی بر نوشتار یا فیلدهای واحد نوشتار را هدف قرار می‌دهد. انواع مختلف فیلدها را در یک فهرست ترکیب نکنید. از منطق بازگشت با احتیاط و فقط در شرایط خاصی استفاده کنید که انتظار الگوی ثابتی از فیلدها را دارید که در برخی اشیا وجود دارند اما در برخی دیگر وجود ندارند. در بیشتر مواقع، ایجاد کلاس‌های جداگانه برای موارد استفاده جداگانه آسان‌تر است.

اگر همه مسیرها در فهرست مرجع فیلد به فیلدهای خالی منتهی شوند، موردی که از مرجع فیلد استفاده می‌کند نمایش داده نمی‌شود. اگر می‌خواهید موردی که از ارجاع فیلد استفاده می‌کند همیشه وجود داشته باشد، مطمئن شوید که حداقل یک مسیر خالی نباشد. توصیه می‌کنیم فیلدی را روی نویسه خاصی مثل «-» تنظیم کنید تا نشان‌دهنده مقدار تهی باشد، حتی اگر برخی فیلدها رشته‌هایی را که فقط فاصله دارند مجاز کنند.

برای ارجاع به فیلدی که در فهرست قرار دارد، می‌توانید از نمایه فیلد در فهرست استفاده کنید یا در بیشتر موارد می‌توانید از شناسه مرجع استفاده کنید. موارد فهرستی که می‌توان با شناسه به آن‌ها ارجاع داد دارای فیلد .id هستند. توصیه می‌کنیم درصورت دردسترس بودن، از شناسه مرجع به‌جای نمایه فیلد در فهرست استفاده کنید.

در اینجا مثالی از نحوه ارجاع به فیلدهای موجود در فهرست آورده شده است.

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

در این مورد، اولین مورد در بخش جزئیات مجوز، دومین تصویر اعلام‌شده در شیء است. درحالی‌که، دومین مورد در بخش جزئیات مجوز، اولین تصویر اعلام‌شده در شیء است.

الگوی پیش‌فرض

Android

عناصر و موقعیت‌های طرح‌بندی الگوی کارت پیش‌فرض
  1. class.programLogo
  2. class.localizedIssuerName
    یا class.issuerName
  3. class.localizedProgramName
    یا class.programName
  4. ‫object.barcode.type و object.barcode.value
    یا object.accountId
  5. object.barcode.alternateText
    یا object.accountId
    یا object.barcode.value
  6. امتیاز
    یا object.loyaltyPoints.localizedLabel
    یا object.loyaltyPoints.label
  7. object.loyaltyPoints.balance
  8. پاداش‌ها
    یا object.secondaryLoyaltyPoints.localizedLabel
    یا object.secondaryLoyaltyPoints.label
  9. object.secondaryLoyaltyPoints.balance
  10. class.hexBackgroundColor
  11. object.heroImage
    یا class.heroImage
  12. MEMBER NAME
    یا class.localizedAccountNameLabel
    یا class.accountNameLabel
  13. object.accountName
  14. شناسه عضو
    یا class.localizedAccountIdLabel
    یا class.accountIdLabel
  15. object.accountId
  16. سطح پاداش
    یا class.localizedRewardsTierLabel
    یا class.rewardsTierLabel
  17. class.localizedRewardsTier
    یا class.rewardsTier
  18. سطح پاداش‌های ثانویه
    یا class.localizedSecondaryRewardsTierLabel
    یا class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    یا 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

وب

عناصر و موقعیت‌های طرح‌بندی الگوی کارت پیش‌فرض
  1. class.programLogo
  2. class.localizedIssuerName
    یا class.issuerName
  3. class.localizedProgramName
    یا class.programName
  4. ‫object.barcode.type و object.barcode.value
    یا object.accountId
  5. object.barcode.alternateText
    یا object.accountId
    یا object.barcode.value
  6. امتیاز
    یا object.loyaltyPoints.localizedLabel
    یا object.loyaltyPoints.label
  7. object.loyaltyPoints.balance
  8. پاداش‌ها
    یا object.secondaryLoyaltyPoints.localizedLabel
    یا object.secondaryLoyaltyPoints.label
  9. object.secondaryLoyaltyPoints.balance
  10. class.hexBackgroundColor
  11. object.heroImage
    یا class.heroImage
  12. MEMBER NAME
    یا class.localizedAccountNameLabel
    یا class.accountNameLabel
  13. object.accountName
  14. شناسه عضو
    یا class.localizedAccountIdLabel
    یا class.accountIdLabel
  15. object.accountId
  16. سطح پاداش
    یا class.localizedRewardsTierLabel
    یا class.rewardsTierLabel
  17. class.localizedRewardsTier
    یا class.rewardsTier
  18. سطح پاداش‌های ثانویه
    یا class.localizedSecondaryRewardsTierLabel
    یا class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    یا 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

برای فیلدهای واحد تصویر، فقط یک فیلد واحد تصویر از کلاس و فقط یک فیلد واحد تصویر از شیء نشان می‌دهیم. اگر در هریک از سطوح به بیش‌از یک فیلد واحد تصویر نیاز دارید، الگوی پیش‌فرض را لغو کنید.

برای فیلدهای واحد نوشتار، حداکثر ۲۰ فیلد واحد نوشتار از کلاس و ۲۰ فیلد واحد نوشتار از شیء را نشان می‌دهیم. فیلدها به همان ترتیبی که در آرایه تعریف شده‌اند نمایش داده می‌شوند. اگر به بیش‌از ۲۰ فیلد پیمانه نوشتاری در هریک از سطوح نیاز دارید، الگوی پیش‌فرض را لغو کنید.

برای پیام‌ها، حداکثر ۲۰ پیام از کلاس و ۲۰ پیام از شیء را نشان می‌دهیم. ترتیب پیام‌ها را تضمین نمی‌کنیم. اگر در هریک از سطوح به بیش از ۲۰ پیام نیاز دارید، یا برای هر سفارشی تضمین می‌خواهید، الگوی پیش‌فرض را لغو کنید.

برای فیلد ماژول پیوندها، محدودیتی برای تعداد شناسه منابع یکسانی که می‌توانید تعریف کنید وجود ندارد. شناسه‌های منبع یکسان به‌ترتیب زیر برای هر سطح (کلاس یا شیء) گروه‌بندی و نمایش داده می‌شوند:

  1. مختصات نقشه
  2. شماره‌های تلفن
  3. نشانی‌های ایمیل
  4. صفحه وب

برای هر گروه، URIها به همان ترتیبی که در آرایه تعریف شده‌اند نمایش داده می‌شوند. اگر به ترتیب دیگری نیاز دارید، الگوی پیش‌فرض را لغو کنید.