একজন ব্যবহারকারীকে তার গুগল ওয়ালেটে সংরক্ষণের জন্য আপনি যে প্রায় সমস্ত পাস ইস্যু করতে পারেন, সেগুলি দুটি উপাদান দ্বারা সংজ্ঞায়িত হয়: একটি 'Passes Class' এবং একটি 'Passes Object'। যখনই আপনি কোনো ব্যবহারকারীকে একটি পাস ইস্যু করবেন, আপনার একটি 'Passes Class' এবং একটি 'Passes Object' উভয়েরই ইনস্ট্যান্সের প্রয়োজন হবে। এগুলি গুগল ওয়ালেট এপিআই-কে বলে দেয় যে কী ধরনের পাস তৈরি করতে হবে, এবং সেই সাথে পাসে কী কী বিবরণ প্রদর্শন করতে হবে, যেমন একটি গিফট কার্ডের মূল্য বা টিকিটধারীর নাম।
গুগল ওয়ালেট এপিআই কিছু পূর্বনির্ধারিত পাস ক্লাস এবং পাস অবজেক্ট প্রদান করে, যেগুলোর ইনস্ট্যান্স আপনি তৈরি করেন এবং তারপর সেগুলো ব্যবহার করে কোনো ব্যবহারকারীকে পাস ইস্যু করার জন্য ব্যবহার করেন; যেমন GiftCardClass ও GiftCardObject , GenericClass ও GenericObject , এবং অন্যান্য।
প্রতিটি Passes Class এবং Passes Object ইনস্ট্যান্সকে একটি JSON অবজেক্ট হিসাবে সংজ্ঞায়িত করা হয়, যেটিতে কিছু আবশ্যিক এবং ঐচ্ছিক প্রোপার্টি থাকে যা সেই পাস টাইপের জন্য উদ্দিষ্ট নির্দিষ্ট ব্যবহারের ক্ষেত্রের সাথে সঙ্গতিপূর্ণ।
পাস ক্লাস
একটি Passes Class-কে এমন একটি শেয়ার্ড টেমপ্লেট হিসেবে ভাবুন, যা আপনার ব্যবহারকারীদের জন্য এক বা একাধিক পাস তৈরি করতে ব্যবহৃত হয়। একটি Passes Class কিছু সাধারণ প্রোপার্টি নির্ধারণ করে, যা এটিকে রেফারেন্স করে এমন সমস্ত পাসে অন্তর্ভুক্ত থাকবে।
উদাহরণস্বরূপ, EventTicketClass এর নিম্নলিখিত ইনস্ট্যান্সটি একটি আসন্ন ইভেন্টের জন্য ইস্যু করা সমস্ত টিকিটের সাধারণ ফিল্ডগুলিকে (ভেন্যু, ইভেন্টের নাম, ইস্যুকারী, তারিখ/সময়) সংজ্ঞায়িত করে।
{
"id": "ISSUER_ID.EVENT_CLASS_ID",
"issuerName": "[TEST ONLY] Heraldic Event",
"localizedIssuerName": {
"defaultValue": {
"language": "en-US",
"value": "[TEST ONLY] Heraldic Event"
}
},
"eventName": {
"defaultValue": {
"language": "en-US",
"value": "Google Live"
}
},
"venue": {
"name": {
"defaultValue": {
"language": "en-US",
"value": "Shoreline Amphitheater"
}
},
"address": {
"defaultValue": {
"language": "en-US",
"value": "ADDRESS_OF_THE_VENUE"
}
}
},
"dateTime": {
"start": "2023-04-12T11:30"
},
"reviewStatus": "UNDER_REVIEW"
}
Passes ক্লাসের প্রতিটি ইনস্ট্যান্সের জন্য একটি id প্রপার্টি প্রয়োজন, যা আপনাকে নির্দিষ্ট করে দিতে হয়। এই ক্লাস আইডিটি একটি অনন্য শনাক্তকারী হিসেবে কাজ করে, যা আপনি যখনই একটি নতুন Passes অবজেক্ট ইনস্ট্যান্স তৈরি করতে ব্যবহার করবেন, তখন রেফারেন্স হিসেবে ব্যবহার করবেন।
অবজেক্ট পাস করে
যেখানে একটি Passes ক্লাসের ইনস্ট্যান্স এক বা একাধিক পাসে ব্যবহৃত হওয়ার জন্য কিছু সাধারণ বৈশিষ্ট্য নির্দিষ্ট করে, সেখানে একটি Passes অবজেক্ট কোনো নির্দিষ্ট ব্যবহারকারীকে দেওয়া একটি বিশেষ পাসের স্বতন্ত্র বিবরণ নির্দিষ্ট করে।
উদাহরণস্বরূপ, যখন গুগল ওয়ালেট এপিআই (Google Wallet API) ব্যবহার করে একটি ইভেন্ট টিকেট পাস (Event Ticket Pass) তৈরি করা হয়, তখন একটি EventTicketObject ইনস্ট্যান্সে সেই টিকেটের জন্য নির্ধারিত আসনের প্রোপার্টিগুলো অন্তর্ভুক্ত থাকে, কারণ ইস্যু করা প্রতিটি টিকেটের জন্য সেই মানগুলো অনন্য হবে।
{
"id": "ISSUER_ID.OBJECT_ID",
"classId": "ISSUER_ID.EVENT_CLASS_ID",
"state": "ACTIVE",
"seatInfo": {
"seat": {
"defaultValue": {
"language": "en-us",
"value": "9"
}
},
"row": {
"defaultValue": {
"language": "en-us",
"value": "L"
}
},
"section": {
"defaultValue": {
"language": "en-us",
"value": "45"
}
},
"gate": {
"defaultValue": {
"language": "en-us",
"value": "7C"
}
}
},
"barcode": {
"type": "BARCODE_TYPE_UNSPECIFIED",
"value": "BARCODE_VALUE",
"alternateText": ""
}
}
একটি Passes Object-এর প্রতিটি ইনস্ট্যান্সের জন্য একটি id প্রপার্টি প্রয়োজন, যা আপনাকে নির্দিষ্ট করতে হয়। এই Object ID-টি একটি অনন্য শনাক্তকারী হিসেবে কাজ করে, যা আপনি কোনো ব্যবহারকারীকে পাস ইস্যু করার সময় উল্লেখ করবেন।
পাস ক্লাস এবং পাস অবজেক্ট কীভাবে কাজ করে
পাসেস অবজেক্টকে অবশ্যই একটি পাসেস ক্লাসের ইনস্ট্যান্সকে এক্সটেন্ড করতে হবে, হয় এর ক্লাস আইডি রেফারেন্স করে অথবা সম্পূর্ণ পাসেস ক্লাস ডেফিনিশন অন্তর্ভুক্ত করে। একটি পাসেস ক্লাস এবং পাসেস অবজেক্ট ইনস্ট্যান্সের মধ্যে এই সম্পর্কের অর্থ হলো, আপনি পাসেস ক্লাস ইনস্ট্যান্সের মাধ্যমে ইস্যু করা সমস্ত পাসের জন্য সাধারণ প্রোপার্টিগুলো সেট ও আপডেট করতে পারবেন, এবং পাসেস অবজেক্ট ইনস্ট্যান্সে একটি নির্দিষ্ট পাসের জন্য স্বতন্ত্র প্রোপার্টিগুলো সেট ও আপডেট করতে পারবেন।
উদাহরণস্বরূপ, একটি সাধারণ ইভেন্ট টিকেট পাসের নিম্নলিখিত ডায়াগ্রামটি দেখায় যে কীভাবে শেয়ার্ড EventTicketClass এ সংজ্ঞায়িত ফিল্ডগুলি এবং EventTicketObject এ সংজ্ঞায়িত একটি নির্দিষ্ট টিকেটের ফিল্ডগুলি একত্রিত হয়ে চূড়ান্তভাবে ইস্যু করা পাসটি তৈরি করে। লক্ষ্য করুন, কীভাবে Passes Object-এর classId প্রপার্টিতে Passes Class-এর আইডি উল্লেখ করা হয়েছে।
একটি Passes Class ইনস্ট্যান্সে করা পরিবর্তনগুলি এটিকে রেফারেন্স করে এমন সমস্ত Passes Object ইনস্ট্যান্সে অবিলম্বে ছড়িয়ে পড়বে। ব্যবহারকারীরা পরবর্তীবার সিঙ্ক করার সময় তাদের Google Wallet অ্যাপে পাসটিতে আপনার করা যেকোনো পরিবর্তন প্রতিফলিত হতে দেখবেন।
ব্যবহারকারীর গুগল ওয়ালেটে একটি পাস যোগ করা
কোনো ব্যবহারকারীর গুগল ওয়ালেটে একটি পাস যোগ করতে, আপনাকে একটি JSON ওয়েব টোকেন (JWT) তৈরি করতে হয়। এই টোকেনটিতে সেই 'Passes Object' ইনস্ট্যান্সটি সম্পর্কে আপনার (ইস্যুকারীর) করা দাবিগুলো থাকে, যা ব্যবহারকারীর গুগল ওয়ালেটে সংরক্ষিত হবে। এর মধ্যে সবচেয়ে গুরুত্বপূর্ণ হলো, ব্যবহারকারীকে দেওয়া 'Passes Object' ইনস্ট্যান্সটির অবজেক্ট আইডি। এরপর JWT-টি একটি ' Add to Google Wallet' বোতাম বা ' Add to Google Wallet' লিঙ্কের মাধ্যমে ব্যবহারকারীর কাছে পৌঁছে দেওয়া হয়।
কোনো ব্যবহারকারী যখন তাদের গুগল ওয়ালেটে একটি ইস্যু করা পাস যোগ করার জন্য বাটন বা লিঙ্কে ক্লিক করেন, তখন JWT-তে এনকোড করা Passes Object ইনস্ট্যান্সের লিঙ্কটি সেই ব্যবহারকারীর গুগল অ্যাকাউন্টের সাথে যুক্ত হয়ে যায়। এর মানে হলো, যখন ব্যবহারকারী আবার বাটনটিতে ক্লিক করেন, তখন সেই Passes Object-এর জন্য আগে থেকেই একটি লিঙ্ক তৈরি থাকে, ফলে ব্যবহারকারীর ওয়ালেটে এর কোনো ডুপ্লিকেট কপি যুক্ত হয় না।
যদি কোনো ব্যবহারকারী গুগল ওয়ালেট অ্যাপ থেকে কোনো পাস সরিয়ে ফেলেন, তাহলে সংশ্লিষ্ট পাসেস অবজেক্ট ইনস্ট্যান্সটি স্বয়ংক্রিয়ভাবে ব্যবহারকারীর থেকে ডি-লিঙ্ক হয়ে যায়, কিন্তু এটি মুছে ফেলা হয় না। এর মানে হলো, নতুন কোনো পাসেস অবজেক্ট ইনস্ট্যান্স বা JWT তৈরি করার প্রয়োজন ছাড়াই, ব্যবহারকারী পাসটি সংরক্ষণ করার জন্য আবার 'অ্যাড টু গুগল ওয়ালেট' বোতাম বা লিঙ্কে ক্লিক করতে পারেন।