আপনার প্লে বিলিং ইন্টিগ্রেশন সর্বাধিক করুন

1. সংক্ষিপ্ত বিবরণ

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

আমরা আপনাকে আপনার অ্যাপ এবং গেমের জন্য সাবস্ক্রিপশন এবং এককালীন পণ্যের জন্য রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDNs) এবং প্লে বিলিং ল্যাব সেট আপ করতে সাহায্য করব। আপনি শিখবেন কীভাবে গ্রাহক পরিবর্তন কমাতে হয়; জালিয়াতি এবং অপব্যবহার থেকে রক্ষা করতে হয়; এজ কেস পরীক্ষা করতে হয়; সম্ভাব্য সমস্যাগুলি অনুকরণ, পুনরুত্পাদন এবং সমাধান করতে হয়; এবং ব্যবহারকারীদের প্রভাবিত না করে অফার এবং মূল্য পরিবর্তনের সাথে পরীক্ষা করতে হয়।

শেষ পর্যন্ত, আপনি জয়-ব্যাক কৌশল বাস্তবায়ন করতে, দ্রুত ইন্টিগ্রেশন চ্যালেঞ্জগুলি সমাধান করতে, ROI উন্নত করতে, একটি প্রিমিয়াম অভিজ্ঞতা প্রদান করতে এবং আত্মবিশ্বাসের সাথে আপনার অ্যাপ এবং আপডেটগুলি চালু করতে প্রস্তুত থাকবেন।

পূর্বশর্ত

তুমি কি শিখবে

  • ক্রয় রূপান্তর এবং গ্রাহক ধরে রাখার কৌশলগুলি উন্নত করার মাধ্যমে বৃদ্ধিকে সর্বোত্তম করার জন্য আপনার ক্রয় জীবনচক্রকে কীভাবে সঠিকভাবে পরিচালনা করবেন
  • গুগল ক্লাউড পাব/সাব ব্যবহার করে রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDN) কীভাবে সেট আপ করবেন, যা পরবর্তীতে উইন-ব্যাক ক্যাম্পেইন এবং অন্যান্য জীবনচক্র ব্যবস্থাপনা কৌশল বাস্তবায়নের জন্য ব্যবহার করা যেতে পারে
  • আপনার ব্যাকএন্ড সার্ভারে একটি রিসিভার কীভাবে সেট আপ করবেন যাতে সঠিক ট্র্যাকিং এবং এনটাইটেলমেন্ট সহ বিজ্ঞপ্তিগুলি নিরাপদে পরিচালনা করা যায় যাতে অনিচ্ছাকৃত ফেরত বা জালিয়াতি এবং অপব্যবহারের ঝুঁকি কমানো যায়
  • ডেভেলপমেন্ট খরচ কমানোর সাথে সাথে আপনার ব্যবহারকারীর অভিজ্ঞতা উন্নত করার জন্য প্লে বিলিং ল্যাব ব্যবহার করে কীভাবে আপনার ইন্টিগ্রেশন পরীক্ষা করবেন এবং ত্রুটিগুলি অনুকরণ করবেন

তোমার যা লাগবে

  • Google Play Console- এ আপনার অ্যাপের জন্য Play ডেভেলপার অ্যাকাউন্ট অ্যাক্সেস করুন
  • Google Play Developer API সক্ষম করে আপনার Google Cloud Platform Project-এ অ্যাক্সেস করুন
  • আপনার অ্যান্ড্রয়েড অ্যাপের অ্যাকাউন্ট এবং এনটাইটেলমেন্ট পরিচালনা করার জন্য একটি ব্যাকএন্ড সার্ভার
  • Play Developer Console-এ আপনার অ্যাপের জন্য নিবন্ধিত লাইসেন্স পরীক্ষকরা
  • আপনার টেস্টিং ডিভাইসে Play Billing Lab ইনস্টল করা আছে

২. সাবস্ক্রিপশন এবং এককালীন কেনাকাটার জন্য নগদীকরণ কৌশল

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

এককালীন ক্রয় বা সাবস্ক্রিপশনের জন্য একটি সাধারণ ক্রয় প্রবাহে একাধিক ধাপ জড়িত থাকবে:

  1. ব্যবহারকারী কেনার জন্য জিনিসপত্র ব্রাউজ করেন।
  2. ব্যবহারকারীর ক্রয় এবং অর্থপ্রদান সম্পূর্ণ করার জন্য ক্রয় প্রবাহ চালু করুন।
  3. সম্পূর্ণ ক্রয় সম্পর্কে আপনার সার্ভারকে অবহিত করুন।
  4. আপনার সার্ভারে ক্রয়টি যাচাই করুন।
  5. ব্যবহারকারীকে কন্টেন্ট দিন।
  6. সামগ্রী সরবরাহের বিষয়টি স্বীকার করুন। ব্যবহারযোগ্য পণ্যের ক্ষেত্রে, উপযুক্ত সময়ে ক্রয়কৃত পণ্যটি গ্রহণ করুন যাতে ব্যবহারকারী আবার জিনিসটি কিনতে পারেন।

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

রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDN) ক্রয় জীবনচক্রের এই বিভিন্ন পর্যায়গুলি সনাক্ত করার একটি দুর্দান্ত উপায় এবং এটি কার্যকরভাবে রিয়েল-টাইম পারফরম্যান্স ট্র্যাকিং টুল এবং গ্রাহকদের জয়-ব্যাক কৌশল সক্ষম করার একটি টুল উভয় হিসাবেই ব্যবহার করা যেতে পারে।

