আঞ্চলিক পণ্যের মূল্য নির্ধারণের মাধ্যমে নতুন বাজার উন্মোচন করুন

১. ভূমিকা

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

দর্শক

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

আপনি যা শিখবেন...

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

আপনার যা যা লাগবে...

২. এককালীন পণ্য প্রিমিয়ার

ওয়ান-টাইম প্রোডাক্ট অবজেক্ট মডেল আপনাকে পণ্য বিক্রির পদ্ধতিতে অধিকতর নমনীয়তা প্রদান করে এবং এর ব্যবস্থাপনার জটিলতা হ্রাস করে। এই অবজেক্ট মডেল কী বিক্রি করা হচ্ছে এবং কীভাবে বিক্রি করা হচ্ছে, তা পৃথক করে। এর ফলে একই এনটাইটেলমেন্টের জন্য একাধিক মূল্যস্তর এবং ব্যবহারকারীদের কাছে বিপণনের বিভিন্ন উপায় থাকে। এই অবজেক্ট মডেলের তিনটি স্তরবিন্যাস রয়েছে:

  • এককালীন পণ্য - একটি পণ্য অবজেক্ট নির্ধারণ করে যে ব্যবহারকারী কী কিনছেন।
  • ক্রয় বিকল্প - একটি ক্রয় বিকল্প নির্ধারণ করে যে ব্যবহারকারীকে কীভাবে অধিকারটি প্রদান করা হবে, এর মূল্য কত হবে এবং পণ্যটি কোথায় (অঞ্চলে) পাওয়া যাবে। একটি একক পণ্যের একাধিক ক্রয় বিকল্প থাকতে পারে, যা বিভিন্ন অঞ্চলে ভিন্ন ভিন্ন মূল্য নির্দেশ করে।
  • অফার - অফারগুলো যে ক্রয় বিকল্পের সাথে যুক্ত থাকে তার মূল্যকে প্রভাবিত করতে পারে এবং ডিসকাউন্ট বা প্রি-অর্ডার মডেল করতে ব্যবহার করা যেতে পারে। একটি একক ক্রয় বিকল্পে একাধিক অফার থাকতে পারে।

নিম্নোক্ত চিত্রটিতে এককালীন পণ্য বস্তু মডেলটি দেখানো হয়েছে।

কোডল্যাব-ওটিপি-মডেল.png চিত্র ১ : এককালীন বস্তু মডেল।

আরও তথ্যের জন্য, এককালীন পণ্যগুলির সংক্ষিপ্ত বিবরণ দেখুন।

৩. নমুনা অ্যাপটি তৈরি করুন।

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

  • PBL-এর সাথে অ্যাপটি একীভূত করুন
  • এককালীন পণ্য এবং সংশ্লিষ্ট ক্রয় বিকল্পগুলি খুঁজে বের করা
  • আঞ্চলিক মূল্য নির্ধারণ সহ ক্রয় প্রবাহ চালান

নিম্নলিখিত ডেমো ভিডিওটিতে দেখানো হয়েছে যে, নমুনা অ্যাপটি ডেপ্লয় এবং রান করার পর দেখতে কেমন হবে ও এর আচরণ কেমন হবে।

যদি আপনি ওয়ান-টাইম প্রোডাক্ট এবং প্লে বিলিং লাইব্রেরি (PBL) সম্পর্কে আগে থেকেই পরিচিত থাকেন, তাহলে আপনি স্যাম্পল অ্যাপটি ডাউনলোড করে এটি ব্যবহার করে দেখতে পারেন।

পূর্বশর্ত

স্যাম্পল অ্যাপটি বিল্ড এবং ডিপ্লয় করার আগে, নিম্নলিখিত কাজগুলো করুন:

নির্মাণ করুন

এই বিল্ড ধাপটির উদ্দেশ্য হলো নমুনা অ্যাপটির একটি স্বাক্ষরিত অ্যান্ড্রয়েড অ্যাপ বান্ডেল ফাইল তৈরি করা।

