1. ওভারভিউ
আপনার আয়ের স্ট্রীম অপ্টিমাইজ করুন এবং Google Play-এর এই Play বিলিং লাইব্রেরি ইন্টিগ্রেশন কোডল্যাব দিয়ে আত্মবিশ্বাসের সাথে আপনার অ্যাপ চালু করুন। এই স্ট্রাকচার্ড কোডল্যাব আপনাকে নির্ভরযোগ্য ক্রয় প্রক্রিয়াকরণ সেট আপ, পরীক্ষা এবং বাস্তবায়নের মাধ্যমে গাইড করে, আপনাকে আপনার নগদীকরণ লক্ষ্যগুলিকে সমর্থন করতে এবং আরও বিরামহীন ব্যবহারকারীর অভিজ্ঞতা প্রদান করতে সক্ষম করে।
আমরা আপনাকে রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDN) সেট আপ করতে এবং সাবস্ক্রিপশনের জন্য প্লে বিলিং ল্যাব এবং আপনার অ্যাপ্লিকেশান এবং গেমগুলির জন্য এককালীন পণ্যগুলি সেট আপ করতে সহায়তা করব৷ আপনি কীভাবে গ্রাহক মন্থন কমাবেন তা শিখবেন; জালিয়াতি এবং অপব্যবহার থেকে রক্ষা করুন; পরীক্ষা প্রান্ত ক্ষেত্রে; অনুকরণ, পুনরুত্পাদন, এবং সম্ভাব্য সমস্যা সমাধান; এবং ব্যবহারকারীদের প্রভাবিত না করে অফার এবং মূল্য পরিবর্তন নিয়ে পরীক্ষা করুন।
শেষ পর্যন্ত, আপনি জয়-ব্যাক কৌশলগুলি বাস্তবায়ন করতে, ইন্টিগ্রেশন চ্যালেঞ্জগুলি দ্রুত সমাধান করতে, ROI উন্নত করতে, একটি প্রিমিয়াম অভিজ্ঞতা প্রদান করতে এবং আত্মবিশ্বাসের সাথে আপনার অ্যাপ এবং আপডেটগুলি রোল আউট করতে প্রস্তুত থাকবেন৷
পূর্বশর্ত
- বেসিক প্লে বিলিং লাইব্রেরি ইন্টিগ্রেশনের সাথে পরিচিতি
- অ্যান্ড্রয়েড অ্যাপ ডেভেলপমেন্টের সাথে পরিচিতি (জাভা)
আপনি কি শিখবেন
- ক্রয় রূপান্তর এবং গ্রাহক ধারণ উন্নত করার কৌশলগুলির সাহায্যে বৃদ্ধিকে অপ্টিমাইজ করতে সাহায্য করার জন্য কীভাবে আপনার ক্রয়ের জীবনচক্র সঠিকভাবে পরিচালনা করবেন
- গুগল ক্লাউড পাব/সাব ব্যবহার করে কীভাবে রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDN) সেট আপ করবেন, যা পরে উইন-ব্যাক প্রচারাভিযান এবং অন্যান্য জীবনচক্র পরিচালনার কৌশলগুলি বাস্তবায়নের জন্য ব্যবহার করা যেতে পারে
- অনিচ্ছাকৃত অর্থ ফেরত বা জালিয়াতি এবং অপব্যবহারের ঝুঁকি কমাতে সঠিক ট্র্যাকিং এবং এনটাইটেলমেন্ট সহ বিজ্ঞপ্তিগুলিকে নিরাপদে পরিচালনা করতে কীভাবে আপনার ব্যাকএন্ড সার্ভারে একটি রিসিভার সেট আপ করবেন
- কীভাবে আপনার ইন্টিগ্রেশন পরীক্ষা করবেন এবং বিকাশের খরচ কমিয়ে আপনার ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে প্লে বিলিং ল্যাব ব্যবহার করে ত্রুটিগুলি অনুকরণ করবেন
আপনি কি প্রয়োজন হবে
- Google Play কনসোলে আপনার অ্যাপের জন্য Play বিকাশকারী অ্যাকাউন্টে অ্যাক্সেস করুন
- Google Play বিকাশকারী API সক্ষম করে আপনার Google ক্লাউড প্ল্যাটফর্ম প্রকল্পে অ্যাক্সেস করুন৷
- আপনার অ্যান্ড্রয়েড অ্যাপের জন্য অ্যাকাউন্ট এবং এনটাইটেলমেন্ট পরিচালনা করার জন্য একটি ব্যাকএন্ড সার্ভার
- Play Developer Console-এ আপনার অ্যাপের জন্য নিবন্ধিত লাইসেন্স পরীক্ষক
- আপনার টেস্টিং ডিভাইসে প্লে বিলিং ল্যাব ইনস্টল করুন
2. সদস্যতা এবং এককালীন কেনাকাটার জন্য নগদীকরণ কৌশল
আপনার অ্যাপের মাধ্যমে ডিজিটাল পণ্য বিক্রি করার সময়, একটি সফল নগদীকরণ কৌশল অবশ্যই এককালীন কেনাকাটা এবং সদস্যতা উভয়ের জন্য সমগ্র ব্যবহারকারীর অভিজ্ঞতা বিবেচনা করবে। একটি নির্বিঘ্ন অভিজ্ঞতা ক্রয়ের প্রস্তুতি বাড়াতে পারে এবং মন্থন কমাতে পারে।
একটি এককালীন ক্রয় বা সদস্যতার জন্য একটি সাধারণ ক্রয় প্রবাহ একাধিক পর্যায়ে জড়িত হবে:
- ব্যবহারকারী কিনতে আইটেম ব্রাউজ করে.
- ক্রয় এবং অর্থপ্রদান সম্পূর্ণ করার জন্য ব্যবহারকারীর জন্য ক্রয় প্রবাহ চালু করুন।
- সম্পূর্ণ ক্রয় সম্পর্কে আপনার সার্ভারকে অবহিত করুন
- আপনার সার্ভারে ক্রয় যাচাই করুন.
- ব্যবহারকারীকে বিষয়বস্তু দিন।
- কন্টেন্ট ডেলিভারি স্বীকার করুন. ব্যবহারযোগ্য পণ্যগুলির জন্য, উপযুক্ত সময়ে ক্রয়টি গ্রহণ করুন যাতে ব্যবহারকারী আবার আইটেমটি কিনতে পারে।
ইন-অ্যাপ ইন্টিগ্রেশন আপনাকে ক্রয় প্রবাহ চালু করতে এবং এই ব্যবহারকারীর অভিজ্ঞতা পরিচালনা করতে দেয়, তবে ব্যবহারকারীরা যে এনটাইটেলমেন্টগুলি ক্রয় করছেন সেগুলিতে আপনার ব্যাকএন্ড আপ-টু-ডেট রাখা গুরুত্বপূর্ণ। ক্রস-প্ল্যাটফর্ম এনটাইটেলমেন্টের মতো ক্রস ট্র্যাকিং এবং ব্যবহারকারীর অভিজ্ঞতার অন্যান্য দিকগুলি পরিচালনা করার জন্য এটি গুরুত্বপূর্ণ।
রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDN) ক্রয় জীবনচক্রের এই বিভিন্ন পর্যায়গুলিকে চিনতে একটি দুর্দান্ত উপায় এবং কার্যকরভাবে একটি রিয়েল-টাইম পারফরম্যান্স ট্র্যাকিং টুল হিসাবে এবং গ্রাহকদের জয়-ব্যাক কৌশলগুলি সক্ষম করার জন্য একটি টুল হিসাবে উভয়ই কার্যকরভাবে ব্যবহার করা যেতে পারে।
উদাহরণস্বরূপ: বলুন আপনার ব্যবহারকারী একটি নতুন আইটেম কিনেছেন বা এইমাত্র তাদের অর্থপ্রদান মিস করেছেন তাই সাবস্ক্রিপশন গ্রেস পিরিয়ড প্রবেশ করেছে। সঠিক RTDN-এর সাহায্যে, আপনি রিয়েল টাইমের কাছাকাছি, ব্যবহারকারীর স্ট্যাটাস পরিবর্তিত হয়েছে তা চিনতে পারেন এবং সেই অনুযায়ী কাজ করতে পারেন ব্যবহারকারীকে তাদের এইমাত্র কেনা আইটেমটির সাথে আরও বেশি জড়িত করে অথবা, তাদের সদস্যতা চালিয়ে যাওয়ার জন্য তাদের অর্থপ্রদানের বিবরণ আপডেট করার জন্য তাদের অনুস্মারক ইমেল পাঠিয়ে।
ব্যবহারকারীর ক্লায়েন্টের সমস্যা থাকলেও কেনাকাটা পরিচালনা করতে আপনাকে সাহায্য করার জন্য অতিরিক্ত সার্ভার সাইড কন্ট্রোল যোগ করার জন্য RTDNগুলি একটি দুর্দান্ত উপায়। বলুন একজন ব্যবহারকারী একটি সফল কেনাকাটা করেছেন এবং Google থেকে নিশ্চিতকরণ পেয়েছেন, কিন্তু তাদের ডিভাইসটি তাদের ডিভাইসের আগে নেটওয়ার্ক সংযোগ হারায় এবং আপনার অ্যাপ ক্রয়ের শ্রোতার মাধ্যমে ক্রয়ের বিজ্ঞপ্তি পায়। RTDN-এর মাধ্যমে আপনি আপনার সার্ভারের মাধ্যমে একটি স্বাধীন বিজ্ঞপ্তি পাবেন, যাতে আপনি ক্রয়কে চিনতে পারবেন এবং ক্লায়েন্ট সমস্যা থেকে স্বাধীনভাবে ব্যবহারকারীকে এনটাইটেলমেন্ট প্রদান করতে পারবেন, ক্রয়ের একটি নির্ভরযোগ্য প্রক্রিয়া নিশ্চিত করে।
আপনি বর্তমানে এখানে সমর্থিত সব ধরনের RTDN সম্পর্কে আরও জানতে পারবেন। প্রতিটি ধরনের RTDN একটি স্বতন্ত্র ক্রয়ের অবস্থা নির্দেশ করে। আপনার ব্যবহারের ক্ষেত্রে প্রয়োজন অনুযায়ী যথাযথ প্রক্রিয়াকরণ নিশ্চিত করার জন্য সংশ্লিষ্ট হ্যান্ডলিং মেকানিজম বাস্তবায়ন করা অত্যন্ত গুরুত্বপূর্ণ। এই কোডল্যাবটি আপনাকে এমন একটি উদাহরণের মাধ্যমে নিয়ে যাবে যা আপনার সুরক্ষিত ব্যাকএন্ড সার্ভারে RTDN বার্তা পরিচালনা করে, যার মধ্যে বার্তাটি গ্রহণ করা, ক্রয়ের বৈধতা দেওয়া এবং সঠিক ব্যবহারকারীকে এনটাইটেলমেন্ট প্রদান করা, যখন কোনও ব্যবহারকারী সফলভাবে আপনার অ্যাপে একটি ক্রয় সম্পূর্ণ করেন। এবং পরবর্তী, আমরা আপনাকে দেখাব কিভাবে আপনার অ্যাপের জন্য RTDN কনফিগার করতে হয়।
3. রিয়েল-টাইম ডেভেলপার বিজ্ঞপ্তি কনফিগার করুন (RTDN)
রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDN) Google Cloud Pub/Sub-এর সাহায্যে আপনাকে ক্রয়ের অবস্থার পরিবর্তনগুলিতে অবিলম্বে প্রতিক্রিয়া জানাতে অনুমতি দেয়। ক্লাউড পাব/সাব হল একটি সম্পূর্ণ-পরিচালিত রিয়েল-টাইম মেসেজিং পরিষেবা যা আপনি স্বাধীন অ্যাপ্লিকেশনগুলির মধ্যে বার্তা পাঠাতে এবং গ্রহণ করতে ব্যবহার করতে পারেন। Google Play ক্লাউড পাব/সাব ব্যবহার করে আপনি যে বিষয়ে সাবস্ক্রাইব করেছেন সেই বিষয়ে পুশ বিজ্ঞপ্তি প্রকাশ করতে।
RTDN সক্ষম করতে, আপনাকে প্রথমে আপনার নিজের Google ক্লাউড প্ল্যাটফর্ম (GCP) প্রকল্প ব্যবহার করে Cloud Pub/Sub সেট আপ করতে হবে এবং তারপরে আপনার অ্যাপের জন্য বিজ্ঞপ্তিগুলি সক্ষম করতে হবে৷ আপনি যদি GCP এবং Cloud Pub/Sub-এর সাথে পরিচিত না হন, তাহলে Quickstart নির্দেশিকা দেখুন।
একটি বিষয় তৈরি করুন
বিজ্ঞপ্তিগুলি পাওয়া শুরু করতে, আপনাকে অবশ্যই একটি বিষয় তৈরি করতে হবে যেখানে Google Play বিজ্ঞপ্তিগুলি প্রকাশ করবে৷ একটি বিষয় তৈরি করতে, বিষয় তৈরি করুন -এ নির্দেশাবলী অনুসরণ করুন।
একটি পাব/সাবস্ক্রিপশন তৈরি করুন
একটি বিষয়ে প্রকাশিত বার্তাগুলি পেতে, আপনাকে অবশ্যই সেই বিষয়ে একটি পাব/সাবস্ক্রিপশন তৈরি করতে হবে। একটি পাব/সাবস্ক্রিপশন তৈরি করতে, নিম্নলিখিতগুলি করুন:
- পুশ সাবস্ক্রিপশন বা পুল সাবস্ক্রিপশন হিসাবে সাবস্ক্রিপশনকে কীভাবে কনফিগার করতে হয় তার সাথে নিজেকে পরিচিত করতে ক্লাউড পাব/সাবস্ক্রাইবার গাইড পড়ুন। এই কোডল্যাবে, আমরা একটি পুল সাবস্ক্রিপশন নিয়ে কাজ করব যার জন্য বার্তাগুলি পুনরুদ্ধার করার জন্য ক্লাউড পাব/সাব সার্ভারে অনুরোধগুলি শুরু করার জন্য আপনার নিরাপদ ব্যাকএন্ড সার্ভারের প্রয়োজন।
- সাবস্ক্রিপশন তৈরি করতে সাবস্ক্রিপশন যোগ করুন -এ নির্দেশাবলী অনুসরণ করুন।
আপনার বিষয়ে প্রকাশের অধিকার দিন
ক্লাউড পাব/সাবের জন্য প্রয়োজন যে আপনি আপনার বিষয়ে বিজ্ঞপ্তি প্রকাশ করার জন্য Google Play-এর বিশেষাধিকারগুলি মঞ্জুর করুন৷
- গুগল ক্লাউড কনসোল খুলুন।
- আপনার প্রকল্প নির্বাচন করুন, এবং তারপর অনুসন্ধান বারে " Pub/Sub" অনুসন্ধান করুন এবং Pub/Sub কনফিগারেশন পৃষ্ঠাতে নেভিগেট করুন।
- আপনার বিষয় খুঁজুন, এবং অনুমতি সেটিং খুলুন.
-
google-play-developer-notifications@system.gserviceaccount.com
পরিষেবা অ্যাকাউন্ট যোগ করতে প্রিন্সিপাল যোগ করুন-এ ক্লিক করুন এবং এটিকে Pub/Sub Publisher- এর ভূমিকা মঞ্জুর করুন। - টপিক সেট আপ সম্পূর্ণ করতে সংরক্ষণ ক্লিক করুন.
আপনার অ্যাপের জন্য RTDN সক্ষম করুন
আপনার Play বিলিং ইন্টিগ্রেশনকে উল্লেখযোগ্যভাবে উন্নত করতে রিয়েল-টাইম ডেভেলপার বিজ্ঞপ্তি (RTDN) সেট আপ করতে শিখুন। আপনি ব্যক্তিগতকৃত মেসেজিংয়ের মাধ্যমে ক্রয়ের নির্ভরযোগ্যতা উন্নত করতে পারেন এবং আপনার সামগ্রিক ROI উন্নত করতে জালিয়াতি ও অপব্যবহার রোধ করতে পারেন।
সাবস্ক্রিপশন পুনর্নবীকরণ, নতুন কেনাকাটা এবং অর্থপ্রদানের সমস্যাগুলির মতো গুরুত্বপূর্ণ ইভেন্টগুলির জন্য RTDNগুলি সরাসরি Google Play থেকে সার্ভার-টু-সার্ভার আপডেটগুলি সরবরাহ করে৷ তারা আপনার ব্যাকএন্ড সিস্টেমগুলিকে ব্যবহারকারীর এনটাইটেলমেন্টের প্রকৃত অবস্থার সাথে স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজ করতে সাহায্য করে, ক্লায়েন্ট-সাইড সীমাবদ্ধতা অতিক্রম করে এবং আপনাকে তাত্ক্ষণিকভাবে এবং যথাযথভাবে প্রতিক্রিয়া জানাতে সক্ষম করে।
কীভাবে আপনার অ্যাপের জন্য রিয়েল-টাইম বিকাশকারী বিজ্ঞপ্তিগুলি সক্ষম করবেন:
- Google Play Console খুলুন।
- আপনার অ্যাপ্লিকেশন নির্বাচন করুন.
- প্লে দিয়ে মনিটাইজ করুন > মনিটাইজেশন সেটআপে যান।
- রিয়েল-টাইম ডেভেলপার বিজ্ঞপ্তি বিভাগে স্ক্রোল করুন।
- রিয়েল-টাইম বিজ্ঞপ্তিগুলি সক্ষম করুন চেক করুন।
- বিষয়ের নাম ক্ষেত্রে, সম্পূর্ণ ক্লাউড পাব/সাব বিষয়ের নাম লিখুন যা আপনি আগে কনফিগার করেছেন। বিষয়ের নামটি প্রজেক্টের ফর্ম্যাটে হওয়া উচিত/{project_id}/topics/{topic_name} যেখানে project_id হল আপনার প্রোজেক্টের অনন্য শনাক্তকারী, এবং topic_name হল আগে তৈরি করা বিষয়ের নাম।
- একটি পরীক্ষা বার্তা পাঠাতে পরীক্ষা বার্তা পাঠান ক্লিক করুন. একটি পরীক্ষা প্রকাশ সম্পাদন করা নিশ্চিত করতে সাহায্য করে যে সবকিছু সঠিকভাবে সেট আপ এবং কনফিগার করা হয়েছে। পরীক্ষা প্রকাশ সফল হলে, পরীক্ষা প্রকাশ সফল হয়েছে বলে একটি বার্তা প্রদর্শিত হয়। আপনি যদি এই বিষয়ের জন্য একটি সাবস্ক্রিপশন সংযুক্ত করে থাকেন তবে আপনার পরীক্ষার বার্তা পাওয়া উচিত। পুল সাবস্ক্রিপশনের জন্য, ক্লাউড কনসোলে সাবস্ক্রিপশনে যান, বার্তা দেখুন ক্লিক করুন এবং বার্তাগুলি টানতে এগিয়ে যান। ক্লাউড পাব/সাবের দ্বারা বারবার ডেলিভারি এড়াতে আপনি যে কোনও বার্তা টেনেছেন তা স্বীকার করতে হবে। একটি পুশ সাবস্ক্রিপশনের জন্য, পরীক্ষা বার্তাটি আপনার পুশ এন্ডপয়েন্টে বিতরণ করা হয়েছে কিনা তা পরীক্ষা করুন। একটি সফল প্রতিক্রিয়া কোড স্বীকৃতির বার্তা হিসাবে কাজ করবে। প্রকাশ ব্যর্থ হলে, একটি ত্রুটি দেখানো হয়. নিশ্চিত করুন যে বিষয়ের নামটি সঠিক এবং
google-play-developer-notifications@system.gserviceaccount.com
পরিষেবা অ্যাকাউন্টে বিষয়টিতে Pub/Sub Publisher অ্যাক্সেস রয়েছে। - আপনি কোন ধরনের বিজ্ঞপ্তি পেতে চান তা বেছে নিন।
- সাবস্ক্রিপশন এবং সমস্ত বাতিল কেনাকাটার জন্য বিজ্ঞপ্তি পান - সাবস্ক্রিপশন এবং অকার্যকর কেনাকাটা সম্পর্কিত রিয়েল-টাইম বিকাশকারী বিজ্ঞপ্তিগুলি পান৷ আপনি এককালীন পণ্য ক্রয়ের জন্য বিজ্ঞপ্তি পাবেন না।
- সদস্যতা এবং এককালীন পণ্যগুলির জন্য সমস্ত বিজ্ঞপ্তি পান - সমস্ত সদস্যতা এবং অকার্যকর ক্রয় ইভেন্টগুলির জন্য বিজ্ঞপ্তিগুলি পান৷ আপনি
ONE_TIME_PRODUCT_PURCHASED
এবংONE_TIME_PRODUCT_CANCELED
এর মতো এক-কালীন পণ্য ক্রয়ের ইভেন্টগুলিও পাবেন। এই ক্রয় ইভেন্টগুলি সম্পর্কে আরও জানতে এক-কালীন ক্রয় জীবনচক্র দেখুন।
- পরিবর্তনগুলি সংরক্ষণ করুন ক্লিক করুন।
এখন আপনি আপনার অ্যাপের জন্য রিয়েল-টাইম ডেভেলপার বিজ্ঞপ্তিগুলি সম্পূর্ণ করেছেন, আপনাকে সাধারণ চ্যালেঞ্জগুলি মোকাবেলা করার জন্য সরঞ্জামগুলি প্রদান করে, যেমন ব্যবহারকারীর উইন-ব্যাক মেসেজিং বা জালিয়াতি এবং অপব্যবহারের মাধ্যমে। পরবর্তী বিভাগে, আমরা আপনার ক্লাউড পাব/সাব বিষয়ে প্রেরিত বার্তাগুলি ব্যবহার করার জন্য আপনার সুরক্ষিত ব্যাকএন্ড সার্ভারে একটি গ্রাহক তৈরি করব।
4. বিজ্ঞপ্তি পান
আপনার অ্যাপে সেরা ব্যবহারকারীর অভিজ্ঞতার জন্য কেনাকাটার স্থিতিতে আপনার ব্যাকএন্ড সার্ভারকে আপ-টু-ডেট রাখা গুরুত্বপূর্ণ। উদাহরণস্বরূপ, যখন কোনও ব্যবহারকারী সফলভাবে অ্যাপে অর্থপ্রদানের মাধ্যমে একটি ক্রয় সম্পূর্ণ করেন, তখন তাদের যত তাড়াতাড়ি সম্ভব তাদের অ্যাকাউন্টে সামগ্রী বিতরণ করা উচিত।
এটি একটি সময়মত পদ্ধতিতে সনাক্ত এবং প্রক্রিয়া করা ক্রয় সম্পূর্ণ করা প্রয়োজন. প্লে বিলিং লাইব্রেরি আপনার অ্যাপে কেনাকাটা শনাক্ত করার একাধিক উপায় প্রদান করে। একটি সম্পূর্ণ কেনাকাটা শনাক্ত করার পরে, ক্রয়টি যাচাই করার জন্য আপনার অ্যাপটিকে অবশ্যই আপনার ব্যাকএন্ড সার্ভারকে অবহিত করতে হবে, সঠিক ব্যবহারকারীকে সামগ্রী মঞ্জুর করতে হবে এবং তারপরে ক্রয়টি প্রক্রিয়া করা হয়েছে বলে Googleকে জানাতে হবে। যাইহোক, এটা ঘটতে পারে যে আপনার অ্যাপ বিভিন্ন কারণে সময়মতো কেনাকাটা শনাক্ত করতে পারেনি। উদাহরণস্বরূপ, একজন ব্যবহারকারী একটি সফল ক্রয় করতে পারে এবং Google থেকে নিশ্চিতকরণ পেতে পারে, কিন্তু তাদের ডিভাইসটি তাদের ডিভাইসের আগে নেটওয়ার্ক সংযোগ হারিয়ে ফেলে এবং আপনার অ্যাপ প্লে বিলিং লাইব্রেরি ইন্টারফেসের মাধ্যমে বিজ্ঞপ্তি পায়। ব্যবহারকারীর ক্লায়েন্টের সমস্যা থাকলেও কেনাকাটা পরিচালনা করতে আপনাকে সাহায্য করার জন্য RTDN অতিরিক্ত সার্ভার সাইড নিয়ন্ত্রণ প্রদান করে। RTDN ক্রয়ের স্থিতি পরিবর্তনের পরে আপনার সার্ভারে স্বাধীন বিজ্ঞপ্তির গ্যারান্টি দেয়, ক্রয়ের একটি আরও নির্ভরযোগ্য প্রক্রিয়া নিশ্চিত করে, সম্ভাব্য ক্লায়েন্ট সমস্যাগুলি থেকে স্বাধীনভাবে একটি দ্বিতীয় পথের মাধ্যমে প্রায় অবিলম্বে ক্রয়ের স্থিতি পরিবর্তনগুলি সনাক্ত করতে দেয়।
এই বিভাগে আপনি ক্লাউড পাব/সাব ক্লায়েন্ট লাইব্রেরি ব্যবহার করে আপনার ক্লাউড পাব/সাব বিষয়ে প্রেরিত বার্তাগুলি ব্যবহার করার জন্য একজন গ্রাহক তৈরি করবেন। এই লাইব্রেরিগুলো বিভিন্ন ভাষায় পাওয়া যায়। নিম্নলিখিত বিভাগে, আমরা ক্রয় যাচাই করতে গ্রাহকদের যোগ করব, সঠিক ব্যবহারকারীকে এনটাইটেলমেন্ট প্রদান করব এবং সার্ভারে ক্রয় স্বীকার/ব্যবহার করব। এই কোডল্যাবের জন্য, আমরা জাভা ব্যবহার করছি।
একটি ক্লাউড পাব/সাব বিষয়ে করা প্রতিটি প্রকাশে একটি একক বেস64-এনকোডেড ডেটা ক্ষেত্র থাকে।
{
"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 বার্তাগুলি প্রক্রিয়া করার সেরা অনুশীলনগুলি কভার করব৷
5. আপনার অ্যাপে ক্রয় প্রবাহে ব্যবহারকারী শনাক্তকারী সংযুক্ত করুন
যখন আপনার সার্ভার ক্রয় অবস্থা আপডেট সম্পর্কে RTDN বার্তা পায়, তখন আপনার সার্ভারকে জানতে হবে কোন ব্যবহারকারী এটি প্রক্রিয়া করার জন্য ক্রয় করেছে, যেমন সঠিক ব্যবহারকারীর কাছে সামগ্রী সরবরাহ করা। আপনার অ্যাপে ক্রয় প্রবাহ চালু করার সময় অস্পষ্ট অ্যাকাউন্ট আইডি ব্যবহার করে ক্রয় করা ব্যবহারকারীর জন্য আপনার কাছে থাকা যেকোনো ব্যবহারকারী শনাক্তকারী সংযুক্ত করে আপনি এটি অর্জন করতে পারেন। একটি উদাহরণ শনাক্তকারী আপনার সিস্টেমে ব্যবহারকারীর লগইন এর একটি অস্পষ্ট সংস্করণ হতে পারে। এই প্যারামিটার সেট করা Google কে জালিয়াতি সনাক্ত করতে সাহায্য করতে পারে৷ অতিরিক্তভাবে, এটি আপনাকে নিশ্চিত করতে সাহায্য করতে পারে যে ক্রয়গুলি সঠিক ব্যবহারকারীর কাছে দায়ী করা হয়েছে যেমন ব্যবহারকারীদের এনটাইটেলমেন্ট দেওয়ার ক্ষেত্রে আলোচনা করা হয়েছে৷
অস্পষ্ট অ্যাকাউন্ট আইডি সেট করে অ্যাপে ক্রয় প্রবাহ চালু করার সময় ব্যবহারকারী শনাক্তকারীকে সংযুক্ত করার জন্য নিম্নলিখিত নমুনা কোডগুলি দেখায়।
// 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);
আপনি পরবর্তী বিভাগে দেখতে পাবেন, ক্রয় প্রবাহে সেট করা ব্যবহারকারী শনাক্তকারীকে ক্রয়ের মধ্যে অন্তর্ভুক্ত করা হবে এবং সঠিক ব্যবহারকারীকে এনটাইটেলমেন্ট দিতে ব্যবহার করা যেতে পারে।
6. এনটাইটেলমেন্ট দেওয়ার আগে ক্রয় যাচাই করুন
এই বিভাগে, আমরা আপনার সুরক্ষিত ব্যাকএন্ড সার্ভারে এনটাইটেলমেন্ট দেওয়ার আগে কেনাকাটা যাচাই করার সর্বোত্তম অনুশীলনগুলি নিয়ে যাব।
একজন ব্যবহারকারী একবারের পণ্য ক্রয় করার পরে, আপনার সুরক্ষিত ব্যাকএন্ড সার্ভারে পাব/সাবস্ক্রাইবার একটি পাব/সাব বার্তা পাবেন। আপনার ব্যাকএন্ড সার্ভারে আপনাকে নিম্নলিখিতগুলি করতে হবে:
- Pub/Sub বার্তা থেকে
purchaseToken
পার্স করুন। সমস্ত ক্রয়ের জন্য আপনাকে সমস্তpurchaseToken
মানগুলির একটি রেকর্ড বজায় রাখতে হবে। - যাচাই করুন যে বর্তমান ক্রয়ের জন্য
purchaseToken
মান পূর্ববর্তী কোনpurchaseToken
মানগুলির সাথে মেলে না৷purchaseToken
বিশ্বব্যাপী অনন্য, তাই আপনি নিরাপদে এই মানটিকে আপনার ডাটাবেসের প্রাথমিক কী হিসাবে ব্যবহার করতে পারেন। - purchases.products ব্যবহার করুন: ক্রয়টি বৈধ কিনা তা Google-এর সাথে যাচাই করতে Google Play Developer API-এ শেষ পয়েন্ট পান ৷
- যদি ক্রয় বৈধ হয় এবং অতীতে ব্যবহার করা না হয়, তাহলে আপনি নিরাপদে অ্যাপ-মধ্যস্থ আইটেম বা সদস্যতার এনটাইটেলমেন্ট দিতে পারেন।
- ক্রয় অবস্থা
PURCHASED
হলেই আপনার এনটাইটেলমেন্ট মঞ্জুর করা উচিত এবংPENDING
ক্রয়গুলি সঠিকভাবে পরিচালনা করা নিশ্চিত করুন৷ আপনি মুলতুবি লেনদেন পরিচালনা করতে আরও তথ্য পেতে পারেন।
নিম্নলিখিত কোড উদাহরণ Google Play বিকাশকারী 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
এ, Purchases.products থেকে পণ্য কেনাকাটা আনতে নিম্নলিখিত পদ্ধতি যোগ করুন: Google Play Developer API-এ শেষ পয়েন্ট পান ।
/* 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();
}
7. Google কে অবহিত করুন যে ক্রয় প্রক্রিয়া করা হয়েছে৷
এনটাইটেলমেন্ট মঞ্জুর করার পরে, আপনার Google-কে জানানো উচিত যে কেনাকাটা প্রক্রিয়া করা হয়েছে.
AndroidPublisherHelper
এ, Google Play Developer API-এ purchases.products:consume বা purchases.products:স্বীকার করতে কল করার জন্য নিম্নলিখিত পদ্ধতিগুলি যোগ করুন।
/* 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-কে জানায় যে ব্যবহারকারীকে ক্রয়ের জন্য এনটাইটেলমেন্ট দেওয়া হয়েছে। এনটাইটেলমেন্ট দেওয়ার পর অবিলম্বে আপনাকে ক্রয় স্বীকার করতে হবে।
দারুণ কাজ! আপনি সফলভাবে রিয়েল-টাইম বিকাশকারী বিজ্ঞপ্তিগুলির সাথে একত্রিত হয়েছেন, এই কোডল্যাবে প্রদর্শিত হিসাবে নির্ভরযোগ্য ক্রয় প্রক্রিয়াকরণ সক্ষম করে৷ এখন, সবকিছু নিখুঁতভাবে কাজ করছে তা নিশ্চিত করতে, আসুন প্লে বিলিং ল্যাব অন্বেষণ করি, একটি ব্যবহারকারী-বান্ধব টুল যা আপনার প্লে বিলিং ইন্টিগ্রেশন পরীক্ষা করতে সাহায্য করার জন্য ডিজাইন করা হয়েছে৷
8. প্লে বিলিং ল্যাব দিয়ে পরীক্ষা করুন
আত্মবিশ্বাসের সাথে লঞ্চ করার জন্য, আপনার উন্নয়ন জুড়ে আপনার ইন্টিগ্রেশন পরীক্ষা করা উচিত। প্লে বিলিং ল্যাব হল একটি বিনামূল্যের অ্যান্ড্রয়েড অ্যাপ যা ডেভেলপারদের Google Play-এর বিলিং সিস্টেমের সাথে তাদের ইন্টিগ্রেশন পরীক্ষা করতে সাহায্য করে, যা ডেভেলপারদের প্লে বিলিং বৈশিষ্ট্যগুলি পরীক্ষা করার, দ্রুত সংহত করতে এবং উচ্চ আত্মবিশ্বাসের সাথে লঞ্চ করার একটি সহজ এবং সুবিধাজনক উপায় প্রদান করে৷
প্লে বিলিং ল্যাব বিভিন্ন পরিস্থিতিতে পরীক্ষা করতে সাহায্য করার জন্য বিভিন্ন পরীক্ষার বৈশিষ্ট্য অফার করে, যার মধ্যে রয়েছে:
- Play বিলিং ল্যাবের মধ্যে থেকে Play কান্ট্রি পরিবর্তন করুন এবং আপনার পরীক্ষায় সেটিংস প্রয়োগ করুন। এটি বিভিন্ন দেশ/অঞ্চলে কাস্টম ব্যবহারকারী-অভিজ্ঞতা পরীক্ষা করতে সক্ষম করে তা নির্বিশেষে যেখানে পরীক্ষক শারীরিকভাবে পরীক্ষা করছেন
- একই অ্যাকাউন্টের সাথে বারবার টেস্ট ট্রায়াল বা প্রাথমিক অফার
- অন্যান্য সক্রিয় গ্রাহকদের প্রভাবিত না করে সাবস্ক্রিপশন মূল্য পরিবর্তন পরীক্ষা করুন
- বিভিন্ন ত্রুটির পরিস্থিতিতে পরীক্ষা করতে প্লে বিলিং লাইব্রেরি প্রতিক্রিয়া কোড অনুকরণ করুন
- পরীক্ষার গতি বাড়াতে সাবস্ক্রিপশন পুনর্নবীকরণ ত্বরান্বিত করুন
- নির্দিষ্ট ক্রয় প্রবাহ ঝুঁকি সংকেত বাইপাস করতে বাস্তব অর্থপ্রদানের পদ্ধতির সাথে পরীক্ষা করুন
আমরা ক্রমাগত প্লে বিলিং ল্যাব অ্যাপে নতুন পরীক্ষার ক্ষমতা যোগ করছি। আপনি প্লে স্টোর থেকে প্লে বিলিং ল্যাব ডাউনলোড এবং ইনস্টল করতে পারেন বা প্লে বিলিং ল্যাবের সাথে পরীক্ষা করার বিষয়ে আরও তথ্যের জন্য আপনার ইন্টিগ্রেশন পরীক্ষা করে দেখুন৷
BillingResponseCode পরীক্ষা করতে Play Billing Lab ব্যবহার করুন
প্লে বিলিং লাইব্রেরির সাথে আপনার অ্যাপকে সংহত করার সময় সমস্ত BillingResponseCode ফ্লো পরীক্ষা করা একটি সাধারণ চ্যালেঞ্জ, কারণ Play Store এবং Play এর ব্যাকএন্ডের মধ্যে যোগাযোগের উপর আপনার খুব বেশি নিয়ন্ত্রণ নেই৷ প্লে বিলিং ল্যাব অ্যাপের রেসপন্স সিমুলেটর বৈশিষ্ট্যটি আপনাকে বিভিন্ন জটিল ত্রুটি পরিস্থিতি পরীক্ষা করার জন্য প্লে বিলিং লাইব্রেরির জন্য ত্রুটি কোড প্রতিক্রিয়া কনফিগার করতে দেয়।
উদাহরণস্বরূপ, আপনার অ্যাপ সফল কেনাকাটা শনাক্ত করার পরে আপনি ক্রয়টি গ্রহণ করার জন্য আপনার অ্যাপে যুক্তি প্রয়োগ করেছেন। আপনি পরিস্থিতিটি পরীক্ষা করতে চান যে নেটওয়ার্ক ব্যর্থতার কারণে আপনার অ্যাপ ক্রয় করতে ব্যর্থ হয়েছে এবং আপনার ব্যাকএন্ড সার্ভারে RTDN রিসিভার বার্তাটি গ্রহণ করে এবং সঠিকভাবে ক্রয় পরিচালনা করে। আপনি আপনার পরীক্ষার জন্য দৃশ্যকল্প অনুকরণ করতে প্রতিক্রিয়া সিমুলেটর লিভারেজ করতে পারেন। প্লে বিলিং ল্যাব রেসপন্স সিমুলেটর দিয়ে পরীক্ষা করার জন্য নিম্নলিখিত ধাপগুলি আপনাকে গাইড করবে।
রেসপন্স সিমুলেটর দিয়ে পরীক্ষা করুন
রেসপন্স সিমুলেটর দিয়ে পরীক্ষা করার সময়, আপনার অ্যাপ প্লে বিলিং ল্যাব রেসপন্স সিমুলেটরে কনফিগার করা রেসপন্স কোড পেতে প্লে বিলিং ল্যাবের সাথে যোগাযোগ করবে।
প্লে বিলিং লাইব্রেরির জন্য বিলিং ওভাররাইড টেস্টিং সক্ষম করুন
রেসপন্স সিমুলেটর এবং আপনার অ্যাপের মধ্যে যোগাযোগ সক্ষম করতে, আপনাকে প্রথমে আপনার অ্যাপের মধ্যে থেকে প্লে বিলিং লাইব্রেরির জন্য বিলিং ওভাররাইড টেস্টিং সক্ষম করতে হবে। এটি করতে, আপনার অ্যাপের 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
ফাইল দিয়ে আপনার অ্যাপ তৈরি করুন। এখন, আপনার অ্যাপ প্লে বিলিং ল্যাব রেসপন্স সিমুলেটরের জন্য প্রস্তুত।
পরীক্ষার পর যখন আপনি আপনার অ্যাপটিকে প্রোডাকশন এনভায়রনমেন্টে স্থাপন করেন, তখন আপনার হয় একটি আলাদা AndroidManifest.xml
ফাইল ব্যবহার করা উচিত যাতে এই মেটাডেটা ট্যাগগুলি অন্তর্ভুক্ত নয় অথবা আপনি AndroidManifest.xml
ফাইল থেকে এই ট্যাগগুলি সরিয়ে ফেলেছেন তা নিশ্চিত করুন৷
প্লে বিলিং লাইব্রেরি ত্রুটিগুলি অনুকরণ করুন৷
সিমুলেটেড প্লে বিলিং লাইব্রেরি ত্রুটিগুলি পরীক্ষা করতে, প্রথমে প্লে বিলিং ল্যাব অ্যাপে প্রতিক্রিয়া কোডটি কনফিগার করুন, তারপর আপনার অ্যাপে পরীক্ষাটি করুন৷
একটি প্রতিক্রিয়া কোড কনফিগার করুন
- আপনার অ্যাপের লাইসেন্স পরীক্ষক অ্যাকাউন্ট দিয়ে Play বিলিং ল্যাব অ্যাপে সাইন ইন করুন। নিচের ছবিটি রেসপন্স সিমুলেটর কার্ড সহ প্লে বিলিং ল্যাব ড্যাশবোর্ড প্রদর্শন করে।
- রেসপন্স সিমুলেটর স্ক্রিনে নেভিগেট করতে রেসপন্স সিমুলেটর কার্ডে ম্যানেজ এ ক্লিক করুন।
- অনুরোধ করা হলে, আপনার অ্যাপের সংযোগের স্থিতি দেখতে Play বিলিং ল্যাব থেকে বিজ্ঞপ্তিগুলিকে অনুমতি দিন।
- সিমুলেট প্লে বিলিং লাইব্রেরি প্রতিক্রিয়া সুইচ সক্ষম করুন, যদি এটি ইতিমধ্যে সক্ষম না থাকে।
- প্লে বিলিং লাইব্রেরি APIগুলির জন্য একটি প্রতিক্রিয়া কোড নির্বাচন করুন যা আপনি পরীক্ষা করতে চান৷ ভোক্তা ক্রয়ের জন্য ত্রুটি অনুকরণ করতে,
consumeAsync
api-এর জন্য একটি ত্রুটি কোড নির্বাচন করুন৷ আপনার নির্বাচন স্বয়ংক্রিয়ভাবে সংরক্ষিত হয়. এখন রেসপন্স সিমুলেটর আপনার অ্যাপে নির্বাচিত রেসপন্স কোড পাঠাতে প্রস্তুত।
আপনার অ্যাপ পরীক্ষা করুন
কনফিগার করা ত্রুটির পরিস্থিতিতে সবকিছু প্রত্যাশিতভাবে কাজ করে কিনা তা যাচাই করতে আপনি এখন আপনার অ্যাপটি পরীক্ষা করতে পারেন। আপনার অ্যাপ খুলুন এবং প্লে বিলিং লাইব্রেরি API পদ্ধতি ট্রিগার করুন। যদি আপনার অ্যাপটি কেনাকাটা করার জন্য consumeAsync
কল করে, তাহলে আপনার অ্যাপটি আপনার কনফিগার করা ত্রুটি কোডটি পাবে। ত্রুটি কোডের উপর আপনার অ্যাপ সঠিকভাবে কাজ করছে কিনা এবং আপনার ব্যাকএন্ড সার্ভার ক্রয়টি সঠিকভাবে প্রক্রিয়া করছে কিনা তা আপনি যাচাই করতে পারেন।
আপনি আপনার পরীক্ষা শেষ করার পরে, প্রতিক্রিয়া অনুকরণ করা বন্ধ করতে শুধু সিমুলেট প্লে বিলিং লাইব্রেরি প্রতিক্রিয়া সুইচটি বন্ধ করুন৷
প্লে বিলিং ল্যাবের মাধ্যমে পরীক্ষা করার বিষয়ে আরও জানুন, অথবা লাইসেন্স পরীক্ষকদের সাথে অ্যাপ-মধ্যস্থ বিলিং পরীক্ষা করার বিষয়ে আরও জানতে সহায়তা কেন্দ্রে যান।
9. অভিনন্দন!
আপনি এই কোডল্যাবটি শেষ করেছেন এবং এখন ব্যবহারকারীর সন্তুষ্টি, ক্রয় রূপান্তর এবং গ্রাহক মন্থনের উন্নতির জন্য আপনার ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে আপনার অ্যাপ নগদীকরণকে কৌশলগতভাবে অপ্টিমাইজ করতে সজ্জিত৷
রিয়েল-টাইম ডেভেলপার নোটিফিকেশন এবং প্লে বিলিং ল্যাব কম্প্যানিয়ন অ্যাপ ব্যবহার করে, আপনি এককালীন কেনাকাটা এবং সদস্যতা উভয়ের জন্য ক্রয়ের জীবনচক্র ইভেন্টগুলিকে সক্রিয়ভাবে সম্বোধন করতে পারেন৷
এই টুলগুলির সাহায্যে, আপনি কার্যকরভাবে আকর্ষক জয়-ব্যাক কৌশলগুলি বাস্তবায়ন করতে পারেন, একীকরণের চ্যালেঞ্জগুলি দ্রুত সমাধান করতে পারেন এবং শেষ পর্যন্ত আত্মবিশ্বাসের সাথে আপনার অ্যাপ বা গেমটি চালু করার জন্য ব্যবহারকারীর অভিজ্ঞতা এবং আয়ের স্ট্রিমগুলিকে উন্নত করতে পারেন৷
এই কোডল্যাবটি সম্পূর্ণ করার মাধ্যমে, আপনি এখন সম্পূর্ণ ক্রয়ের যাত্রা পরিচালনা করার দক্ষতা অর্জন করেছেন এবং প্লে বিলিং ল্যাবের সাথে আপনার বাস্তবায়নকে কঠোরভাবে পরীক্ষা করতে পারেন, একটি নিরবচ্ছিন্ন ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করে এবং Google Play-তে আপনার নগদীকরণের সম্ভাবনাকে সর্বাধিক করে তোলে৷