উদাহরণস্বরূপ: ধরুন আপনার ব্যবহারকারী সবেমাত্র একটি নতুন আইটেম কিনেছেন অথবা তার পেমেন্ট মিস করেছেন, তাই সাবস্ক্রিপশনটি গ্রেস পিরিয়ডে প্রবেশ করেছে। সঠিক RTDN ব্যবহার করে, আপনি রিয়েল টাইমে বুঝতে পারবেন যে ব্যবহারকারীর অবস্থা পরিবর্তিত হয়েছে এবং সেই অনুযায়ী কাজ করতে পারেন, হয় ব্যবহারকারীকে তাদের কেনা আইটেমটির সাথে আরও বেশি জড়িত করে অথবা তাদের সাবস্ক্রিপশন চালিয়ে যাওয়ার জন্য তাদের পেমেন্টের বিবরণ আপডেট করার জন্য তাদের রিমাইন্ডার ইমেল পাঠিয়ে।

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

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

৩. রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDN) কনফিগার করুন

রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDN) গুগল ক্লাউড পাব/সাব ব্যবহার করে ক্রয়ের অবস্থার পরিবর্তনের সাথে সাথে প্রতিক্রিয়া জানাতে পারে। ক্লাউড পাব/সাব একটি সম্পূর্ণরূপে পরিচালিত রিয়েল-টাইম মেসেজিং পরিষেবা যা আপনি স্বাধীন অ্যাপ্লিকেশনগুলির মধ্যে বার্তা পাঠাতে এবং গ্রহণ করতে ব্যবহার করতে পারেন। গুগল প্লে আপনার সাবস্ক্রাইব করা বিষয়গুলিতে পুশ বিজ্ঞপ্তি প্রকাশ করতে ক্লাউড পাব/সাব ব্যবহার করে।

RTDN সক্ষম করতে, আপনাকে প্রথমে আপনার নিজস্ব Google Cloud Platform (GCP) প্রকল্প ব্যবহার করে Cloud Pub/Sub সেট আপ করতে হবে এবং তারপর আপনার অ্যাপের জন্য বিজ্ঞপ্তিগুলি সক্ষম করতে হবে। আপনি যদি GCP এবং Cloud Pub/Sub এর সাথে পরিচিত না হন, তাহলে Quickstart নির্দেশিকাটি দেখুন।

একটি বিষয় তৈরি করুন

বিজ্ঞপ্তি পেতে শুরু করার জন্য, আপনাকে এমন একটি বিষয় তৈরি করতে হবে যেখানে Google Play বিজ্ঞপ্তিগুলি প্রকাশ করবে। একটি বিষয় তৈরি করতে, বিষয় তৈরি করুন -এ নির্দেশাবলী অনুসরণ করুন।

একটি পাব/সাব সাবস্ক্রিপশন তৈরি করুন

কোনও বিষয়ে প্রকাশিত বার্তাগুলি পেতে, আপনাকে অবশ্যই সেই বিষয়ে একটি পাব/সাব সাবস্ক্রিপশন তৈরি করতে হবে। একটি পাব/সাব সাবস্ক্রিপশন তৈরি করতে, নিম্নলিখিতগুলি করুন:

  1. পুশ সাবস্ক্রিপশন অথবা পুল সাবস্ক্রিপশন হিসেবে সাবস্ক্রিপশন কীভাবে কনফিগার করবেন সে সম্পর্কে নিজেকে পরিচিত করতে ক্লাউড পাব/সাব সাবস্ক্রাইবার গাইডটি পড়ুন। এই কোডল্যাবে, আমরা একটি পুল সাবস্ক্রিপশন নিয়ে কাজ করব যার জন্য আপনার সুরক্ষিত ব্যাকএন্ড সার্ভারকে বার্তা পুনরুদ্ধারের জন্য ক্লাউড পাব/সাব সার্ভারে অনুরোধ শুরু করতে হবে।
  1. সাবস্ক্রিপশন তৈরি করতে সাবস্ক্রিপশন যোগ করুন এর নির্দেশাবলী অনুসরণ করুন।

আপনার বিষয়ে প্রকাশনার অধিকার প্রদান করুন

ক্লাউড পাব/সাব-এর জন্য আপনার বিষয়ে বিজ্ঞপ্তি প্রকাশ করার জন্য Google Play-কে বিশেষাধিকার প্রদান করা প্রয়োজন।

  1. গুগল ক্লাউড কনসোল খুলুন।
  2. আপনার প্রকল্পটি নির্বাচন করুন, এবং তারপর অনুসন্ধান বারে " Pub/Sub" অনুসন্ধান করুন এবং Pub/Sub কনফিগারেশন পৃষ্ঠায় নেভিগেট করুন। Search and land on the Pub/Sub config page
  3. আপনার বিষয় খুঁজুন, এবং অনুমতি সেটিং খুলুন। Open the permission setting
  4. google-play-developer-notifications@system.gserviceaccount.com পরিষেবা অ্যাকাউন্টটি যোগ করতে এবং এটিকে Pub/Sub Publisher এর ভূমিকা প্রদান করতে ADD PRINCIPAL এ ক্লিক করুন। Add the service account google-play-developer-notifications@system.gserviceaccount.com, and grant it the role of Pub/Sub Publisher
  5. টপিক সেট আপ সম্পূর্ণ করতে সংরক্ষণ করুন এ ক্লিক করুন। Click Save to complete the topic set up.

আপনার অ্যাপের জন্য RTDN সক্ষম করুন

আপনার প্লে বিলিং ইন্টিগ্রেশন উল্লেখযোগ্যভাবে উন্নত করতে রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDN) সেট আপ করতে শিখুন। ব্যক্তিগতকৃত মেসেজিংয়ের মাধ্যমে আপনি ক্রয়ের নির্ভরযোগ্যতা উন্নত করতে পারেন এবং আপনার সামগ্রিক ROI উন্নত করতে জালিয়াতি এবং অপব্যবহার প্রতিরোধ করতে পারেন।