অ্যান্ড্রয়েড অ্যাপ বান্ডেল তৈরি করতে, নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. গিটহাব থেকে নমুনা অ্যাপটি ডাউনলোড করুন।
  2. স্যাম্পল অ্যাপটি বিল্ড করুন । বিল্ড করার আগে, স্যাম্পল অ্যাপটির প্যাকেজ নামটি পরিবর্তন করুন এবং তারপর বিল্ড করুন। আপনার প্লে কনসোলে যদি অন্য অ্যাপের প্যাকেজ থাকে, তবে স্যাম্পল অ্যাপটির জন্য দেওয়া প্যাকেজ নামটি যেন অনন্য হয়, তা নিশ্চিত করুন।

    দ্রষ্টব্য : স্যাম্পল অ্যাপটি বিল্ড করলে শুধুমাত্র একটি APK ফাইল তৈরি হয় যা আপনি লোকাল টেস্টিংয়ের জন্য ব্যবহার করতে পারেন। তবে, অ্যাপটি রান করলে প্রোডাক্ট এবং দাম পাওয়া যায় না, কারণ প্রোডাক্টগুলো প্লে কনসোলে কনফিগার করা হয়নি।
  3. একটি স্বাক্ষরিত অ্যান্ড্রয়েড অ্যাপ বান্ডেল তৈরি করুন।
    1. একটি আপলোড কী এবং কীস্টোর তৈরি করুন
    2. আপনার আপলোড কী দিয়ে আপনার অ্যাপটি সাইন করুন।
    3. প্লে অ্যাপ সাইনিং কনফিগার করুন

পরবর্তী ধাপ হলো অ্যান্ড্রয়েড অ্যাপ বান্ডেলটি গুগল প্লে কনসোলে আপলোড করা।

৪. প্লে কনসোলে এককালীন পণ্য তৈরি করুন

গুগল প্লে কনসোলে ওয়ান-টাইম প্রোডাক্ট তৈরি করতে হলে, প্লে কনসোলে আপনার একটি অ্যাপ থাকতে হবে। প্লে কনসোলে একটি অ্যাপ তৈরি করুন এবং তারপরে পূর্বে তৈরি করা সাইনড অ্যাপ বান্ডেলটি আপলোড করুন।

একটি অ্যাপ তৈরি করুন

একটি অ্যাপ তৈরি করতে:

  1. আপনার ডেভেলপার অ্যাকাউন্ট ব্যবহার করে গুগল প্লে কনসোলে লগ-ইন করুন।
  2. 'Create app'-এ ক্লিক করুন। এটি 'Create app' পেজটি খুলে দেবে।
  3. একটি অ্যাপের নাম লিখুন, ডিফল্ট ভাষা নির্বাচন করুন এবং অ্যাপ সম্পর্কিত অন্যান্য বিবরণ দিন।
  4. 'Create app'-এ ক্লিক করুন। এটি গুগল প্লে কনসোলে একটি অ্যাপ তৈরি করবে।

এখন আপনি নমুনা অ্যাপটির স্বাক্ষরিত অ্যাপ বান্ডেলটি আপলোড করতে পারবেন।

স্বাক্ষরিত অ্যাপ বান্ডেল আপলোড করুন

  1. স্বাক্ষরিত অ্যাপ বান্ডেলটি গুগল প্লে কনসোলের অভ্যন্তরীণ টেস্ট ট্র্যাকে আপলোড করুন । আপলোড করার পরেই আপনি প্লে কনসোলে মনিটাইজেশন সম্পর্কিত ফিচারগুলো কনফিগার করতে পারবেন।
  2. টেস্ট এবং রিলিজ > টেস্টিং > ইন্টারনাল রিলিজ > নতুন রিলিজ তৈরি করুন- এ ক্লিক করুন।
  3. একটি রিলিজের নাম লিখুন এবং স্বাক্ষরিত APK ফাইলটি আপলোড করুন।
  4. Next-এ ক্লিক করুন, এবং তারপর Save and publish-এ ক্লিক করুন।

এখন, আপনি আপনার এককালীন পণ্যগুলো তৈরি করতে পারবেন।

এককালীন পণ্য তৈরি করুন

