الگوی کارت پرواز

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

تعریف الگو

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

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

Android

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

وب

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

عنوان کارت

Android

عناصر چیدمان عنوان کارت و موقعیت‌های فیلد عنوان کارت پیش‌فرض
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    یا class.localizedIssuerName
    یا class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    یا class.flightHeader.carrier.carrierIcaoCode)
    و class.flightHeader.flightNumber
  4. شهر فرودگاه (برگرفته از class.origin.airportIataCode)
    یا class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. شهر فرودگاه (برگرفته از class.destination.airportIataCode)
    یا class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. object.hexBackgroundColor
    یا class.hexBackgroundColor

عنوان کارت نشان‌واره عریض
  1. class.flightHeader.wideAirlineLogo
  2. (class.flightHeader.carrier.carrierIataCode
    یا class.flightHeader.carrier.carrierIcaoCode)
    و class.flightHeader.flightNumber
  3. شهر فرودگاه (برگرفته از class.origin.airportIataCode)
    یا class.origin.airportNameOverride
  4. class.origin.airportIataCode
  5. شهر فرودگاه (برگرفته از class.destination.airportIataCode)
    یا class.destination.airportNameOverride
  6. class.destination.airportIataCode
  7. object.hexBackgroundColor
    یا class.hexBackgroundColor

وب

عناصر چیدمان عنوان کارت و موقعیت‌های فیلد عنوان کارت پیش‌فرض
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    یا class.localizedIssuerName
    یا class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    یا class.flightHeader.carrier.carrierIcaoCode)
    و class.flightHeader.flightNumber
  4. شهر فرودگاه (برگرفته از class.origin.airportIataCode)
    یا class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. شهر فرودگاه (برگرفته از class.destination.airportIataCode)
    یا class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. object.hexBackgroundColor
    یا class.hexBackgroundColor

عنوان کارت نشان‌واره عریض
  1. class.flightHeader.wideAirlineLogo
  2. (class.flightHeader.carrier.carrierIataCode
    یا class.flightHeader.carrier.carrierIcaoCode)
    و class.flightHeader.flightNumber
  3. شهر فرودگاه (برگرفته از class.origin.airportIataCode)
    یا class.origin.airportNameOverride
  4. class.origin.airportIataCode
  5. شهر فرودگاه (برگرفته از class.destination.airportIataCode)
    یا class.destination.airportNameOverride
  6. class.destination.airportIataCode
  7. object.hexBackgroundColor
    یا class.hexBackgroundColor

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

اگر class.origin.airportNameOverride یا class.destination.airportNameOverride تنظیم نشده باشد، نام شهر فرودگاه به‌طور خودکار با شهر مرتبط با کد IATA در class.origin.airportIataCode و class.destination.airportIataCode به‌ترتیب پر می‌شود.

وقتی فیلد نشان‌واره عریض تنظیم شود، در دستگاه‌های 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.reservationInfo.confirmationCode
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

وب

عناصر و موقعیت‌های چیدمان رمزینه کارت
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. ‫object.barcode.type و object.barcode.value
    یا object.reservationInfo.confirmationCode
  4. object.barcode.alternateText
  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.localScheduledDepartureDateTime
      (فقط تاریخ) (گروه‌بندی‌شده)
    یا class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.flightHeader.carrier.airlineLogo
  4. object.hexBackgroundColor
    یا class.hexBackgroundColor
  5. <# passes> (grouped)

از بخش الگوی فهرست برای انتخاب فیلدی که در نمای «مجوزها» در برنامه «کیف پول 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
    

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

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

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

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

ارجاع‌های فیلد در بخش‌های مختلف الگو با فرم 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.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    یا class.localizedIssuerName
    یا class.issuerName
  3. class.origin.airportIataCode
  4. class.destination.airportIataCode
  5. شهر فرودگاه (برگرفته از class.origin.airportIataCode)
    یا class.origin.airportNameOverride
  6. شهر فرودگاه (برگرفته از class.destination.airportIataCode)
    یا class.destination.airportNameOverride
  7. (class.flightHeader.carrier.carrierIataCode
    یا class.flightHeader.carrier.carrierIcaoCode)
    و class.flightHeader.flightNumber
  8. object.securityProgramLogo
  9. object.boardingAndSeatingInfo.boardingPrivilegeImage
  10. ‫object.barcode.type و object.barcode.value
    یا object.reservationInfo.confirmationCode
  11. object.barcode.alternateText
  12. class.flightHeader.carrier.airlineAllianceLogo
  13. مسافر
  14. object.passengerName
  15. ZONE (پیش‌فرض) یا GROUP (بسته به
    class.boardingAndSeatingPolicy.boardingPolicy) و
  16. SEAT
  17. object.boardingAndSeatingInfo.boardingGroup و
  18. object.boardingAndSeatingInfo.seatNumber
    یا object.boardingAndSeatingInfo.seatAssignment
  19. پایانه
  20. GATE
  21. class.origin.terminal
  22. class.origin.gate
  23. سوار شدن
  24. class.localBoardingDateTime
  25. CABIN (پیش‌فرض) یا CLASS یا TIER (بستگی دارد به
    class.boardingAndSeatingPolicy.SeatClassPolicy)
  26. object.boardingAndSeatingInfo.SeatClass
  27. خروج
  28. class.localScheduledDepartureDateTime
  29. object.hexBackgroundColor
    یا class.hexBackgroundColor
  30. object.heroImage
    یا class.heroImage
  31. شماره تأییدیه
  32. object.reservationInfo.confirmationCode
  33. شماره مسافر پرسفر
  34. ‫object.reservationInfo.frequentFlyerInfo.frequentFlyerNumber
    و object.reservationInfo.frequentFlyerInfo.frequentFlyerProgramName
  35. زمان ورود زمان‌بندی‌شده
  36. class.localScheduledArrivalDateTime
  37. class.messages[].header
  38. class.messages[].body
  39. object.messages[].header
  40. object.messages[].body
  41. class.textModulesData[0..9].header
  42. class.textModulesData[0..9].body
  43. object.textModulesData[0..9].header
  44. object.textModulesData[0..9].body
  45. class.linksModuleData.uris[].description
  46. object.linksModuleData.uris[].description