RTDN গুলি সাবস্ক্রিপশন পুনর্নবীকরণ, নতুন ক্রয় এবং অর্থপ্রদানের সমস্যার মতো গুরুত্বপূর্ণ ইভেন্টগুলির জন্য Google Play থেকে সরাসরি সার্ভার-টু-সার্ভার আপডেট সরবরাহ করে। এগুলি আপনার ব্যাকএন্ড সিস্টেমগুলিকে ব্যবহারকারীর এনটাইটেলমেন্টের প্রকৃত অবস্থার সাথে স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজ করতে সাহায্য করে, ক্লায়েন্ট-সাইড সীমাবদ্ধতা অতিক্রম করে এবং আপনাকে তাৎক্ষণিকভাবে এবং যথাযথভাবে প্রতিক্রিয়া জানাতে সক্ষম করে।

আপনার অ্যাপের জন্য রিয়েল-টাইম ডেভেলপার বিজ্ঞপ্তিগুলি কীভাবে সক্ষম করবেন:

  1. গুগল প্লে কনসোল খুলুন।
  2. আপনার অ্যাপটি নির্বাচন করুন।
  3. মনিটাইজ উইথ প্লে > মনিটাইজেশন সেটআপ এ যান।
  4. রিয়েল-টাইম ডেভেলপার বিজ্ঞপ্তি বিভাগে স্ক্রোল করুন।
  5. রিয়েল-টাইম বিজ্ঞপ্তি সক্ষম করুন চেক করুন।
  6. "বিষয়ের নাম" ক্ষেত্রে, আপনার পূর্বে কনফিগার করা সম্পূর্ণ ক্লাউড পাব/সাব বিষয়ের নামটি লিখুন। বিষয়ের নামটি projects/{project_id}/topics/{topic_name} ফর্ম্যাটে থাকা উচিত যেখানে project_id হল আপনার প্রকল্পের অনন্য শনাক্তকারী, এবং topic_name হল পূর্বে তৈরি বিষয়ের নাম।
  7. একটি পরীক্ষামূলক বার্তা পাঠাতে "পরীক্ষা বার্তা পাঠান " এ ক্লিক করুন। একটি পরীক্ষামূলক প্রকাশনা সম্পাদন করলে সবকিছু সঠিকভাবে সেট আপ এবং কনফিগার করা হয়েছে তা নিশ্চিত করতে সাহায্য করে। যদি পরীক্ষামূলক প্রকাশনা সফল হয়, তাহলে একটি বার্তা প্রদর্শিত হবে যেখানে বলা হবে যে পরীক্ষামূলক প্রকাশনা সফল হয়েছে। যদি আপনি এই বিষয়ের জন্য একটি সাবস্ক্রিপশন সংযুক্ত করে থাকেন, তাহলে আপনি পরীক্ষামূলক বার্তাটি পাবেন। পুল সাবস্ক্রিপশনের জন্য, ক্লাউড কনসোলে সাবস্ক্রিপশনে যান, বার্তা দেখুন ক্লিক করুন এবং বার্তাগুলি টানতে এগিয়ে যান। ক্লাউড পাব/সাব দ্বারা বারবার ডেলিভারি এড়াতে আপনার টানা যেকোনো বার্তা স্বীকার করা উচিত। পুশ সাবস্ক্রিপশনের জন্য, পরীক্ষামূলক বার্তাটি আপনার পুশ এন্ডপয়েন্টে পৌঁছেছে কিনা তা পরীক্ষা করুন। একটি সফল প্রতিক্রিয়া কোড স্বীকৃতির বার্তা হিসাবে কাজ করবে। যদি প্রকাশনা ব্যর্থ হয়, তাহলে একটি ত্রুটি দেখানো হবে। নিশ্চিত করুন যে বিষয়ের নাম সঠিক এবং google-play-developer-notifications@system.gserviceaccount.com পরিষেবা অ্যাকাউন্টের বিষয়টিতে Pub/Sub প্রকাশকের অ্যাক্সেস আছে।
  8. আপনি কোন ধরণের বিজ্ঞপ্তি পেতে চান তা বেছে নিন।
  • সাবস্ক্রিপশন এবং বাতিল করা সমস্ত কেনাকাটার জন্য বিজ্ঞপ্তি পান - সাবস্ক্রিপশন এবং বাতিল করা কেনাকাটার সাথে সম্পর্কিত রিয়েল-টাইম ডেভেলপার বিজ্ঞপ্তি পান। আপনি এককালীন পণ্য কেনাকাটার জন্য বিজ্ঞপ্তি পাবেন না।
  • সাবস্ক্রিপশন এবং এককালীন পণ্যের জন্য সমস্ত বিজ্ঞপ্তি পান - সমস্ত সাবস্ক্রিপশন এবং বাতিল ক্রয় ইভেন্টের জন্য বিজ্ঞপ্তি পান। আপনি এককালীন পণ্য ক্রয় ইভেন্টগুলিও পাবেন, যেমন ONE_TIME_PRODUCT_PURCHASED এবং ONE_TIME_PRODUCT_CANCELED । এই ক্রয় ইভেন্টগুলি সম্পর্কে আরও জানতে এককালীন ক্রয়ের জীবনচক্র দেখুন।

a266e5dec5c93cd8.png সম্পর্কে

  1. পরিবর্তনগুলি সংরক্ষণ করুন ক্লিক করুন।

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

৪. বিজ্ঞপ্তি গ্রহণ করুন

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