এককালীন পণ্য তৈরি করতে:

  1. গুগল প্লে কনসোলে , বাম দিকের নেভিগেশন মেনু থেকে, Monetize with Play > Products > One-time products- এ যান।
  2. এককালীন পণ্য তৈরি করুন-এ ক্লিক করুন।
  3. নিম্নলিখিত পণ্যের বিবরণ লিখুন:
    • প্রোডাক্ট আইডি: একটি অনন্য আইডি দিন। উদাহরণস্বরূপ, trending_movie_1
    • (ঐচ্ছিক) ট্যাগ: প্রাসঙ্গিক ট্যাগ যোগ করুন।
    • নাম: পণ্যের একটি নাম লিখুন। উদাহরণস্বরূপ, Product Movie
    • বিবরণ: পণ্যের একটি বিবরণ লিখুন। উদাহরণস্বরূপ, Product Description
    পণ্যের নাম ও বিবরণের হস্তলিখিত অনুবাদ
    ডিফল্টরূপে, পণ্যের নাম এবং বিবরণ ইংরেজি (মার্কিন যুক্তরাষ্ট্র) – en-US ভাষায় থাকে। আপনি অন্যান্য ভাষাতেও ম্যানুয়ালি নাম এবং বিবরণ লিখতে পারেন। বিস্তারিত তথ্য যোগ করতে, 'Manage translations'-এ ক্লিক করুন, যে ভাষাগুলোর জন্য আপনি অনূদিত লেখাটি লিখতে চান তা নির্বাচন করুন, এবং তারপর 'Apply'-এ ক্লিক করুন। নিচের ছবিতে ' Manage translations' অপশনটি দেখানো হয়েছে: manage-translations.png চিত্র ২ : অনুবাদ পরিচালনা করুন।

    আপনার নির্বাচিত ভাষাগুলো ল্যাঙ্গুয়েজ ড্রপ-ডাউনে দেখা যাবে। প্রতিটি ভাষা নির্বাচন করুন এবং সেই নির্বাচিত ভাষায় সংশ্লিষ্ট নাম ও বিবরণ লিখুন। আপনি বিনামূল্যে পণ্যের নাম ও বিবরণ স্বয়ংক্রিয়ভাবে অনুবাদও করতে পারেন। আরও তথ্যের জন্য, এই কোডল্যাবের ' এককালীন পণ্য অনুবাদ' (Translate one-time products) অংশটি দেখুন।

    দ্রষ্টব্য : এই কোডল্যাবের জন্য, আপনি আইকন ফিল্ড এবং ট্যাক্স, কমপ্লায়েন্স ও প্রোগ্রাম সেকশন কনফিগার করা বাদ দিতে পারেন।
  4. পরবর্তী ধাপে যান।
  5. একটি ক্রয় বিকল্প যোগ করুন এবং এর আঞ্চলিক প্রাপ্যতা কনফিগার করুন। একটি ওয়ান-টাইম প্রোডাক্টের জন্য অন্তত একটি ক্রয় বিকল্প প্রয়োজন, যা নির্ধারণ করে কীভাবে এর অধিকার প্রদান করা হবে, এর মূল্য এবং আঞ্চলিক প্রাপ্যতা। এই কোডল্যাবের জন্য, আমরা প্রোডাক্টটির জন্য স্ট্যান্ডার্ড ' Buy' বিকল্পটি যোগ করব।

    ক্রয় বিকল্প বিভাগে নিম্নলিখিত বিবরণগুলি লিখুন:
    • ক্রয় বিকল্প আইডি: একটি অনন্য আইডি লিখুন। উদাহরণস্বরূপ, buy-movie
    • ক্রয়ের ধরণ: কিনুন নির্বাচন করুন।
    • (ঐচ্ছিক) ট্যাগ: এই ক্রয় বিকল্পটির জন্য নির্দিষ্ট ট্যাগ যোগ করুন।
    • (ঐচ্ছিক) উন্নত বিকল্পগুলো কনফিগার করতে 'Advanced options'-এ ক্লিক করুন। এই কোডল্যাবের জন্য, আপনি উন্নত বিকল্পগুলোর কনফিগারেশন এড়িয়ে যেতে পারেন।
  6. এরপরে, আপনাকে ক্রয়ের বিকল্পটির জন্য আঞ্চলিক প্রাপ্যতা এবং মূল্য নির্ধারণ করতে হবে। আঞ্চলিক প্রাপ্যতা অংশে, আপনি সেই অঞ্চলগুলো নির্দিষ্ট করবেন যেখানে আপনার পণ্যটি পাওয়া যাবে, যার মধ্যে সেইসব অঞ্চলও অন্তর্ভুক্ত থাকবে যেখানে আপনার অ্যাপটি এখনও প্রকাশিত হয়নি। ডিফল্টরূপে, সমস্ত অঞ্চলেই ক্রয়ের বিকল্পটি উপলব্ধ থাকবে।

    'Availability and pricing' বিভাগে, 'Edit availability and access'-এ ক্লিক করুন > 'Set to unavailable'-এ ক্লিক করুন। লক্ষ্য করুন যে, সমস্ত অঞ্চল ডিফল্টরূপে 'Available' হিসেবে সেট করা থাকে।
    1. France , SpainUnited States ছাড়া বাকি সব দেশ নির্বাচন করুন, তারপর ‘অনুপলব্ধ করতে সেট করুন’ বোতামে ক্লিক করুন।
    2. ‘সমস্ত অঞ্চল’ ড্রপ-ডাউন থেকে ‘উপলব্ধ দেশ ও অঞ্চল’ নির্বাচন করুন। এটি শুধুমাত্র সেই দেশগুলিকে দেখাবে যা আপনি পূর্ববর্তী ধাপে নির্বাচন করেছিলেন।
    3. উপলব্ধ প্রতিটি দেশের জন্য, 'মূল্য' কলামে থাকা সম্পাদনা আইকনে ক্লিক করুন। এতে মূল্য সম্পাদনা করার জন্য একটি ডায়ালগ বক্স প্রদর্শিত হবে। নিম্নলিখিত মূল্যগুলি প্রবেশ করান এবং সংরক্ষণ করুন:
      • France জন্য, 10 EUR লিখুন।
      • Spain জন্য, ৮ ইউরো লিখুন।
      • United States জন্য, ১৩ ইউএসডি লিখুন।
  7. অ্যাক্টিভেট-এ ক্লিক করুন। এর ফলে আপনার ওয়ান-টাইম প্রোডাক্টটি বাই (Buy) ক্রয় অপশনের সাথে উপলব্ধ হবে।

