Google Wallet পাস কাস্টমাইজ করা

ইভেন্টের টিকিট ও বোর্ডিং পাস থেকে শুরু করে লয়ালটি ও গিফ্ট কার্ড পর্যন্ত যেকোনও পাসের চেহারা ও লেআউট কাস্টমাইজ করার জন্য Google Wallet শক্তিশালী টুল অফার করে। এই নির্দেশিকা থেকে আপনি কার্ডের স্ট্রাকচার নির্ধারণ করে এবং ডায়নামিক, ব্যবহারকারী-নির্দিষ্ট তথ্য দেখিয়ে কীভাবে ব্যবহারকারীর অভিজ্ঞতা কাস্টমাইজ করতে পারবেন সেই সম্পর্কে বিস্তারিত ওভারভিউ পাবেন।

শুরু করার আগে, উপলভ্য ফিল্ডের সম্পূর্ণ তালিকা দেখতে আপনার পাসের ধরনের জন্য নির্দিষ্ট REST API রেফারেন্স ডকুমেন্টেশন দেখে নিতে ভুলবেন না।

ফাউন্ডেশন: cardTemplateOverride

পাসের লেআউট কাস্টমাইজ করার প্রাথমিক টুল হল classTemplateInfo.cardTemplateOverride অবজেক্ট, যা আপনি পাসের Class রিসোর্সে (যেমন, EventTicketClass, LoyaltyClass) সংজ্ঞায়িত করেন। এই অবজেক্টটি আপনাকে সারি এবং সেগুলির মধ্যে আইটেমগুলি সংজ্ঞায়িত করে পাসটি গঠন করতে দেয়, যা আপনাকে তথ্য কীভাবে উপস্থাপন করা হয় তার উপর নিয়ন্ত্রণ দেয়।

আপনি Class রিসোর্স (সব ব্যবহারকারীর সাথে শেয়ার করা তথ্যের জন্য) এবং Object রিসোর্স (ব্যবহারকারী-নির্দিষ্ট বিবরণের জন্য) থেকে ডেটা রেফারেন্স করতে পারেন।

১. আগে থেকে নির্ধারিত Wallet ফিল্ডের মাধ্যমে কাস্টমাইজ করা

আগে থেকে নির্ধারিত ফিল্ড হল Google Wallet API-তে নির্দিষ্ট ধরনের পাসের জন্য উপলভ্য স্ট্যান্ডার্ড প্রপার্টি। এইসব ফিল্ডের নির্দিষ্ট নাম আছে এবং Wallet-এর মাধ্যমে এগুলি একই পদ্ধতিতে দেখানো হয়। উদাহরণ হিসেবে বারকোড, ইভেন্টের নাম, ফ্লাইট নম্বর বা গিফ্ট কার্ডের ব্যালেন্সের কথা বলা যেতে পারে।

এইসব আগে থেকে নির্ধারিত ফিল্ডের fieldPath রেফারেন্স হিসেবে ব্যবহার করে, আপনি নিজের পাসের যেকোনও জায়গায় সেগুলি সাজাতে পারবেন।

উদাহরণ: বারকোড এবং পাস-নির্দিষ্ট বিবরণ দেখানো

এই পাসের উদাহরণে একটি "শীর্ষ সারি" এবং ২য় সারির মধ্যে ৩টি ডেটা ফিল্ড রয়েছে। প্রথম আইটেমটি Object থেকে ব্যবহারকারীর নির্দিষ্ট মান দেখায় যেমন ব্যবহারকারীর জন্য নির্দিষ্ট পয়েন্ট বা সিট নম্বর। দ্বিতীয় আইটেমটি Class থেকে বিবরণ দেখায়, যেমন ইভেন্টের নাম বা লয়ালটি প্রোগ্রাম টিয়ার এবং তৃতীয় আইটেমটি আবার Object থেকে ব্যবহারকারীর নির্দিষ্ট ভ্যালু দেখায়, যেমন সেকেন্ডারি পয়েন্ট বা বিভাগ / কোচের নম্বর।

পূর্বনির্ধারিত ফিল্ড

ক্লাসের সংজ্ঞা:

...
"classTemplateInfo": {
      "cardTemplateOverride": {
        "cardRowTemplateInfos": [
          {
            "twoItems": {
              "startItem": {
                "firstValue": {
                  "fields": [
                    {
                    "fieldPath": "object.accountName",
                    }
                  ]
                }
              },
              "endItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "object.secondaryLoyaltyPoints.label"
                    },
                    {
                      "fieldPath": "object.secondaryLoyaltyPoints.balance"
                    }
                  ]
                }
              }
            }
          },
          {
            "twoItems": {
              "startItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "object.loyaltyPoints.label"
                    },
                    {
                      "fieldPath": "object.loyaltyPoints.balance"
                    }
                  ]
                }
              },
              "endItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "class.rewardsTierLabel"
                    },
                    {
                      "fieldPath": "class.rewardsTier"
                    }
                  ]
                }
              }
            }
          },
        ]
      }
    }
...
"rewardsTier": "Gold",
"rewardsTierLabel": "Tier",
...