এর জন্য ক্রয়ের সমাপ্তি সময়মতো সনাক্ত এবং প্রক্রিয়াজাতকরণ করা প্রয়োজন। Play Billing Library আপনার অ্যাপে ক্রয় শনাক্ত করার জন্য একাধিক উপায় প্রদান করে। সম্পূর্ণ ক্রয় শনাক্ত হওয়ার পর, আপনার অ্যাপকে অবশ্যই ক্রয় যাচাই করার জন্য আপনার ব্যাকএন্ড সার্ভারকে অবহিত করতে হবে, সঠিক ব্যবহারকারীকে কন্টেন্ট প্রদান করতে হবে এবং তারপর Google কে জানাতে হবে যে ক্রয় প্রক্রিয়াজাতকরণ করা হয়েছে। তবে, এমনও হতে পারে যে বিভিন্ন কারণে আপনার অ্যাপ সময়মতো ক্রয় শনাক্ত করতে পারেনি। উদাহরণস্বরূপ, একজন ব্যবহারকারী সফলভাবে ক্রয় করতে পারেন এবং Google থেকে নিশ্চিতকরণ পেতে পারেন, কিন্তু তাদের ডিভাইস তাদের ডিভাইসের আগে নেটওয়ার্ক সংযোগ হারিয়ে ফেলে এবং আপনার অ্যাপ Play Billing Library ইন্টারফেসের মাধ্যমে বিজ্ঞপ্তি পায়। RTDN অতিরিক্ত সার্ভার সাইড নিয়ন্ত্রণ প্রদান করে যা ব্যবহারকারীর ক্লায়েন্টের সমস্যা থাকলেও আপনাকে ক্রয় পরিচালনা করতে সাহায্য করে। RTDN ক্রয়ের স্থিতি পরিবর্তনের সময় আপনার সার্ভারে স্বাধীন বিজ্ঞপ্তির গ্যারান্টি দেয়, যা আপনাকে সম্ভাব্য ক্লায়েন্টের সমস্যাগুলি থেকে স্বাধীনভাবে দ্বিতীয় পথের মাধ্যমে ক্রয়ের স্থিতি পরিবর্তনগুলি প্রায় তাৎক্ষণিকভাবে সনাক্ত করতে দেয়, ক্রয়ের আরও নির্ভরযোগ্য প্রক্রিয়া নিশ্চিত করে।

এই বিভাগে আপনি ক্লাউড পাব/সাব ক্লায়েন্ট লাইব্রেরি ব্যবহার করে আপনার ক্লাউড পাব/সাব বিষয়ে প্রেরিত বার্তাগুলি ব্যবহার করার জন্য একটি গ্রাহক তৈরি করবেন। এই লাইব্রেরিগুলি বিভিন্ন ভাষায় উপলব্ধ। পরবর্তী বিভাগগুলিতে, আমরা ক্রয় যাচাই করার জন্য, সঠিক ব্যবহারকারীকে এনটাইটেলমেন্ট প্রদান করার জন্য এবং সার্ভারে ক্রয়টি স্বীকার/ব্যবহার করার জন্য গ্রাহককে যুক্ত করব। এই কোডল্যাবের জন্য, আমরা জাভা ব্যবহার করছি।

ক্লাউড পাব/সাব টপিকে করা প্রতিটি পোস্টে একটি একক base64-এনকোডেড ডেটা ফিল্ড থাকে।

{
 "message": {
   "attributes": {
     "key": "value"
   },
   "data": "eyAidmVyc2lvbiI6IHN0cmluZywgInBhY2thZ2VOYW1lIjogc3RyaW5nLCAiZXZlbnRUaW1lTWlsbGlzIjogbG9uZywgIm9uZVRpbWVQcm9kdWN0Tm90aWZpY2F0aW9uIjogT25lVGltZVByb2R1Y3ROb3RpZmljYXRpb24sICJzdWJzY3JpcHRpb25Ob3RpZmljYXRpb24iOiBTdWJzY3JpcHRpb25Ob3RpZmljYXRpb24sICJ0ZXN0Tm90aWZpY2F0aW9uIjogVGVzdE5vdGlmaWNhdGlvbiB9",
   "messageId": "136969346945"
 },
 "subscription": "projects/myproject/subscriptions/mysubscription"
}

base64-এনকোডেড ডেটা ফিল্ডটি ডিকোড করার পরে, DeveloperNotification এ নিম্নলিখিত ফিল্ডগুলি থাকবে:

{
 "version": string,
 "packageName": string,
 "eventTimeMillis": long,
 "oneTimeProductNotification": OneTimeProductNotification,
 "subscriptionNotification": SubscriptionNotification,
 "voidedPurchaseNotification": VoidedPurchaseNotification,
 "testNotification": TestNotification
}

আরও তথ্যের জন্য অনুগ্রহ করে রিয়েল-টাইম ডেভেলপার বিজ্ঞপ্তি রেফারেন্স দেখুন।

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

import com.google.cloud.pubsub.v1.AckReplyConsumer;
import com.google.cloud.pubsub.v1.MessageReceiver;
import com.google.cloud.pubsub.v1.Subscriber;
import com.google.pubsub.v1.ProjectSubscriptionName;
import com.google.pubsub.v1.PubsubMessage;
import java.util.Base64;
import org.json.JSONObject;

/** Real-time developer notifications receiver. */
public class NotificationReceiver {

 private NotificationReceiver() {}

 /*
  * Receive notification messages from the subscription.
  *
  * @param projectId The project ID of your Google Cloud Project.
  * @param subscriptionId The subscription ID of the subscriber to the pub/sub topic.
  */
 public static void receiveNotificationMessages(String projectId, String subscriptionId) {
   ProjectSubscriptionName subscriptionName =
       ProjectSubscriptionName.of(projectId, subscriptionId);

   try {
     Subscriber subscriber =
         Subscriber.newBuilder(subscriptionName, new NotificationMessageReceiver()).build();
     // Start the subscriber.
     subscriber.startAsync().awaitRunning();

     subscriber.awaitTerminated();
   } catch (IllegalStateException e) {
     System.out.println("Subscriber stopped: " + e);
   }
 }

 static class NotificationMessageReceiver implements MessageReceiver {

   @Override
   public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) {
     // Decode the data into a String from the message data field.
     String jsonString = new String(Base64.getDecoder().decode(message.getData().toStringUtf8()));
     // Parse the String into a JSON object.
     JSONObject messageJson = new JSONObject(jsonString);

     // Fetch the value for certain fields.
     String version = messageJson.getString("version");
     String packageName = messageJson.getString("packageName");
     System.out.println("version: " + version);
     System.out.println("packageName: " + packageName);

     // Validate the purchase and grant the entitlement as needed.
     // More details in the following sections.
     // ......

     // Acknowledge the message to avoid repeated delivery.
     consumer.ack();
   }
 }
}