দ্রষ্টব্য : ব্যবহারকারীর প্লে কান্ট্রি সেটিংসের উপর ভিত্তি করে আঞ্চলিক মূল্যের মুদ্রা দেখা যায়। উদাহরণস্বরূপ, যদি ব্যবহারকারীর প্লে কান্ট্রি ফ্রান্স সেট করা থাকে, তাহলে পণ্যের এককালীন মূল্য ইউরোতে প্রদর্শিত হবে।

এককালীন পণ্য তৈরির ভিডিও

নিম্নলিখিত ভিডিওটিতে পূর্বে বর্ণিত এককালীন পণ্য তৈরির ধাপগুলো দেখানো হয়েছে।

ভাড়া ক্রয় বিকল্প যোগ করুন

এখন, পূর্বে তৈরি করা ওয়ান-টাইম প্রোডাক্টটিতে একটি রেন্ট পারচেজ অপশন যোগ করুন।

  1. গুগল প্লে কনসোলে , বাম দিকের নেভিগেশন মেনু থেকে, Monetize with Play > Products > One-time products- এ যান।
  2. পূর্ববর্তী ধাপে আপনার তৈরি করা trending_movie_1 প্রোডাক্ট আইডিযুক্ত প্রোডাক্টটির জন্য ডান-তীরচিহ্নে ক্লিক করুন।
  3. ক্রয়ের বিকল্প যোগ করুন -এ ক্লিক করুন।
  4. ক্রয় বিকল্প বিভাগে নিম্নলিখিত বিবরণগুলি লিখুন:
    • ক্রয় বিকল্প আইডি: rent-movie লিখুন।
    • ক্রয়ের ধরণ: ভাড়া নির্বাচন করুন।
    • ভাড়ার সময়কাল: ৪৮ ঘণ্টা নির্বাচন করুন।
    • ভাড়া শুরুর সময়কাল: ২৪ ঘণ্টা নির্বাচন করুন।
    • (ঐচ্ছিক) ট্যাগ: এই ক্রয় বিকল্পটির জন্য নির্দিষ্ট ট্যাগ যোগ করুন।
    • (ঐচ্ছিক) উন্নত বিকল্পগুলো কনফিগার করতে 'Advanced options'-এ ক্লিক করুন। এই কোডল্যাবের জন্য, আপনি উন্নত বিকল্পগুলোর কনফিগারেশন এড়িয়ে যেতে পারেন।
  5. এরপর, ক্রয় বিকল্পের মতোই, ভাড়া ক্রয় বিকল্পের জন্য আঞ্চলিক প্রাপ্যতা কনফিগার করুন। পূর্ববর্তী বিভাগের ধাপ ৬ এবং ৭ দেখুন। আঞ্চলিক মূল্য নির্ধারণ করার সময়, ভাড়ার জন্য একটি ভিন্ন মূল্য নির্ধারণ করুন। উদাহরণস্বরূপ:
    • France - ৫ ইউরো
    • Spain - ৪ ইউরো
    • United States - ৭ মার্কিন ডলার।