অবজেক্টের সংজ্ঞা

...
"accountName": "Camille Walsh",
"loyaltyPoints": {
    "balance": {
        "string": "1500"
    },
    "label": "Points"
},
"secondaryLoyaltyPoints" : {
    "balance": {
        "money": {
            "micros" : "35050000",
            "currencyCode": "USD",
        }
    },
    "label": "Balance"
}
...

তারিখ ও সময়ের ফিল্ড ফর্ম্যাট করা

কাজ করে এমন পাসের যেকোনও তারিখ বা সময় ফিল্ডের জন্য, আপনি dateFormat প্রপার্টি ব্যবহার করে কাস্টম ফর্ম্যাট নির্দিষ্ট করতে পারবেন। এর মাধ্যমে আপনি পাসে তারিখ কীভাবে দেখানো হবে তা নিয়ন্ত্রণ করতে পারবেন, যেমন শুধু সময়, সম্পূর্ণ তারিখ ও সময় অথবা শুধু তারিখ। dateFormat উল্লেখ করা না থাকলে, ডিফল্ট ফর্ম্যাট ব্যবহার করা হবে।

"fields": [
  {
    "fieldPath": "object.validTimeInterval.start.date",
    "dateFormat": "DATE_ONLY"
  }
]

উপলভ্য ফর্ম্যাটের সম্পূর্ণ তালিকা দেখতে, DateFormat ডকুমেন্টেশন দেখুন।

২. ডেভেলপার-নির্ধারিত ফিল্ডের মাধ্যমে কাস্টমাইজ করা

সর্বোচ্চ নমনীয়তার জন্য, Google Wallet আপনাকে textModulesData ব্যবহার করে নিজস্ব কাস্টম ডেটা ফিল্ড তৈরি করতে দেয়। এটি অনন্য তথ্য দেখানোর জন্য উপযুক্ত যা আগে থেকে নির্ধারিত ফিল্ডে ফিট করে না, যেমন কাস্টম শর্ট নোট, মেম্বারশিপের সুবিধা বা লোকেশন-নির্দিষ্ট বিবরণ।

আপনি Object বা Class-এ অনন্য id সহ একটি textModulesData আইটেম সংজ্ঞায়িত করেন এবং তারপরে cardTemplateOverride-এ সেই id-এর রেফারেন্স দেন।

স্ট্রাকচার কার্ডের সারি

আপনি পাস প্রতি এক, দুই বা তিনটি ডেটা আইটেম সহ একটি পাস ডিজাইন করতে পারেন, যা আপনাকে যৌক্তিকভাবে তথ্য সাজাতে দেয়। আপনি কতগুলি সারি যোগ করতে পারবেন তার কোনও নির্দিষ্ট সীমা নেই, তবে ব্যবহারকারীকে পরিচ্ছন্ন অভিজ্ঞতা প্রদান করতে, কার্ডের সামনের দিকে দেখানোর জন্য সবচেয়ে গুরুত্বপূর্ণ কী তা বিবেচনা করুন।

  • পরামর্শ: অতিরিক্ত তথ্যের জন্য, পাসের নিচের অংশ বা messages, linksModuleData বা linkedOfferIds-এর মতো অন্যান্য Wallet ফিচার ব্যবহার করুন। এর ফলে, পাসের মূল ভিউতে কোনও বিশৃঙ্খলা থাকে না।

উদাহরণ: কাস্টম ডেটা সহ তিনটি আইটেমের সারি

কাস্টম বিবরণ দেখানোর জন্য একটি সারি তৈরি করুন। লয়ালটি কার্ডের ক্ষেত্রে, এটি পয়েন্ট, টিয়ার এবং ব্যালেন্স হতে পারে। "বিভাগ," "সারি" এবং "সিট" ইভেন্টের টিকিটের জন্য হতে পারে।

কাস্টম ও পূর্বনির্ধারিত ফিল্ড

ক্লাসের সংজ্ঞা: cardTemplateOverride তিনটি অনন্য আইডিকে রেফার করে: detail1, detail2 এবং detail3।

...
"classTemplateInfo": {
      "cardTemplateOverride": {
        "cardRowTemplateInfos": [
        {
            "twoItems": {
              "startItem": {
                "firstValue": {
                  "fields": [
                    {
                    "fieldPath": "object.accountName",
                    }
                  ]
                }
              },
              "endItem": {
                "firstValue": {
                  "fields": [
                    {
                     "fieldPath": "object.textModulesData['mem_since']",
                    }
                  ]
                }
              }
            }
          },
          {
            "twoItems": {
              "startItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "object.loyaltyPoints.label"
                    },
                    {
                      "fieldPath": "object.loyaltyPoints.balance"
                    }
                  ]
                }
              },
              "endItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "class.rewardsTierLabel"
                    },
                    {
                      "fieldPath": "class.rewardsTier"
                    }
                  ]
                }
              }
            }
          },
          {
            "twoItems": {
              "startItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "object.secondaryLoyaltyPoints.label"
                    },
                    {
                      "fieldPath": "object.secondaryLoyaltyPoints.balance"
                    }
                  ]
                }
              },
              "endItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "object.textModulesData['visits']",
                    }
                  ]
                }
              }
            }
          },
        ]
      }
    }
