نموذج الولاء

عرض النموذج الخاص ببطاقات الولاء إذا لم يتم تحديد أي نموذج، سيتم استخدام النموذج التلقائي.

تعريف النموذج

يتم تحديد نموذج البطاقة على مستوى الفئة ويتم استخدامه لعرض أي عنصر مرتبط بالفئة. يحدد النموذج الحقول التي سيتم عرضها في الأقسام المختلفة من البطاقة.

يتم تقسيم النموذج إلى الأقسام التالية:

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

يعرض قسم عنوان البطاقة الشعار واسم جهة الإصدار وعنوان البرنامج. ولا يمكن تغيير مراجع الحقول المستخدَمة لتعبئتها أو تغيير موضعها.

عند ضبط حقل الشعار العريض، يتم استبدال عنوان النموذج التلقائي الذي يتضمّن الشعار واسم جهة الإصدار بالشعار العريض على أجهزة 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']"
                            }]
                        }
                    },
                }
            }]
        }
    }
}
    

لغة 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);
    

ينشئ الرمز بطاقة بتنسيق قسم نموذج الرمز التالي:

مثال على إلغاء تصنيف

ولن يتم عرض أحد العناصر إذا كان فارغًا. لمزيد من التفاصيل، يُرجى الاطّلاع على مراجع الحقول. وإذا كانت جميع العناصر في أحد الصفوف فارغة، لن يتم عرض الصف. إذا كانت بعض العناصر غير الفارغة في صف فارغة، وليس كلها، تتم إعادة ترتيب العناصر غير الفارغة وعرضها على شكل صف يحتوي على عدد أقل من العناصر.

إذا لم تلغِ نموذج البطاقة، سيتم استخدام العدد التلقائي للصفوف والعدد التلقائي للعناصر ومراجع الحقول التلقائية. لمزيد من التفاصيل، راجِع النموذج التلقائي.

بعد تحديد صورة رئيسية، يمكن أن تظهر بعد الصف الأول، إذا كان هناك عدة صفوف في قائمة 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"
                        }
                    ]
                }
            }
        }
    }
}
    

لغة 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);
    

ينشئ الرمز بطاقة بتنسيق قسم الرمز الشريطي التالي:

مثال على إلغاء الرمز الشريطي للبطاقة

في حال عدم إلغاء قسم الرمز الشريطي، سيتم استخدام حقول الرموز الشريطية التلقائية. لمزيد من المعلومات، يُرجى الاطّلاع على النموذج التلقائي.

نموذج التفاصيل

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
    

لغة 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
    

ينشئ الرمز بطاقة بتنسيق قسم التفاصيل التالي:

مثال على تجاهل التفاصيل

ولن يتم عرض أحد العناصر إذا كان فارغًا. لمزيد من التفاصيل، يُرجى الاطّلاع على مراجع الحقول.

إذا لم تلغِ نموذج التفاصيل، سيتم عرض القائمة التلقائية للحقول المرجعية بالترتيب التلقائي. لمزيد من المعلومات، راجِع النموذج التلقائي.

نموذج القائمة

قائمة عناصر النموذج
  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"
                    }]
                }
            }
        }
   }
}
    

لغة 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
    

ينشئ الرمز بطاقة باستخدام إصدار نموذج القائمة التالي:

مثال على إلغاء القائمة

يمكن تحديد الصفوف الثلاثة باستخدام أداة اختيار الحقول. يتم عرض الحقول بدون تصنيف.

التصنيفات

تحتوي جميع حقول البيانات المنظَّمة على تصنيف توفّره 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. POINTS
    أو object.loyaltyPoints.localizedLabel
    أو object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. المكافآت
    أو object.secondaryLoyaltyPoints.localizedLabel
    أو object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type وobject.barcode.value
    أو object.accountId
  9. object.barcode.alternateText
    أو object.accountId
    أو object.barcode.value
  10. object.heroImage
    أو class.heroImage
  11. class.hexBackgroundColor
  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.imageModulesData[0].mainImage
  21. object.imageModulesData[0].mainImage
  22. class.messages[].header
  23. class.messages[].body
  24. object.messages[].header
  25. object.messages[].body
  26. class.textModulesData[0..9].header
  27. class.textModulesData[0..9].body
  28. object.textModulesData[0..9].header
  29. object.textModulesData[0..9].body
  30. class.linksModuleData.uris[].description
  31. object.linksModuleData.uris[].description
  32. class.homepageUri

الويب

عناصر النموذج التلقائي
  1. class.programLogo
  2. class.localizedIssuerName
    أو class.issuerName
  3. class.localizedProgramName
    أو class.programName
  4. POINTS
    أو object.loyaltyPoints.localizedLabel
    أو object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. المكافآت
    أو object.secondaryLoyaltyPoints.localizedLabel
    أو object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type وobject.barcode.value
    أو object.accountId
  9. object.barcode.alternateText
    أو object.accountId
    أو object.barcode.value
  10. object.heroImage
    أو class.heroImage
  11. class.hexBackgroundColor
  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.imageModulesData[0].mainImage
  21. object.imageModulesData[0].mainImage
  22. class.messages[].header
  23. class.messages[].body
  24. object.messages[].header
  25. object.messages[].body
  26. class.textModulesData[0..9].header
  27. class.textModulesData[0..9].body
  28. object.textModulesData[0..9].header
  29. object.textModulesData[0..9].body
  30. class.linksModuleData.uris[].description
  31. object.linksModuleData.uris[].description
  32. class.homepageUri

بالنسبة إلى حقول وحدة الصور، نعرض حقلاً واحدًا فقط لوحدة صورة من الفئة وحقل واحد فقط لوحدة صور واحدة من العنصر. إذا كنت بحاجة إلى أكثر من حقل واحد لوحدات الصور في أي من المستويَين، يمكنك إلغاء النموذج التلقائي.

بالنسبة إلى حقول الوحدات النصية، لا نعرض سوى 20 حقل وحدة نصية كحد أقصى من الفئة و20 حقلاً من حقول الوحدة النصية من العنصر. يتم عرض الحقول بالترتيب نفسه الذي تم تحديدها به في المصفوفة. إذا احتجت إلى أكثر من 20 حقل وحدة نصية في أيّ من المستويَين، يمكنك إلغاء النموذج التلقائي.

بالنسبة إلى الرسائل، سنعرض فقط 20 رسالة من الفئة و20 رسالة من العنصر كحدّ أقصى. نحن لا نضمن ترتيب الرسائل. إذا كنت بحاجة إلى أكثر من 20 رسالة في أي من المستويَين، أو إلى ضمان لأيّ طلبات، يمكنك إلغاء النموذج التلقائي.

بالنسبة إلى حقل وحدة الروابط، ليس هناك حد لعدد معرفات الموارد المنتظمة (URI) التي يمكنك تحديدها. ويتم تقسيم قيم URI بالترتيب التالي لكل مستوى (فئة أو كائن):

  1. إحداثيات الخريطة
  2. أرقام الهاتف
  3. عناوين البريد الإلكتروني
  4. صفحات الويب

لكل مجموعة، يتم عرض معرّفات الموارد المنتظمة (URI) بالترتيب نفسه الذي تم تحديدها به في الصفيف. إذا كنت بحاجة إلى ترتيب مختلف، يمكنك إلغاء النموذج التلقائي.

عناصر نموذج القائمة التلقائية
  1. class.localizedIssuerName
    أو class.issuerName
  2. class.localizedProgramName
    أو class.programName
  3. class.programLogo
  4. class.hexBackgroundColor