এখন, আপনার কাছে একটি নোটিফিকেশন রিসিভার আছে যা আপনার ক্লাউড পাব/সাব টপিকে প্রেরিত বার্তাগুলি আপনার সুরক্ষিত ব্যাকএন্ড সার্ভারে ব্যবহার করে। নিম্নলিখিত বিভাগগুলিতে, আমরা আপনার ব্যাকএন্ড সার্ভারে RTDN বার্তাগুলি প্রক্রিয়া করার সর্বোত্তম অনুশীলনগুলি কভার করব।

৫. আপনার অ্যাপের ক্রয় প্রবাহে ব্যবহারকারী শনাক্তকারী সংযুক্ত করুন।

যখন আপনার সার্ভার ক্রয়ের অবস্থা আপডেট সম্পর্কে RTDN বার্তা পায়, তখন আপনার সার্ভারকে জানতে হবে কোন ব্যবহারকারী ক্রয়টি করেছেন, যাতে এটি প্রক্রিয়া করা যায়, যেমন সঠিক ব্যবহারকারীর কাছে সামগ্রী পৌঁছে দেওয়া। আপনার অ্যাপে ক্রয় প্রবাহ চালু করার সময় obfuscatedAccountId ব্যবহার করে ক্রয়কারী ব্যবহারকারীর জন্য আপনার কাছে থাকা যেকোনো ব্যবহারকারী শনাক্তকারী সংযুক্ত করে আপনি এটি অর্জন করতে পারেন। একটি উদাহরণ শনাক্তকারী আপনার সিস্টেমে ব্যবহারকারীর লগইনের একটি অস্পষ্ট সংস্করণ হতে পারে। এই প্যারামিটার সেট করলে Google জালিয়াতি সনাক্ত করতে সাহায্য করতে পারে। উপরন্তু, এটি আপনাকে নিশ্চিত করতে সাহায্য করতে পারে যে ক্রয়গুলি সঠিক ব্যবহারকারীর নামেই করা হচ্ছে যেমন ব্যবহারকারীদের এনটাইটেলমেন্ট প্রদানের ক্ষেত্রে আলোচনা করা হয়েছে।

অ্যাপে ক্রয় প্রবাহ চালু করার সময় obfuscatedAccountId সেট করে ব্যবহারকারী শনাক্তকারী সংযুক্ত করার জন্য নমুনা কোডগুলি নীচে দেখানো হয়েছে।

// An activity reference from which the billing flow will be launched.
Activity activity = ...;
// A user identifier, e.g. an obfuscated user id in your system.
String obfuscatedAccountId = ...;

ImmutableList<ProductDetailsParams> productDetailsParamsList =
    ImmutableList.of(
        ProductDetailsParams.newBuilder()
            // retrieve a value for "productDetails" by calling queryProductDetailsAsync()
            .setProductDetails(productDetails)
            // set the offer token to specify the offer to purchase when applicable, e.g., subscription products
            // .setOfferToken(offerToken)
            .build()
    );

BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(productDetailsParamsList)
    .setObfuscatedAccountId(obfuscatedAccountId)
    .build();

// Launch the billing flow
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);

পরবর্তী বিভাগে আপনি দেখতে পাবেন, ক্রয় প্রবাহে সেট করা ব্যবহারকারী শনাক্তকারী ক্রয়ের মধ্যে অন্তর্ভুক্ত করা হবে এবং সঠিক ব্যবহারকারীকে এনটাইটেলমেন্ট প্রদান করতে ব্যবহার করা যেতে পারে।

৬. এনটাইটেলমেন্ট দেওয়ার আগে ক্রয় যাচাই করুন

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

একজন ব্যবহারকারী একবার পণ্য কেনার পর, আপনার সুরক্ষিত ব্যাকএন্ড সার্ভারের Pub/Sub গ্রাহক একটি Pub/Sub বার্তা পাবেন। আপনার ব্যাকএন্ড সার্ভারে নিম্নলিখিতগুলি করা উচিত:

  1. পাব/সাব মেসেজ থেকে purchaseToken পার্স করুন। আপনার সমস্ত ক্রয়ের জন্য সমস্ত purchaseToken মূল্যের একটি রেকর্ড বজায় রাখা উচিত।
  2. বর্তমান ক্রয়ের জন্য purchaseToken মানটি পূর্ববর্তী কোনও purchaseToken মানের সাথে মেলে কিনা তা যাচাই করুন। purchaseToken বিশ্বব্যাপী অনন্য, তাই আপনি নিরাপদে আপনার ডাটাবেসে একটি প্রাথমিক কী হিসাবে এই মানটি ব্যবহার করতে পারেন।
  3. ক্রয়টি বৈধ কিনা তা যাচাই করতে Google Play Developer API-তে purchases.products:get endpoint ব্যবহার করুন।
  1. যদি ক্রয়টি বৈধ হয় এবং অতীতে ব্যবহার না করা হয়, তাহলে আপনি নিরাপদে অ্যাপ-মধ্যস্থ আইটেম বা সাবস্ক্রিপশনের অধিকার প্রদান করতে পারেন।
  2. ক্রয়ের অবস্থা PURCHASED হলেই কেবল আপনার এনটাইটেলমেন্ট মঞ্জুর করা উচিত এবং PENDING ক্রয়গুলি সঠিকভাবে পরিচালনা করা নিশ্চিত করুন। আপনি মুলতুবি থাকা লেনদেন পরিচালনা করা -এ আরও তথ্য পেতে পারেন।

নিচের কোড উদাহরণটি Google Play Developer API-এর জন্য একটি API ক্লায়েন্ট তৈরি করে। আমরা পরে API কল করার জন্য এটি ব্যবহার করব।

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.androidpublisher.AndroidPublisher;
import com.google.api.services.androidpublisher.AndroidPublisherScopes;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