...
"rewardsTier": "Gold",
"rewardsTierLabel": "Tier",

অবজেক্টের সংজ্ঞা: Object প্রতিটি ফিল্ডের জন্য ডেটা এবং সংশ্লিষ্ট আইডি প্রদান করে।

...
"accountName": "Camille Walsh",
"loyaltyPoints": {
    "balance": {
        "string": "1500"
    },
    "label": "Points"
},
"secondaryLoyaltyPoints" : {
    "balance": {
        "money": {
            "micros" : "28250000",
            "currencyCode": "USD",
        }
    },
    "label": "Balance"
},
"textModulesData": [
{
    "header": "Visits",
    "body": "17",
    "id": "visits"
  },
  {
    "header": "Member since",
    "body": "Mar 01, 2024",
    "id": "mem_since"
  },
]
...

ভেরিয়েশনের জন্য ক্লাস বনাম অবজেক্ট ডেটা

ডাইনামিক, পছন্দমতো পাস তৈরি করতে আপনি ক্লাস-লেভেল ও অবজেক্ট-লেভেল ডেটা একত্রিত করতে পারবেন। একই পাসের বিভিন্ন ভার্সন তৈরি করার জন্য এটি উপযোগী।

  • ক্লাস-লেভেল textModulesData: ব্যবহারকারীদের কোনও গ্রুপের জন্য একই ধরনের বিবরণ থাকলে এটি ব্যবহার করুন (যেমন, সব ভিআইপি টিকিট হোল্ডারদের জন্য "ভিআইপি-তে স্বাগতম" মেসেজ)।
  • অবজেক্ট-লেভেল textModulesData: কোনও একজন ব্যবহারকারীর জন্য নির্দিষ্ট বিবরণের ক্ষেত্রে এটি ব্যবহার করুন (যেমন, "জয়, আপনার সিট থেকে ভিউ সীমিত")।

উদাহরণ: টিয়ার-নির্দিষ্ট পাস দেখানো

আপনি বিভিন্ন পাস ভেরিয়েশনের জন্য আলাদা আলাদা Class রিসোর্স তৈরি করতে পারেন, যেমন কোনও ইভেন্টের জন্য "সাধারণ প্রবেশ" বনাম "ভিআইপি" অথবা কোনও ফ্লাইটের জন্য "ইকোনমি" বনাম "বিজনেস"। প্রতিটি ক্লাসের অনন্য ডিজাইন (অনেক বড় ছবি, রঙ) এবং ডিফল্ট টেক্সট থাকতে পারে।

সিলভার টিয়ারের মেম্বার মেম্বারকে গোল্ড লেভেলে আপগ্রেড করা হয়েছে ডায়মন্ড টিয়ারের মেম্বার
সিলভার থেকে শুরু করা মেম্বার মেম্বারকে গোল্ড লেভেলে আপগ্রেড করা হয়েছে ডায়মন্ড টিয়ারে অন্য মেম্বার

পাসের নিচের বিভাগে থাকা কন্টেন্ট

cardTemplateOverride-এ রেফারেন্স করা হলে linksModuleData, imageModulesData-এর ফিল্ড রেন্ডার করা হয় না। এই কন্টেন্ট অটোমেটিক পাসের নিচের অংশে দেখানো হয়, যাতে ব্যবহারকারীরা গ্রাহক পরিষেবা লিঙ্ক, প্রোমোশনাল ছবি, নিয়ম ও শর্তাবলী এবং অন্যান্য সহায়ক তথ্য আরও সহজে অ্যাক্সেস করতে পারেন।

৩. কার্ড ফেসের বাইরে: অন্যান্য টেমপ্লেট ওভাররাইড

classTemplateInfo অবজেক্ট শুধু cardTemplateOverride-এর চেয়ে বেশি অফার করে। আপনার পাসের আরও সমৃদ্ধ এবং আরও স্বজ্ঞাত উপস্থাপনা প্রদান করতে আপনি Google Wallet অভিজ্ঞতার অন্যান্য অংশ কাস্টমাইজ করতে পারেন।

উপলভ্য সব ওভাররাইড সম্পর্কে সম্পূর্ণ বিবরণ পেতে, ClassTemplateInfo রেফারেন্স ডকুমেন্টেশন দেখুন।

  • listTemplateOverride: Google Wallet অ্যাপের মূল তালিকা ভিউতে সারি লেআউট কাস্টমাইজ করে, যা আপনাকে ব্যবহারকারী তার পাস খোলার আগেই সবচেয়ে গুরুত্বপূর্ণ ফিল্ড হাইলাইট করার সুবিধা দেয়।
  • detailsTemplateOverride: পাসের নিচের অংশের সারি ও লেআউট স্ট্রাকচার করে, যা আপনাকে অতিরিক্ত তথ্য, লিঙ্ক ও টেক্সটের জন্য একটি ফ্লেক্সিবল স্পেস দেয়।
  • cardBarcodeSectionDetails: পাসের বারকোড বিভাগ কাস্টমাইজ করতে দেয়।