৫. এককালীন পণ্যের বিবরণ অনুবাদ করুন

গুগল প্লে কনসোলে উপলব্ধ মেশিন ট্রান্সলেশন ফিচারটি ব্যবহার করে আপনি কোনো অতিরিক্ত খরচ ছাড়াই আপনার পণ্যের নাম ও বিবরণ অনুবাদ করতে পারেন।

শিরোনাম ও বিবরণ অনুবাদ করতে, নিম্নলিখিতগুলি করুন:

  1. Google Play Console-এর বাম দিকের নেভিগেশন মেনু থেকে, Grow users > Translations > Store and in-app products- এ যান।
  2. অর্ডার তৈরি করুন -এ ক্লিক করুন।
  3. ‘বিনা মূল্যে যন্ত্রানুবাদ’ বিকল্পটি নির্বাচন করুন এবং তারপর ‘পরবর্তী’ ক্লিক করুন।
  4. ‘Translate to languages’ থেকে French - fr-FR এবং Spanish -es-ES নির্বাচন করুন, এবং তারপর ‘Next’ ক্লিক করুন।
  5. এককালীন পণ্য এবং সাবস্ক্রিপশন নির্বাচন করুন, এবং তারপরে 'অনুবাদ করুন এবং অনুবাদগুলি দেখুন' -এ ক্লিক করুন। এটি একটি দাবিত্যাগ ব্যানার প্রদর্শন করে। দাবিত্যাগটি স্বীকার করুন।
  6. এখন আপনি অনূদিত ভাষাগুলোর তালিকা দেখতে পাবেন। একটি ভাষার জন্য ‘রিভিউ’ ক্লিক করুন এবং আবেদন করুন । লেখাটি পর্যালোচনা করুন এবং তারপর ‘অ্যাপ্লাই অল ট্রান্সলেশনস’ ক্লিক করুন। আপনি অনুবাদের জন্য যে সমস্ত ভাষা বেছে নিয়েছেন, সেগুলোর জন্য এই ধাপটি পুনরাবৃত্তি করুন।

অনুবাদের পরে, আপনি প্লে কনসোলে অনূদিত লেখাটি সম্পাদনা করতে পারবেন। অনূদিত লেখাটি সম্পাদনা করতে:

  1. ওয়ান-টাইম প্রোডাক্টস > [আপনার ওয়ান-টাইম প্রোডাক্ট] > ওয়ান-টাইম প্রোডাক্ট এডিট করুন > ওয়ান-টাইম প্রোডাক্টের বিবরণ এডিট করার পেজটি খুলুন।
  2. ভাষা ড্রপ-ডাউন থেকে প্রয়োজনীয় ভাষাটি নির্বাচন করুন। এটি নির্বাচিত ভাষায় লেখাটি প্রদর্শন করবে। নিচের ছবিতে অনূদিত লেখাটি সম্পাদনা করার জন্য ভাষা নির্বাচন দেখানো হয়েছে:

    edit-translations.png চিত্র ৩ : অনূদিত পাঠ্য সম্পাদনা করুন।
  3. প্রয়োজন অনুযায়ী লেখাটি সম্পাদনা করুন এবং তারপরে 'পরিবর্তনগুলি সংরক্ষণ করুন ' বোতামে ক্লিক করুন।

ব্যবহারকারীর ফোনের ভাষা পছন্দের উপর ভিত্তি করে অনূদিত লেখাটি তার কাছে দৃশ্যমান হয়। উদাহরণস্বরূপ, যদি ব্যবহারকারীর ফোনের ভাষা ফ্রান্সে সেট করা থাকে, তাহলে এককালীন পণ্যের শিরোনাম এবং বিবরণ ফরাসি ভাষায় প্রদর্শিত হবে। নিচের নমুনা ছবিতে দেখানো হয়েছে যে, বিভিন্ন ভাষায় অনূদিত লেখাটি কীভাবে এবং কোথায় প্রদর্শিত হবে।

অনুবাদ-পরবর্তী.png চিত্র ৪ : আপনার অ্যাপে অনূদিত লেখা।

অনুবাদ কনফিগারেশন ভিডিও

নিম্নলিখিত ভিডিওটিতে পূর্বে বর্ণিত অনুবাদ কনফিগারেশনের ধাপগুলো দেখানো হয়েছে।