/** Helper class to initialize the publisher APIs client library. */
public class AndroidPublisherHelper {
 /* Your application name */
 private static final String APPLICATION_NAME = "YourApplicationName";

 /* Load credentials from a JSON key file. Replace with the actual path to your downloaded service
  * account key file.
  */
 private static final String RESOURCES_CLIENT_SECRETS_JSON =
     "/path/to/your/service_account_key.json";

 /** Global instance of the JSON factory. */
 private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();

 /* The API client */
 private static final AndroidPublisher ANDROID_PUBLISHER = init();

 /**
  * Performs all necessary setup steps for running requests against the API.
  *
  * @return the {@link AndroidPublisher} service
  */
 private static AndroidPublisher init(){
   try {
     // Authorization.
     Credential credential =
         GoogleCredential.fromStream(
                 AndroidPublisherHelper.class.getResourceAsStream(RESOURCES_CLIENT_SECRETS_JSON))
             .createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER));

     HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();

     // Set up and return API client.
     return new AndroidPublisher.Builder(httpTransport, JSON_FACTORY, credential)
         .setApplicationName(ApplicationConfig.APPLICATION_NAME)
         .build();
   } catch (GeneralSecurityException | IOException ex) {
     throw new RuntimeException("fail to initialize the publisher APIs client library", ex);
   }
 }
}

তারপর, আমরা API কল করার জন্য যুক্তি যোগ করি এবং ক্রয়টি যাচাই করার জন্য পূর্বে নির্মিত রিসিভারটি পরিবর্তন করি এবং সঠিক ব্যবহারকারীকে এনটাইটেলমেন্ট প্রদান করি।

AndroidPublisherHelper এ, Google Play Developer API-তে Purchases.products:get endpoint থেকে ProductPurchase আনতে নিম্নলিখিত পদ্ধতিটি যোগ করুন।

 /* Fetch the ProductPurchase for the one-time product purchase from
  * Purchases.products.get endpoint in the Google Play Developer API
  */
 public static ProductPurchase executeProductPurchasesGet(
     String packageName, String sku, String purchaseToken) {
   try {
     ProductPurchase productPurchase =
         ANDROID_PUBLISHER.purchases().products().get(packageName, sku, purchaseToken).execute();
     return productPurchase;
   } catch (IOException ex) {
     log.error("Exception was thrown while getting a product purchase", ex);
     // It is recommended to apply some retry mechanism, such as exponential backoff, to fetch the purchase in case of transient failures.
     return null;
   }
 }

NotificationMessageReceiver এ, ক্রয়টি যাচাই করুন এবং বিজ্ঞপ্তিতে অন্তর্ভুক্ত ডেটার উপর ভিত্তি করে আপনার সিস্টেমে সঠিক ব্যবহারকারীকে এনটাইটেলমেন্ট প্রদান করুন। ডুপ্লিকেট প্রক্রিয়াকরণ এড়াতে আপনার সার্ভারে purchaseToken ট্র্যাক করা উচিত।

 @Override
 public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) {
   // Decode the data into a String from the message data field.
   String jsonString = new String(Base64.getDecoder().decode(message.getData().toStringUtf8()));
   // Parse the String into a JSON object.
   JSONObject messageJson = new JSONObject(jsonString);

   // Fetch the value for certain fields.
   String version = messageJson.getString("version");
   String packageName = messageJson.getString("packageName");

   // Process notification data based on your business requirements.
   // Process oneTimeProductNotification in the message.
   JSONObject oneTimeProductNotificationJson =
       messageJson.getJSONObject("oneTimeProductNotification");
   if (oneTimeProductNotificationJson != null) {
     String purchaseToken = oneTimeProductNotificationJson.getString("purchaseToken");
     String sku = oneTimeProductNotificationJson.getString("sku");
     int notificationType = oneTimeProductNotificationJson.getInt("notificationType");

     if (notificationType == 1) {
       // ONE_TIME_PRODUCT_PURCHASED - A one-time product was successfully purchased by a user.
       // Verify that the purchaseToken value does not match any previous purchaseToken values in
       // your backend system to avoid duplicate processing.
       ......
       // Fetch the ProductPurchase from Purchases.products.get endpoint
       ProductPurchase productPurchase =
         AndroidPublisherHelper.executeProductPurchasesGet(packageName, sku, purchaseToken);
       if (productPurchase != null && productPurchase.getPurchaseState() == 0) {
         // The purchase is valid and in PURCHASED state.

         // The account Id set in the App when launching the billing flow.
         String obfuscatedExternalAccountId = productPurchase.getObfuscatedExternalAccountId();
         // Grant the entitlement to the correct account for obfuscatedExternalAccountId in your
         // system.
       ......
       }
     }
     // Process subscriptionNotification in the message.
     JSONObject subscriptionNotificationJson = messageJson.getJSONObject("subscriptionNotification");
     if (subscriptionNotificationJson != null) {
       ......
     }
     // Process other notification data in the message as needed.
     ......
   }

   // Acknowledge the message to avoid repeated delivery.
   consumer.ack();
 }

৭. গুগলকে জানান যে ক্রয়টি প্রক্রিয়া করা হয়েছে।

এনটাইটেলমেন্ট প্রদানের পর, আপনার নিরাপদ ব্যাকএন্ড সার্ভার থেকে Play Developer API-তে purchases.products:consume অথবা purchases.products: acnow এ কল করে Google কে জানানো উচিত যে ক্রয়টি প্রক্রিয়া করা হয়েছে, যাতে আপনি একটি উপভোগ্য পণ্য ব্যবহার করতে পারেন অথবা একটি অ-ভোগ্য পণ্য স্বীকার করতে পারেন।

