Google Wallet পাস ডেভেলপমেন্ট ফ্লো
Google Wallet API, আগে থেকে নির্ধারিত পাসের ধরন প্রদান করে যা নির্দিষ্ট ব্যবহারের ক্ষেত্রে অপ্টিমাইজ করা হয়, যেমন গিফ্ট কার্ড, বোর্ডিং পাস, ইভেন্টের টিকিট এবং আরও অনেক কিছু। এছাড়াও, একটি জেনেরিক পাস টাইপ আছে যা এমন ব্যবহারের ক্ষেত্রে ব্যবহার করা হয় যেখানে নির্দিষ্ট পাস টাইপ উপলভ্য থাকে না।
Google Wallet API ব্যবহার করে পাস তৈরি ও ইস্যু করার জন্য প্রয়োজনীয় প্রাথমিক ধাপগুলির সাথে আপনাকে পরিচিত করার জন্য এই নিবন্ধটি তৈরি করা হয়েছে। নিচে বিস্তারিতভাবে উল্লেখ করা কিছু ধাপ সম্পূর্ণ করার একাধিক উপায় আছে, তবে উচ্চ লেভেলে সব ধরনের পাস একই বেসিক ডেভেলপমেন্ট ফ্লো অনুসরণ করে তৈরি করা হয়।
পাস তৈরি করার বিস্তারিত ওয়াকথ্রু পেতে, ওয়েব, ইমেল ও এসএমএস অথবা Android অ্যাপ সংক্রান্ত নির্দেশিকা দেখুন।
১. পাস ক্লাস তৈরি করুন
এটি কীসের জন্য
পাস ক্লাস, একাধিক পাসের ক্ষেত্রে সাধারণ এমন কিছু প্রপার্টির সেটকে সংজ্ঞায়িত করে, যা টেমপ্লেটের মতো। যেমন, আপনি কোনও ইভেন্টের টিকিট ইস্যু করলে, পাস ক্লাস এমন ফিল্ড নির্ধারণ করবে যা সব টিকিটের ক্ষেত্রে একই হবে, যেমন ইভেন্টের নাম, তারিখ ও সময়।
আপনার ইস্যু করা প্রতিটি পাসের সাথে অবশ্যই একটি Passes Class রেফারেন্স হিসেবে থাকতে হবে। এছাড়াও, আপনার তৈরি করা প্রতিটি পাস ক্লাসের জন্য একটি অনন্য আইডি অ্যাসাইন করতে হবে, যা পাস তৈরি করার সময় এটি রেফারেন্স করতে ব্যবহৃত হয়।
কীভাবে এটি করা হয়
Passes Class, JSON ফর্ম্যাটে সংজ্ঞায়িত করা হয় এবং Google Wallet REST API, Android SDK বা Google Wallet Business Console-এ তৈরি করা যায়।
পাস ক্লাসের উদাহরণ দেখুন
{ "id": "ISSUER_ID.EVENT_CLASS_ID", "issuerName": "[TEST ONLY] Heraldic Event", "localizedIssuerName": { "defaultValue": { "language": "en-US", "value": "[TEST ONLY] Heraldic Event" } }, "logo": { "sourceUri": { "uri": "https://images.unsplash.com/photo-1475721027785-f74eccf877e2?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=660&h=660" }, "contentDescription": { "defaultValue": { "language": "en-US", "value": "LOGO_IMAGE_DESCRIPTION" } } }, "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", "hexBackgroundColor": "#264750", "heroImage": { "sourceUri": { "uri": "https://images.unsplash.com/photo-1501281668745-f7f57925c3b4?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1032&h=336" }, "contentDescription": { "defaultValue": { "language": "en-US", "value": "HERO_IMAGE_DESCRIPTION" } } } }
২. Passes Object তৈরি করুন
এটি কীসের জন্য
Passes Object কোনও নির্দিষ্ট ব্যবহারকারীকে ইস্যু করা অনন্য পাসের বৈশিষ্ট্য নির্ধারণ করে। যেমন, ইভেন্ট টিকিটের জন্য পাস অবজেক্ট এমন ফিল্ড নির্ধারণ করবে যা নির্দিষ্ট টিকিটের জন্য অনন্য, যেমন সিট নম্বর বা সেই টিকিটের জন্য QR কোড।
Passes অবজেক্ট তৈরি করা হলে, Google Wallet API নতুন পাস স্টোর করে এবং আপনার ইস্যুকারী অ্যাকাউন্টের সাথে এটি যুক্ত করে। এই সেভ করা পাস হল Passes অবজেক্টের অনন্য প্রপার্টি এবং সংশ্লিষ্ট Passes ক্লাসের টেমপ্লেট প্রপার্টির একটি কম্বিনেশন।
এছাড়াও, আপনাকে প্রতিটি Passes Object-এর জন্য একটি অনন্য আইডি অ্যাসাইন করতে হবে, যা পাস ইস্যু করার সময় এটি রেফারেন্স করতে ব্যবহৃত হয়।
কীভাবে এটি করা হয়
Passes Object-এর JSON ফর্ম্যাট নির্দিষ্ট করা আছে এবং এটি Google Wallet REST API বা Android SDK-এর মাধ্যমে তৈরি করা যেতে পারে।
উদাহরণ পাস অবজেক্ট দেখুন
{ "id": "ISSUER_ID.OBJECT_ID", "classId": "ISSUER_ID.EVENT_CLASS_ID", "state": "ACTIVE", "seatInfo": { "seat": { "defaultValue": { "language": "en-us", "value": "5" } }, "row": { "defaultValue": { "language": "en-us", "value": "G" } }, "section": { "defaultValue": { "language": "en-us", "value": "40" } }, "gate": { "defaultValue": { "language": "en-us", "value": "3A" } } }, "barcode": { "type": "QR_CODE", "value": "BARCODE_VALUE", "alternateText": "" } }
৩. JSON ওয়েব টোকেনে (JWT) পাস এনকোড করুন
এটি কীসের জন্য
কোনও ব্যবহারকারীকে পাস ইস্যু করতে, JSON ওয়েব টোকেনে (JWT) পাস ক্লাস ও পাস অবজেক্ট এনকোড করতে হবে। JWT ফর্ম্যাট হল দুটি পক্ষের মধ্যে দাবি উপস্থাপনের জন্য একটি সাধারণ এবং ওপেন স্ট্যান্ডার্ড। Google Wallet API-এর মাধ্যমে পাস ইস্যু করার ক্ষেত্রে, JWT ব্যবহার করে দাবি করা হয় যে কোনও ব্যবহারকারীর কাছে আপনার ইস্যুকারী অ্যাকাউন্টের সাথে যুক্ত নির্দিষ্ট পাস অ্যাক্সেস করার অধিকার আছে।
Google Wallet API-তে JWT পাঠানো হলে, এনকোড করা ডেটা নির্দিষ্ট পাস শনাক্ত করতে এবং ব্যবহারকারীকে তা ইস্যু করতে ব্যবহার করা হয়। পাসটি আগেই ইস্যু করা হয়ে থাকলে, এই ডেটা Google Wallet API-কে পাসটি ডুপ্লিকেট কিনা তা শনাক্ত করতে সাহায্য করে, যাতে এটি ব্যবহারকারীর Google Wallet-এ একাধিকবার যোগ না করা হয়।
কীভাবে এটি করা হয়
JWT স্পেসিফিকেশন-এর উপর ভিত্তি করে JSON ফর্ম্যাটে JWT সংজ্ঞায়িত করা হয়। Google Wallet API-এর মাধ্যমে পাস ইস্যু করার জন্য JWT নির্ধারণ করতে, আপনি যে পাস ইস্যু করতে চান তার তথ্য JWT-এর payload প্রপার্টিতে প্রদান করেন।
JWT-এর উদাহরণ দেখুন
{ "iss": "issuer@example.com", "aud": "google", "typ": "savetowallet", "iat": 1696877738, "origins": [ "www.example.com" ], "payload": { "eventTicketObjects": [ { "id": "ISSUER_ID.LOYALTY_OBJECT_SUFFIX" } ] } }
৪. আপনার ক্রেডেনশিয়াল দিয়ে JWT সাইন করুন
এটি কীসের জন্য
পাস ইস্যু করার জন্য Google Wallet API-তে পাঠানো সমস্ত JWT-তে অবশ্যই আপনার আগে থেকে Google Wallet Business Console-এ প্রদান করা ক্রেডেনশিয়াল দিয়ে স্বাক্ষর করা থাকতে হবে। সাইন-ইন করার সময় আপনার ক্রেডেনশিয়াল ব্যবহার করে JWT এনক্রিপ্ট করা হয় যাতে আপনার পাস সুরক্ষিত থাকে এবং Google Wallet API যাতে যাচাই করতে পারে যে পাসের বিবরণ বৈধ এবং আপনার ইস্যুকারী অ্যাকাউন্টের সাথে যুক্ত।
কীভাবে এটি করা হয়
Google Wallet ক্লায়েন্ট লাইব্রেরি এবং Android SDK আপনার JWT-তে স্বাক্ষর করার জন্য সুবিধাজনক পদ্ধতি প্রদান করে। এছাড়াও, অসংখ্য ওপেন-সোর্স লাইব্রেরি উপলভ্য আছে যা আপনার বেছে নেওয়ার জন্য কোড সাইনিংয়ের জটিলতা ম্যানেজ করে।
যারা পাস ইস্যু করার জন্য Google Wallet REST API ব্যবহার করেন, তাদের ক্ষেত্রে JWT-তে Google Cloud পরিষেবা অ্যাকাউন্ট কী দিয়ে সাইন করা হয়। যারা Google Wallet Android SDK ব্যবহার করছেন, তাদের জন্য SDK অটোমেটিক আপনার অ্যাপ সাইনিং সার্টিফিকেটের SHA-1 ফিঙ্গারপ্রিন্ট দিয়ে JWT সাইন করার বিষয়টি ম্যানেজ করে।
আপনার ক্রেডেনশিয়াল সুরক্ষিত রাখতে, JWT শুধুমাত্র আপনার সার্ভারে বা আপনার অ্যাপে Google Wallet Android SDK ব্যবহার করে সাইন-ইন করা উচিত।
কোড সাইনিংয়ের উদাহরণ দেখুন
Java
// Create the JWT as a HashMap object HashMap<String, Object> claims = new HashMap<String, Object>(); claims.put("iss", ((ServiceAccountCredentials) credentials).getClientEmail()); claims.put("aud", "google"); claims.put("origins", Arrays.asList("www.example.com")); claims.put("typ", "savetowallet"); // Create the Google Wallet payload and add to the JWT HashMap<String, Object> payload = new HashMap<String, Object>(); payload.put("eventTicketObjects", Arrays.asList(newObject)); claims.put("payload", payload); // Google Cloud service account credentials are used to sign the JWT Algorithm algorithm = Algorithm.RSA256( null, (RSAPrivateKey) ((ServiceAccountCredentials) credentials).getPrivateKey()); String token = JWT.create().withPayload(claims).sign(algorithm);
Node.JS
// Create the JWT claims let claims = { iss: this.credentials.client_email, aud: 'google', origins: ['www.example.com'], typ: 'savetowallet', payload: { eventTicketObjects: [newObject] }, }; // The service account credentials are used to sign the JWT let token = jwt.sign(claims, this.credentials.private_key, { algorithm: 'RS256' });
Python
# Create the JWT claims claims = { 'iss': self.credentials.service_account_email, 'aud': 'google', 'origins': ['www.example.com'], 'typ': 'savetowallet', 'payload': { # The listed classes and objects will be created 'eventTicketObjects': [new_object] } } # The service account credentials are used to sign the JWT signer = crypt.RSASigner.from_service_account_file(self.key_file_path) token = jwt.encode(signer, claims).decode('utf-8')
৫. 'Google Wallet-এ যোগ করুন' বোতাম বা লিঙ্কের মাধ্যমে পাস ইস্যু করুন
এটি কীসের জন্য
স্বাক্ষরিত JWT তৈরি করার পরে, আপনি Google Wallet ব্যবহারকারীকে পাস ইস্যু করার জন্য প্রস্তুত! ব্যবহারকারীকে 'Google Wallet-এ যোগ করুন' বোতাম বা লিঙ্ক দেখানোর মাধ্যমে এটি করা হয়। ব্যবহারকারী বোতাম বা হাইপারলিঙ্কে ক্লিক করলে, স্বাক্ষরিত JWT Google Wallet API-তে পাঠানো হয়, যা আপনার সেভ করা ক্রেডেনশিয়াল ব্যবহার করে এটিকে ডিক্রিপ্ট করে। JWT স্বাক্ষর যাচাই করা হয়ে গেলে, ব্যবহারকারীকে পাস ইস্যু করা হবে যাতে তিনি সেটি Google Wallet-এ সেভ করতে পারেন।
কীভাবে এটি করা হয়
নেটিভ Android অ্যাপের জন্য Google Wallet Android SDK ব্যবহার করুন। iOS অ্যাপ, মোবাইল ও ডেস্কটপ ওয়েব, ইমেল ও টেক্সট মেসেজ সহ অন্যান্য সব প্ল্যাটফর্মের জন্য https://pay.google.com/gp/v/save/<signed_jwt> ফর্ম্যাটে হাইপারলিঙ্ক তৈরি করুন। সম্ভব হলে, ব্যবহারকারীকে এই লিঙ্কটি 'Google Wallet-এ যোগ করুন' বোতাম হিসেবে দেখানোই সবচেয়ে ভালো।
'Google Wallet-এ যোগ করুন' বোতাম ব্যবহার করার ব্যাপারে আরও তথ্য পেতে, Google Wallet API ব্র্যান্ড নির্দেশিকা দেখুন
উদাহরণ কোড দেখুন
Hyperlink
https://pay.google.com/gp/v/save/<signed_jwt>
Android SDK
private lateinit var walletClient: PayClient private val addToGoogleWalletRequestCode = 1000 private lateinit var addToGoogleWalletButton: View override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) walletClient = Pay.getClient(this) addToGoogleWalletButton.setOnClickListener { walletClient.savePasses(newObjectJson, this, addToGoogleWalletRequestCode) } }
৬. Google Wallet-এ দেখুন
আপনার ব্যবহারকারী ইস্যু করা পাস সেভ করার পরে, এটি তাদের Google Wallet অ্যাপে তাদের সেভ করা অন্য যেকোনও পাসের সাথে দেখা যাবে।
JWT-তে পাস অবজেক্ট ও পাস ক্লাস তৈরি করা
Google Wallet REST API বা Android SDK ব্যবহার করে আগে থেকেই পাস ক্লাস ও পাস অবজেক্ট তৈরি করা যেতে পারে। তৈরি করা হয়ে গেলে, তাদের আইডি রেফারেন্স হিসেবে ব্যবহার করে পাস ইস্যু করা হয়।
বিকল্প হিসেবে, আপনি পাস ক্লাস ও পাস অবজেক্ট 'ঠিক সময়ে' তৈরি করতে পারেন। এর জন্য আপনাকে JSON সরাসরি JWT-তে এম্বেড করতে হবে যা ব্যবহারকারীকে পাস ইস্যু করার জন্য ব্যবহার করা হয়। এই পদ্ধতিতে, 'Google Wallet-এ যোগ করুন' বোতাম বা লিঙ্ক ব্যবহার করে স্বাক্ষরিত JWT পাঠানো হলে, Google Wallet API-এর মাধ্যমে পাস ক্লাস ও পাস অবজেক্ট তৈরি করা হয়।
যেমন, নিম্নলিখিত উদাহরণে payload.eventTicketClasses ও payload.eventTicketObjects প্রপার্টি ব্যবহার করে নতুন পাস ক্লাস ও পাস অবজেক্ট সহ JWT দেখানো হয়েছে। মনে রাখবেন যে এইসব প্রপার্টি হল অ্যারে, তাই এগুলি এক বা একাধিক পাস ক্লাস বা পাস অবজেক্ট গ্রহণ করতে পারে। এছাড়াও, আপনি JWT-তে শুধু একটি নতুন Passes Object উল্লেখ করতে পারেন যা এর ID-এর মাধ্যমে আগে থেকে থাকা Passes Class-কে রেফারেন্স করে।
JWT-এর উদাহরণ দেখুন
{ "iss": "issuer@example.com", "aud": "google", "typ": "savetowallet", "iat": 1696877738, "origins": [ "www.example.com" ], "payload": { "eventTicketClasses": [{ "id": "ISSUER_ID.EVENT_CLASS_ID", "issuerName": "[TEST ONLY] Heraldic Event", "localizedIssuerName": { "defaultValue": { "language": "en-US", "value": "[TEST ONLY] Heraldic Event" } }, "logo": { "sourceUri": { "uri": "https://images.unsplash.com/photo-1475721027785-f74eccf877e2?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=660&h=660" }, "contentDescription": { "defaultValue": { "language": "en-US", "value": "LOGO_IMAGE_DESCRIPTION" } } }, "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", "hexBackgroundColor": "#264750", "heroImage": { "sourceUri": { "uri": "https://images.unsplash.com/photo-1501281668745-f7f57925c3b4?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1032&h=336" }, "contentDescription": { "defaultValue": { "language": "en-US", "value": "HERO_IMAGE_DESCRIPTION" } } } }], "eventTicketObjects": [{ "id": "ISSUER_ID.OBJECT_ID", "classId": "ISSUER_ID.EVENT_CLASS_ID", "state": "ACTIVE", "seatInfo": { "seat": { "defaultValue": { "language": "en-us", "value": "5" } }, "row": { "defaultValue": { "language": "en-us", "value": "G" } }, "section": { "defaultValue": { "language": "en-us", "value": "40" } }, "gate": { "defaultValue": { "language": "en-us", "value": "3A" } } }, "barcode": { "type": "QR_CODE", "value": "BARCODE_VALUE", "alternateText": "" } }] } }