৬. পিবিএল-এর সাথে একীভূত করুন

আপনার অ্যাপকে প্লে বিলিং লাইব্রেরি (PBL)- এর সাথে সংযুক্ত করতে, নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. স্যাম্পল অ্যাপটিতে প্লে বিলিং লাইব্রেরি ডিপেন্ডেন্সিটি যোগ করুন।
    dependencies {
    val billing_version = "8.0.0"
    
    implementation("com.android.billingclient:billing-ktx:$billing_version")
    }
    
  2. BillingClient ইনিশিয়ালাইজ করুন। BillingClient হলো ক্লায়েন্ট SDK যা আপনার অ্যাপে থাকে এবং প্লে বিলিং লাইব্রেরির সাথে যোগাযোগ করে। নিচের কোড স্নিপেটটিতে দেখানো হয়েছে কীভাবে বিলিং ক্লায়েন্ট ইনিশিয়ালাইজ করতে হয়।
    private BillingClient createBillingClient() {
    return BillingClient.newBuilder(activity)
        .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
        // For one-time products, add a listener to process and acknowledge the purchases. This will notify
        // Google the purchase was processed.
        // For client-only apps, use billingClient.acknowledgePurchase().
        // If you have a secure backend, you must acknowledge purchases on your server using the
        // server-side API.
        // See https://developer.android.com/google/play/billing/security#acknowledge
        // In this sample snippet purchases aren't processed. You must
        // implement your business logic to process and acknowledge the purchases.
        .setListener((billingResult, purchases) -> {})
        .enableAutoServiceReconnection()
        .build();
     }
    
  3. গুগল প্লে-এর সাথে সংযোগ করুন। নিচের কোড স্নিপেটটি দেখায় কিভাবে গুগল প্লে-এর সাথে সংযোগ করতে হয়।
    /**
    * Starts the billing connection with Google Play. This method should be called exactly once
    * before any other methods in this class.
    *
    * @param productList The list of products to query for after the connection is established.
    */
    public void startBillingConnection(List<Product> productList) {
        billingClient.startConnection(
            new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(BillingResult billingResult) {
                if (billingResult.getResponseCode() == BillingResponseCode.OK) {
                Log.d(TAG, "Billing Client Connection Successful");
                queryProductDetails(productList);
                } else {
                Log.e(TAG, "Billing Client Connection Failed: " + billingResult.getDebugMessage());
                listener.onBillingSetupFailed(billingResult); // Propagate the error to the listener to show a message to the user.
                }
            }
    
            @Override
            public void onBillingServiceDisconnected() {
                Log.e(TAG, "Billing Client Connection Lost");
                listener.onBillingError("Billing Connection Lost");
            }
            });
    }
    
  4. এককালীন পণ্যের বিবরণ সংগ্রহ করুন। PBL-এর সাথে আপনার অ্যাপ ইন্টিগ্রেট করার পর, আপনাকে অবশ্যই আপনার অ্যাপে এককালীন পণ্যের বিবরণ সংগ্রহ করতে হবে। নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে আপনার অ্যাপে এককালীন পণ্যের বিবরণ সংগ্রহ করতে হয়।
    private void queryProductDetails(List<Product> productList) {
        QueryProductDetailsParams queryProductDetailsParams =
            QueryProductDetailsParams.newBuilder().setProductList(productList).build();
    
        billingClient.queryProductDetailsAsync(
            queryProductDetailsParams,
            new ProductDetailsResponseListener() {
            @Override
            public void onProductDetailsResponse(
                BillingResult billingResult, QueryProductDetailsResult productDetailsResponse) {
                if (billingResult.getResponseCode() == BillingResponseCode.OK) {
                List<ProductDetails> productDetailsList =
                    productDetailsResponse.getProductDetailsList();
                    listener.onProductDetailsResponse(productDetailsList);
                } else {
                Log.e(TAG, "QueryProductDetailsAsync Failed: " + billingResult.getDebugMessage());
                listener.onBillingError("Query Products Failed: " + billingResult.getResponseCode());
                }
            }
            });
    }
    
    ProductDetails থেকে এককালীন পণ্যটি (এই উদাহরণে trending_movie_1 ) ফেচ করলে, আপনি নিম্নলিখিতের মতো একটি প্রতিক্রিয়া পাবেন:
    {
        "productId": "trending_movie_1",
        "type": "inapp",
        "title": "Purrfect Mayhem: The Rewind Protocol (Movies All Day | Play Samples)",
        "name": "Purrfect Mayhem: The Rewind Protocol",
        "description": "Dr. Arid Thorne and a smart tiger named Yolo find a mysterious tape. It's a \"Rewind Protocol\" to fix time. A shadowy group, the Clockinator, hunts them to seize the tape's power.",
        "skuDetailsToken": "<---skuDetailsToken--->",
        "oneTimePurchaseOfferDetails": {},
        "oneTimePurchaseOfferDetailsList": [
            {
                "priceAmountMicros": 13000000,
                "priceCurrencyCode": "USD",
                "formattedPrice": "$13.00",
                "offerIdToken": "<---buy offerIdToken --->",
                "purchaseOptionId": "buy-option",
                "offerTags": [
                    "adventure",
                    "mystery"
                ]
            },
            {
                "priceAmountMicros": 7000000,
                "priceCurrencyCode": "USD",
                "formattedPrice": "$7.00",
                "offerIdToken": "<---rent offerIdToken--->",
                "purchaseOptionId": "rent-option",
                "offerTags": [
                    "adventure",
                    "mystery"
                ],
                "rentalDetails": {
                    "rentalPeriod": "P30D",
                    "rentalExpirationPeriod": "PT24H"
                }
            }
        ]
    }
    
    লক্ষ্য করুন, কেনা এবং ভাড়া নেওয়ার বিকল্পগুলো ' oneTimePurchaseOfferDetailsList এ পাওয়া যায়। এই তালিকায় ২টি কেনার বিকল্প ( কেনার বিকল্প এবং ভাড়ার বিকল্প ) রয়েছে, যেগুলো প্লে কনসোলে কনফিগার করা হয়েছিল। আপনি প্রতিটি কেনার বিকল্পকে তার 'offerIdToken' দ্বারা স্বতন্ত্রভাবে শনাক্ত করতে পারবেন।
  5. ভাড়া এবং ক্রয় অফারগুলোর জন্য অফার টোকেনগুলো সংগ্রহ করুন। ধাপ ৬-এ বিলিং প্রক্রিয়া চালু করার জন্য আপনার এই অফার টোকেনগুলো প্রয়োজন হবে।
    @Override
    public void onProductDetailsResponse(List<ProductDetails> productDetailsList) {
    
        if (productDetailsList != null && !productDetailsList.isEmpty()) {
    
            // Iterate over all details of the queried product in step 4.
            for (ProductDetails productDetails : productDetailsList) {
    
                // Get the list of all the offers associated with the product.
                List<ProductDetails.OneTimePurchaseOfferDetails> offerDetailsList =
                        productDetails.getOneTimePurchaseOfferDetailsList();
    
                // Iterate over the offer details
                for (ProductDetails.OneTimePurchaseOfferDetails offerDetails : offerDetailsList) {
    
                    // For a Rent purchase option, the
                    // offerDetails.getRentalDetails() method returns
                    // the rent information. If this information is present,
                    // the offer corresponds to a Rent purchsae option.
                    if (offerDetails.getRentalDetails() != null) {
                        rentFormattedPrice = offerDetails.getFormattedPrice();
    
                        // Get the offerIdToken for the Rent purchase option
                        rentOfferToken = offerDetails.getOfferToken();
                        rentMovieTags = offerDetails.getOfferTags();
                    }
                    // If the offerDetails.getRentalDetails() returns
                    // null, the offer corresponds to a Buy purchsae option.
                    else {
                        buyFormattedPrice = offerDetails.getFormattedPrice();
    
                        // Get the offerIdToken for the Buy purchase option
                        buyOfferToken = offerDetails.getOfferToken();
                        buyMovieTags = offerDetails.getOfferTags();
                    }
                }
                updateUIButtons();
                return;
    
            }
        } else {
            Log.e(TAG, "No product details found for " + productId);
        }
    }
    
  6. বিলিং প্রক্রিয়াটি চালু করুন।
    /**
     * Launches the billing flow for the product with the given offer token.
    *
    * @param activity The activity instance from which the billing flow will be launched.
    * @param productDetails The product details of the product to purchase.
    * @param offerToken The offer token of the product to purchase.
    * @return The result of the billing flow.
    */
    public void launchPurchase(Activity activity, ProductDetails productDetails, String offerToken) {
        ImmutableList<BillingFlowParams.ProductDetailsParams> productDetailsParamsList =
            ImmutableList.of(
                BillingFlowParams.ProductDetailsParams.newBuilder()
                    .setProductDetails(productDetails)
                    .setOfferToken(offerToken)
                    .build());
        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setProductDetailsParamsList(productDetailsParamsList)
            .build();
        billingClient.launchBillingFlow(activity, billingFlowParams);
    }
    