AndroidPublisherHelper এ, Google Play Developer API তে purchases.products:consume অথবা purchases.products:acknowledge কল করার জন্য নিম্নলিখিত পদ্ধতিগুলি যোগ করুন।

 /* Consume the one-time product purchase by calling
  * Purchases.products.consume endpoint in the Google Play Developer API
  */
 public static void executeProductPurchasesConsume(
     String packageName, String sku, String purchaseToken) {
   try {
     ANDROID_PUBLISHER
       .purchases().products().consume(packageName, sku, purchaseToken).execute();
   } catch (IOException ex) {
     log.error("Exception was thrown while consuming a product purchase", ex);
     // It is recommended to apply some retry mechanism, such as exponential backoff, to ensure the purchase is correctly consumed in case of transient failures.
   }
 }

 /* Acknowledge the one-time product purchase by calling
  * Purchases.products.acknowledge endpoint in the Google Play Developer API
  */
 public static void executeProductPurchasesAcknowledge(
     String packageName, String sku, String purchaseToken) {
   try {
     ANDROID_PUBLISHER
       .purchases().products().acknowledge(packageName, sku, purchaseToken, new ProductPurchasesAcknowledgeRequest()).execute();
   } catch (IOException ex) {
     log.error("Exception was thrown while acknowledging a product purchase", ex);
     // It is recommended to apply some retry mechanism, such as exponential backoff, to ensure the purchase is correctly acknowledged in case of transient failures.
   }
 }

NotificationMessageReceiver এ, আপনার ব্যাকএন্ড সার্ভারে এনটাইটেলমেন্ট প্রদানের পরে, ভোগ্যপণ্য ক্রয়টি গ্রহণ করুন অথবা অ-ভোগ্যপণ্য ক্রয়টি স্বীকার করুন।

 @Override
 public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) {
   ......
       String obfuscatedExternalAccountId = productPurchase.getObfuscatedExternalAccountId();
       // Grant the entitlement to the correct account for obfuscatedExternalAccountId in your
       // system.
       ......
       // If the product is a consumable product, consume the purchase.
       AndroidPublisherHelper.executeProductPurchasesConsume(packageName, sku, purchaseToken);
       // Or if the product is a non-consumable product, acknowledge the purchase.
       // AndroidPublisherHelper.executeProductPurchasesAcknowledge(packageName, sku, purchaseToken);
  ......

 }

স্বীকৃতি প্রদান আবশ্যক, কারণ এটি Google Play-কে জানায় যে ব্যবহারকারীকে ক্রয়ের অধিকার দেওয়া হয়েছে। অধিকার প্রদানের পরপরই আপনার ক্রয়ের অধিকার স্বীকার করা উচিত।

দারুন! আপনি রিয়েল-টাইম ডেভেলপার নোটিফিকেশনের সাথে সফলভাবে ইন্টিগ্রেট করেছেন, যা এই কোডল্যাবে দেখানো নির্ভরযোগ্য ক্রয় প্রক্রিয়াকরণ সক্ষম করে। এখন, সবকিছু নিখুঁতভাবে কাজ করছে কিনা তা নিশ্চিত করার জন্য, আসুন Play Billing Lab অন্বেষণ করি, এটি একটি ব্যবহারকারী-বান্ধব টুল যা আপনার Play Billing ইন্টিগ্রেশন পরীক্ষা করতে সাহায্য করার জন্য ডিজাইন করা হয়েছে।

৮. প্লে বিলিং ল্যাবের মাধ্যমে পরীক্ষা করুন

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

প্লে বিলিং ল্যাব বিভিন্ন পরিস্থিতিতে পরীক্ষা করতে সাহায্য করার জন্য বিভিন্ন পরীক্ষার বৈশিষ্ট্য অফার করে, যার মধ্যে রয়েছে:

আমরা Play Billing Lab অ্যাপে ক্রমাগত নতুন পরীক্ষামূলক ক্ষমতা যোগ করছি। আপনি Play Store থেকে Play Billing Lab ডাউনলোড এবং ইনস্টল করতে পারেন, অথবা Play Billing Lab এর সাথে পরীক্ষা সম্পর্কে আরও তথ্যের জন্য Test your integration দেখুন।

বিলিং রেসপন্সকোড পরীক্ষা করতে প্লে বিলিং ল্যাব ব্যবহার করুন

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

উদাহরণস্বরূপ, আপনার অ্যাপটি সফলভাবে ক্রয় শনাক্ত করার পর ক্রয়টি ব্যবহার করার জন্য আপনি আপনার অ্যাপে লজিকটি প্রয়োগ করেছেন। আপনি এমন পরিস্থিতি পরীক্ষা করতে চান যেখানে নেটওয়ার্ক ব্যর্থতার কারণে আপনার অ্যাপটি ক্রয়টি ব্যবহার করতে ব্যর্থ হয়েছে এবং আপনার ব্যাকএন্ড সার্ভারের RTDN রিসিভার বার্তাটি তুলে নেয় এবং ক্রয়টি সঠিকভাবে পরিচালনা করে। আপনার পরীক্ষার জন্য পরিস্থিতিটি অনুকরণ করার জন্য আপনি রেসপন্স সিমুলেটর ব্যবহার করতে পারেন। নিম্নলিখিতটি আপনাকে Play Billing Lab Response Simulator দিয়ে পরীক্ষা করার ধাপগুলি সম্পর্কে নির্দেশনা দেবে।

রেসপন্স সিমুলেটর দিয়ে পরীক্ষা করুন

রেসপন্স সিমুলেটর দিয়ে পরীক্ষা করার সময়, আপনার অ্যাপ প্লে বিলিং ল্যাবের সাথে যোগাযোগ করবে যাতে আপনি প্লে বিলিং ল্যাব রেসপন্স সিমুলেটরে কনফিগার করা রেসপন্স কোডটি পেতে পারেন।

Play Billing Library-এর জন্য বিলিং ওভাররাইড পরীক্ষা সক্ষম করুন