وب

عناصر و موقعیت‌های طرح‌بندی الگوی کارت پیش‌فرض
  1. class.flightHeader.carrier.airlineLogo
  2. class.flightHeader.carrier.airlineName
    یا class.localizedIssuerName
    یا class.issuerName
  3. class.origin.airportIataCode
  4. class.destination.airportIataCode
  5. شهر فرودگاه (برگرفته از class.origin.airportIataCode)
    یا class.origin.airportNameOverride
  6. شهر فرودگاه (برگرفته از class.destination.airportIataCode)
    یا class.destination.airportNameOverride
  7. (class.flightHeader.carrier.carrierIataCode
    یا class.flightHeader.carrier.carrierIcaoCode)
    و class.flightHeader.flightNumber
  8. object.securityProgramLogo
  9. object.boardingAndSeatingInfo.boardingPrivilegeImage
  10. ‫object.barcode.type و object.barcode.value
    یا object.reservationInfo.confirmationCode
  11. object.barcode.alternateText
  12. class.flightHeader.carrier.airlineAllianceLogo
  13. مسافر
  14. object.passengerName
  15. ZONE (پیش‌فرض) یا GROUP (بسته به
    class.boardingAndSeatingPolicy.boardingPolicy) و
  16. SEAT
  17. object.boardingAndSeatingInfo.boardingGroup و
  18. object.boardingAndSeatingInfo.seatNumber
    یا object.boardingAndSeatingInfo.seatAssignment
  19. پایانه
  20. GATE
  21. class.origin.terminal
  22. class.origin.gate
  23. سوار شدن
  24. class.localBoardingDateTime
  25. CABIN (پیش‌فرض) یا CLASS یا TIER (بستگی دارد به
    class.boardingAndSeatingPolicy.SeatClassPolicy)
  26. object.boardingAndSeatingInfo.SeatClass
  27. خروج
  28. class.localScheduledDepartureDateTime
  29. object.hexBackgroundColor
    یا class.hexBackgroundColor
  30. object.heroImage
    یا class.heroImage
  31. شماره تأییدیه
  32. object.reservationInfo.confirmationCode
  33. شماره مسافر پرسفر
  34. ‫object.reservationInfo.frequentFlyerInfo.frequentFlyerNumber
    و object.reservationInfo.frequentFlyerInfo.frequentFlyerProgramName
  35. زمان ورود زمان‌بندی‌شده
  36. class.localScheduledArrivalDateTime
  37. class.messages[].header
  38. class.messages[].body
  39. object.messages[].header
  40. object.messages[].body
  41. class.textModulesData[0..9].header
  42. class.textModulesData[0..9].body
  43. object.textModulesData[0..9].header
  44. object.textModulesData[0..9].body
  45. class.linksModuleData.uris[].description
  46. object.linksModuleData.uris[].description

به‌طور پیش‌فرض، بخش پایین همچنین object.boardingAndSeatingInfo.boardingGroup، object.boardingAndSeatingInfo.seatClass، و object.boardingAndSeatingInfo.seatNumber را نشان می‌دهد اگر بخش کارت لغو شده باشد و این فیلدها دیگر در بخش کارت وجود نداشته باشند.

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

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

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

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

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

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

عناصر و موقعیت‌های طرح‌بندی الگوی فهرست پیش‌فرض
  1. ‫class.origin.airportIataCode
    و class.destination.airportIataCode
  2. class.localScheduledDepartureDateTime
    (فقط تاریخ)
  3. class.flightHeader.carrier.airlineLogo
  4. object.hexBackgroundColor
    یا class.hexBackgroundColor
  5. <# passes> (grouped)