পরামর্শ : আপনি উইন-ব্যাক ক্যাম্পেইন এবং অন্যান্য পারচেজ লাইফসাইকেল ম্যানেজমেন্ট কৌশল বাস্তবায়নের জন্য রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDN) সেট আপ করতে পারেন। RTDN কীভাবে সেট আপ করতে হয় এবং সঠিক ট্র্যাকিং ও এনটাইটেলমেন্ট সহ নোটিফিকেশন কীভাবে পরিচালনা করতে হয় তা বোঝার জন্য, Maximize Your Play Billing Integration কোডল্যাবটি দেখে নেওয়ার পরামর্শ দেওয়া হচ্ছে।

৭. ক্রয়ের বিকল্পগুলি পরীক্ষা করুন

আপনার লাইভ অ্যাপে ওয়ান-টাইম প্রোডাক্টগুলো উপলব্ধ করার আগে, আপনি লাইসেন্স টেস্টার এবং প্লে বিলিং ল্যাব ব্যবহার করে আপনার পিবিএল ইন্টিগ্রেশন পরীক্ষা করে নিতে পারেন।

আপনি শিখবেন কীভাবে মূল্যের স্থানীয়করণ এবং প্রাপ্যতা পরীক্ষা করতে হয়, যেখানে অ্যাপটি শুধুমাত্র কিছু নির্দিষ্ট অঞ্চলে উপলব্ধ থাকে এবং প্রতিটি অঞ্চলের জন্য এর মূল্য ভিন্ন হয়।