রেসপন্স সিমুলেটর এবং আপনার অ্যাপের মধ্যে যোগাযোগ সক্ষম করতে, আপনাকে প্রথমে আপনার অ্যাপের মধ্যে থেকে Play Billing Library-এর জন্য বিলিং ওভাররাইড পরীক্ষা সক্ষম করতে হবে। এটি করার জন্য, আপনার অ্যাপের AndroidManifest.xml ফাইলে নিম্নলিখিত মেটাডেটা ট্যাগগুলি যোগ করুন।

<manifest ... >
  <application ... >
    ...
     <meta-data
      android:name="com.google.android.play.largest_release_audience.NONPRODUCTION"
      android:value="" />
    <meta-data
      android:name="com.google.android.play.billingclient.enableBillingOverridesTesting"
      android:value="true" />
  </application>
</manifest>

আপডেট করা AndroidManifest.xml ফাইল দিয়ে আপনার অ্যাপ তৈরি করুন। এখন, আপনার অ্যাপটি Play Billing Lab Response Simulator এর জন্য প্রস্তুত।

পরীক্ষার পর যখন আপনি আপনার অ্যাপটি প্রোডাকশন পরিবেশে স্থাপন করেন, তখন আপনার হয় একটি পৃথক AndroidManifest.xml ফাইল ব্যবহার করা উচিত যাতে এই মেটাডেটা ট্যাগগুলি অন্তর্ভুক্ত না থাকে অথবা নিশ্চিত করুন যে আপনি AndroidManifest.xml ফাইল থেকে এই ট্যাগগুলি সরিয়ে ফেলেছেন।

প্লে বিলিং লাইব্রেরির ত্রুটিগুলি সিমুলেট করুন

সিমুলেটেড প্লে বিলিং লাইব্রেরি ত্রুটিগুলি পরীক্ষা করতে, প্রথমে প্লে বিলিং ল্যাব অ্যাপে প্রতিক্রিয়া কোডটি কনফিগার করুন, তারপর আপনার অ্যাপে পরীক্ষাটি সম্পাদন করুন।

একটি প্রতিক্রিয়া কোড কনফিগার করুন

  1. আপনার অ্যাপের লাইসেন্স টেস্টার অ্যাকাউন্ট দিয়ে Play Billing Lab অ্যাপে সাইন ইন করুন। নিচের ছবিতে Play Billing Lab ড্যাশবোর্ড দেখানো হয়েছে, যার মধ্যে রেসপন্স সিমুলেটর কার্ডও রয়েছে।

রেসপন্স সিমুলেটর দিয়ে বিলিং ল্যাব ড্যাশবোর্ড খেলুন

  1. রেসপন্স সিমুলেটর স্ক্রিনে যেতে রেসপন্স সিমুলেটর কার্ডে Manage এ ক্লিক করুন।
  2. অনুরোধ করা হলে, আপনার অ্যাপের সংযোগের অবস্থা দেখার জন্য Play Billing Lab থেকে বিজ্ঞপ্তিগুলিকে অনুমতি দিন।
  3. সিমুলেট প্লে বিলিং লাইব্রেরি রেসপন্স সুইচটি সক্রিয় করুন, যদি এটি ইতিমধ্যেই সক্রিয় না থাকে।

c841baa4c96bf306.png সম্পর্কে

  1. আপনি যে Play Billing Library API গুলি পরীক্ষা করতে চান তার জন্য একটি প্রতিক্রিয়া কোড নির্বাচন করুন। consumming ক্রয়ের জন্য ত্রুটি অনুকরণ করতে, consumeAsync API এর জন্য একটি ত্রুটি কোড নির্বাচন করুন। আপনার নির্বাচনগুলি স্বয়ংক্রিয়ভাবে সংরক্ষিত হয়। এখন প্রতিক্রিয়া সিমুলেটর আপনার অ্যাপে নির্বাচিত প্রতিক্রিয়া কোডগুলি প্রেরণের জন্য প্রস্তুত।

আপনার অ্যাপটি পরীক্ষা করুন

এখন আপনি আপনার অ্যাপটি পরীক্ষা করে দেখতে পারেন যে কনফিগার করা ত্রুটির পরিস্থিতিতে সবকিছু প্রত্যাশা অনুযায়ী কাজ করছে কিনা। আপনার অ্যাপটি খুলুন এবং Play Billing Library API পদ্ধতিটি ট্রিগার করুন। যদি আপনার অ্যাপটি ক্রয়টি ব্যবহার করার জন্য consumeAsync কল করে, তাহলে আপনার অ্যাপটি আপনার কনফিগার করা ত্রুটি কোডটি পাবে। আপনার অ্যাপটি ত্রুটি কোডের উপর সঠিকভাবে কাজ করছে কিনা এবং আপনার ব্যাকএন্ড সার্ভার সঠিকভাবে ক্রয়টি প্রক্রিয়া করছে কিনা তা আপনি যাচাই করতে পারেন।

আপনার পরীক্ষা শেষ করার পরে, প্রতিক্রিয়া সিমুলেশন বন্ধ করতে কেবল সিমুলেট প্লে বিলিং লাইব্রেরি প্রতিক্রিয়া সুইচটি বন্ধ করুন।

প্লে বিলিং ল্যাবের মাধ্যমে পরীক্ষা সম্পর্কে আরও জানুন, অথবা লাইসেন্স পরীক্ষকদের মাধ্যমে অ্যাপ-মধ্যস্থ বিলিং পরীক্ষা করার বিষয়ে আরও জানতে সহায়তা কেন্দ্রে যান।

9. অভিনন্দন!

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

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

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

এই কোডল্যাবটি সম্পূর্ণ করার মাধ্যমে, আপনি এখন সম্পূর্ণ ক্রয় যাত্রা পরিচালনা করার এবং Play Billing Lab-এর সাথে আপনার বাস্তবায়ন কঠোরভাবে পরীক্ষা করার দক্ষতা অর্জন করবেন, একটি নিরবচ্ছিন্ন ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করবেন এবং Google Play-তে আপনার নগদীকরণের সম্ভাবনা সর্বাধিক করবেন।