পূর্বশর্ত

ক্রয়ের বিকল্পগুলির জন্য আঞ্চলিক মূল্য যাচাই করুন

ক্রয় বিকল্পগুলির আঞ্চলিক মূল্য যাচাই করতে, নিম্নলিখিতগুলি করুন:

  1. প্লে বিলিং ল্যাব অ্যাপটি খুলুন এবং তারপর লাইসেন্স পরীক্ষক হিসেবে লগইন করুন।
  2. কনফিগারেশন সেটিংসে , এডিট-এ ক্লিক করুন, France দেশটি নির্বাচন করুন এবং তারপরে অ্যাপ্লাই-এ ক্লিক করুন। এখানে আমরা প্লে কান্ট্রি নির্বাচন করছি, যা অ্যাপে প্রদর্শিত মুদ্রা নির্ধারণ করে।
  3. স্যাম্পল অ্যাপটি বন্ধ করে আবার খুলুন। এখন এটিতে France ক্রয় ও ভাড়ার মুদ্রা ইউরোতে দেখানো উচিত।

অন্য কোনো দেশের জন্য পরীক্ষা করতে, ধাপ ২-এ Spain নির্বাচন করুন এবং তারপর ধাপ ৩ অনুসরণ করুন।

বিলিং ল্যাব পরীক্ষার ভিডিও চালান

নিম্নলিখিত ভিডিওটিতে নমুনা অ্যাপটি ব্যবহার করে আঞ্চলিক মূল্য যাচাই করার ধাপগুলো দেখানো হয়েছে।

৮. পরবর্তী পদক্ষেপ

রেফারেন্স নথি

৯. অভিনন্দন!

অভিনন্দন! আপনি সফলভাবে গুগল প্লে কনসোল ব্যবহার করে একটি নতুন ওয়ান-টাইম প্রোডাক্ট তৈরি করেছেন, একটি ক্রয় বিকল্প কনফিগার করেছেন এবং প্লে বিলিং ল্যাব ব্যবহার করে ক্রয় প্রক্রিয়াটি পরীক্ষা করেছেন। ওয়ান-টাইম ক্রয়ের জন্য গুগল প্লে-এর নমনীয় প্রোডাক্ট ক্যাটালগ সম্পর্কে এখন আপনার একটি গভীর ধারণা তৈরি হয়েছে।

জরিপ

এই কোডল্যাব সম্পর্কে আপনার মতামত অত্যন্ত মূল্যবান। অনুগ্রহ করে কয়েক মিনিট সময় নিয়ে আমাদের সমীক্ষাটি পূরণ করুন।