সদস্যতা সম্পর্কে

এই বিষয়টি বর্ণনা করে যে কীভাবে সাবস্ক্রিপশন লাইফসাইকেল ইভেন্টগুলি পরিচালনা করতে হয়, যেমন পুনর্নবীকরণ এবং মেয়াদ শেষ। এটি অতিরিক্ত সাবস্ক্রিপশন বৈশিষ্ট্যও বর্ণনা করে যেমন প্রচার অফার করা এবং আপনার ব্যবহারকারীদের তাদের নিজস্ব সদস্যতা পরিচালনা করার অনুমতি দেওয়া।

আপনি যদি আপনার অ্যাপের জন্য সাবস্ক্রিপশন পণ্য কনফিগার না করে থাকেন, তাহলে আপনার পণ্য তৈরি করুন এবং কনফিগার করুন দেখুন।

সদস্যতা ওভারভিউ

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

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

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

সাবস্ক্রিপশন পণ্য, বেস প্ল্যান এবং অফারগুলির বিশদ বিবরণের জন্য, Play Console সহায়তা কেন্দ্রে ডকুমেন্টেশন দেখুন।

প্রিপেইড প্ল্যান ইন্টিগ্রেশন

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

টপ-আপের জন্য, বিলিং ফ্লো চালু করুন যেভাবে আপনি আসল কেনাকাটা করেন। আপনাকে নির্দেশ করার দরকার নেই যে একটি ক্রয় একটি টপ-আপ।

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

একটি টপ-আপের পরে, Purchase ফলাফল অবজেক্টের নিম্নলিখিত ক্ষেত্রগুলি সাম্প্রতিক টপ-আপ ক্রয় প্রতিফলিত করতে আপডেট করা হয়:

  • অর্ডার আইডি
  • ক্রয় সময়
  • স্বাক্ষর
  • টোকেন ক্রয় করুন
  • স্বীকৃত

নিম্নলিখিত Purchase ক্ষেত্রগুলিতে সর্বদা মূল কেনাকাটায় পাওয়া একই ডেটা থাকে:

  • প্যাকেজের নাম
  • ক্রয় অবস্থা
  • পণ্য
  • স্বয়ংক্রিয় পুনর্নবীকরণ

প্রিপেইড ক্রয় স্বীকৃতি

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

সংক্ষিপ্ত প্রিপেইড প্ল্যানের সময়কালের সম্ভাবনার কারণে, যত তাড়াতাড়ি সম্ভব ক্রয়টি স্বীকার করা গুরুত্বপূর্ণ।

এক সপ্তাহ বা তার বেশি সময়কালের প্রিপেইড প্ল্যানগুলি অবশ্যই তিন দিনের মধ্যে স্বীকার করতে হবে৷

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

কিস্তি সাবস্ক্রিপশন ইন্টিগ্রেশন

একটি কিস্তি সাবস্ক্রিপশন হল এক ধরনের সাবস্ক্রিপশন যেখানে ব্যবহারকারীরা পুরো সাবস্ক্রিপশন ফি আগেই পরিশোধ না করে নির্দিষ্ট সময়ের মধ্যে একাধিক কিস্তিতে সাবস্ক্রিপশনের জন্য অর্থ প্রদান করে।

কিস্তি সাবস্ক্রিপশনের জন্য অতিরিক্ত বিবেচনা:

  • দেশের প্রাপ্যতা : কিস্তির সদস্যতা বৈশিষ্ট্য শুধুমাত্র ব্রাজিল, ফ্রান্স, ইতালি এবং স্পেনে উপলব্ধ (সর্বশেষ উপলব্ধতার জন্য কনসোল দেখুন)।
  • মূল্য নির্ধারণ করা : কনসোলে একটি কিস্তি সাবস্ক্রিপশনের জন্য মূল্য নির্ধারণ করার সময়, মূল্যটি মাসিক অর্থপ্রদানের পরিমাণকে প্রতিনিধিত্ব করে। এটি, সেট করা প্রতিশ্রুতি সময়ের সাথে মিলিত, ক্রয় স্ক্রিনে সদস্যতার জন্য মোট পরিমাণ তৈরি করে।
  • প্রতিশ্রুতির সময়কাল : প্রাথমিক সদস্যতা প্রতিশ্রুতির মোট সময়কাল, যার সময় মাসিক অর্থপ্রদান প্রয়োজন। উদাহরণস্বরূপ, যদি একটি বেস প্ল্যানের 15-মাসের প্রতিশ্রুতি সময়কাল থাকে, তাহলে ব্যবহারকারী এই সময়ের মধ্যে 15টি মাসিক অর্থপ্রদান করবেন।
  • পুনর্নবীকরণ : কিস্তি সাবস্ক্রিপশনের পরিপ্রেক্ষিতে, "নবায়ন" একটি প্রতিশ্রুতি সময়ের সমাপ্তি বোঝায়, হয় প্রাথমিক অঙ্গীকারের সময়কাল বা পরবর্তী অঙ্গীকারের সময়কাল। প্রাথমিক সাইন আপের পরে, প্রথম পুনর্নবীকরণটি সম্পূর্ণ প্রাথমিক অঙ্গীকারের মেয়াদ শেষ হওয়ার পরে ঘটে। পরবর্তী পুনর্নবীকরণগুলি পরবর্তী প্রতিটি প্রতিশ্রুতির সময়কাল পূর্ণ হওয়ার পরে ঘটে। কিস্তি সাবস্ক্রিপশনের জন্য পুনর্নবীকরণের ধরনগুলি "মাসিক স্বয়ংক্রিয়ভাবে পুনর্নবীকরণ" বা "একই সময়কালের জন্য স্বয়ংক্রিয় পুনর্নবীকরণ" হতে পারে। "মাসিক স্বয়ংক্রিয় পুনর্নবীকরণ" এর জন্য, পরবর্তী কোনো প্রতিশ্রুতি নেই এবং পরিকল্পনাটি একটি মাসিক সাবস্ক্রিপশনের মতো আচরণ করে যেখানে প্রতিটি মাসিক সাবস্ক্রিপশন চার্জ একটি পুনর্নবীকরণ গঠন করে।
  • বিলিং সময়কাল : কিস্তি সাবস্ক্রিপশনের পরিপ্রেক্ষিতে, এটি পুনরাবৃত্ত ব্যবধানকে বোঝায় যেখানে পৃথক অর্থ প্রদান করা হয়, যেমন বেস প্ল্যানে উল্লেখ করা হয়েছে।
  • পরিকল্পনা পরিবর্তন বনাম মূল্য পরিবর্তন আচরণ : মূল্য পরিবর্তন এবং বাতিলকরণের জন্য, প্রতিশ্রুতি দৃঢ়। এর মানে হল যে যদি একজন ব্যবহারকারী বাতিল করতে চান বা একজন বিকাশকারী মূল্য পরিবর্তন করতে চান, তবে পরিবর্তনটি একটি প্রতিশ্রুতি সময়ের শেষে কার্যকর হয়। পরিকল্পনা পরিবর্তনের জন্য, প্রতিশ্রুতি দৃঢ় নয়। এর অর্থ হল প্ল্যান পরিবর্তনের জন্য একটি প্রতিশ্রুতি সময়ের শেষ না হওয়া পর্যন্ত অপেক্ষা করতে হবে না, এটি হয় অবিলম্বে বা সেট প্রতিস্থাপন মোডের উপর ভিত্তি করে পরবর্তী অর্থপ্রদানের তারিখে কার্যকর হয়৷
  • একই-সাবস্ক্রিপশন প্ল্যান পরিবর্তন : একটি কিস্তি বেস প্ল্যান থেকে একই সাবস্ক্রিপশন পণ্যের নন-ইনস্টলমেন্ট বেস প্ল্যানে প্ল্যান পরিবর্তন অনুমোদিত নয়।
  • রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDNs) : প্রতিশ্রুতিবদ্ধ সময়ের জন্য পেমেন্ট বাকি থাকলে ব্যবহারকারীর সূচনা বাতিল হওয়ার সাথে সাথে একটি SUBSCRIPTION_CANCELLATION_SCHEDULED RTDN পাঠানো হয়। বাতিলকরণ মুলতুবি আছে এবং শুধুমাত্র প্রতিশ্রুতি সময়ের শেষে কার্যকর হবে। তারপর, ব্যবহারকারীর দ্বারা পুনরুদ্ধার না করা হলে, SUBSCRIPTION_CANCELED এবং SUBSCRIPTION_EXPIRED RTDNগুলি প্রতিশ্রুতি সময়ের শেষে পাঠানো হয়৷

  • অর্থপ্রদান / রাজস্ব আদায় : ব্যবহারকারীরা তাদের মাসিক অর্থপ্রদান করার সাথে সাথে বিকাশকারীর অর্থ প্রদান ঘটবে, অন্যান্য সকল সদস্যতার মতো একই শর্তাবলী সাপেক্ষে। যখন ব্যবহারকারী কিস্তি সাবস্ক্রিপশনের জন্য সাইন আপ করেন তখন বিকাশকারীদের অগ্রিম অর্থ প্রদান করা হয় না।

  • মিসড পেমেন্ট কালেকশন : যদি কোনো ব্যবহারকারী কোনো কিস্তি সাবস্ক্রিপশন পেমেন্ট করতে ব্যর্থ হয়, তাহলে Google বা ডেভেলপার কেউই ব্যবহারকারীর কাছ থেকে এই ধরনের কোনো মিস করা বা বকেয়া পেমেন্ট সংগ্রহ করার চেষ্টা করবে না, তবে Google তার স্বাভাবিক পেমেন্টের পুনঃপ্রচেষ্টার অনুশীলন অনুসারে যেকোনো প্রযোজ্য গ্রেস পিরিয়ড বা অ্যাকাউন্ট হোল্ডের সময়কালে পেমেন্টের জন্য পর্যায়ক্রমে পুনরায় চেষ্টা করতে পারে। Google বিকাশকারীর কাছে কোনো অবশিষ্ট অবৈতনিক কিস্তির অর্থপ্রদানের জন্য দায়ী থাকবে না।

  • প্লে বিলিং লাইব্রেরি প্রাপ্যতা : installmentDetails ক্ষেত্রটি শুধুমাত্র PBL 7 বা তার পরে উপলব্ধ। PBL 5 এবং পরবর্তীতে, queryProductDetails() ব্যবহার করে কিস্তির সাবস্ক্রিপশন ফেরত দেওয়া হয়, কিন্তু সাবস্ক্রিপশনে প্ল্যানের প্রতিশ্রুতিবদ্ধ পেমেন্ট গণনার মতো বিস্তারিত কিস্তির তথ্য অন্তর্ভুক্ত করা হবে না।

ব্যবহারকারীদের একটি সদস্যতা পরিচালনা করার অনুমতি দিতে গভীর লিঙ্ক ব্যবহার করুন৷

আপনার অ্যাপটিতে সেটিংস বা পছন্দের স্ক্রিনে একটি লিঙ্ক অন্তর্ভুক্ত করা উচিত যা ব্যবহারকারীদের তাদের সদস্যতাগুলি পরিচালনা করতে দেয়, যা আপনি আপনার অ্যাপের স্বাভাবিক চেহারা এবং অনুভূতিতে অন্তর্ভুক্ত করতে পারেন।

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

ব্যবহারকারীদের সেই পৃষ্ঠায় নির্দেশিত করতে নিম্নলিখিত URLটি ব্যবহার করুন যা তাদের সমস্ত সদস্যতা দেখায়, যেমন চিত্র 1 এবং 2 এ দেখানো হয়েছে:

https://play.google.com/store/account/subscriptions
প্লে স্টোর সাবস্ক্রিপশন স্ক্রিন ব্যবহারকারীর সমস্ত Google Play-বিল সাবস্ক্রিপশনের স্থিতি দেখায়।
চিত্র 1. প্লে স্টোর সাবস্ক্রিপশন স্ক্রীন ব্যবহারকারীর সমস্ত Google Play-বিল সাবস্ক্রিপশনের অবস্থা দেখায়।


অতিরিক্ত বিবরণ দেখতে একটি সদস্যতা আলতো চাপুন.
চিত্র 2. অতিরিক্ত বিবরণ দেখতে একটি সাবস্ক্রিপশনে আলতো চাপুন৷

এই গভীর লিঙ্কটি একজন ব্যবহারকারীকে প্লে স্টোর সাবস্ক্রিপশন সেন্টার থেকে বাতিল করা সাবস্ক্রিপশন পুনরুদ্ধার করতে সাহায্য করতে কার্যকর হতে পারে।

মেয়াদোত্তীর্ণ সাবস্ক্রিপশনের জন্য সরাসরি ব্যবস্থাপনা পৃষ্ঠার সাথে লিঙ্ক করতে, কেনা সাবস্ক্রিপশনের সাথে যুক্ত প্যাকেজের নাম এবং productId নির্দেশ করুন। একটি বিদ্যমান সাবস্ক্রিপশনের জন্য productId প্রোগ্রাম্যাটিকভাবে নির্ধারণ করতে, আপনার অ্যাপের ব্যাকএন্ড জিজ্ঞাসা করুন বা একটি নির্দিষ্ট ব্যবহারকারীর সাথে যুক্ত সদস্যতার তালিকার জন্য BillingClient.queryPurchasesAsync() এ কল করুন। প্রতিটি সাবস্ক্রিপশনে সাবস্ক্রিপশন স্ট্যাটাসের তথ্যের অংশ হিসেবে সংশ্লিষ্ট productId থাকে। সাবস্ক্রিপশন ক্রয়ের সাথে যুক্ত প্রতিটি SubscriptionPurchaseLineItem অবজেক্টে সেই লাইন আইটেমটিতে ব্যবহারকারীর কেনা সাবস্ক্রিপশনের সাথে যুক্ত productId মান থাকে।

ব্যবহারকারীদের একটি নির্দিষ্ট সাবস্ক্রিপশন ম্যানেজমেন্ট স্ক্রিনে নির্দেশিত করতে নিম্নলিখিত URLটি ব্যবহার করুন, যথাক্রমে productId এবং অ্যাপ প্যাকেজ নামের সাথে "your-sub-product-id" এবং "your-app-package" প্রতিস্থাপন করুন:

https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package

ব্যবহারকারী তারপরে তাদের অর্থপ্রদানের পদ্ধতিগুলি পরিচালনা করতে এবং বাতিলকরণ, পুনঃসাবস্ক্রিপশন এবং বিরতি সহ বৈশিষ্ট্যগুলি অ্যাক্সেস করতে সক্ষম হয়।

ব্যবহারকারীদের আপগ্রেড, ডাউনগ্রেড বা তাদের সদস্যতা পরিবর্তন করার অনুমতি দিন

আপনি বিদ্যমান গ্রাহকদের তাদের চাহিদাগুলি আরও ভালভাবে মেটাতে তাদের সদস্যতা পরিকল্পনা পরিবর্তন করতে বিভিন্ন বিকল্প সরবরাহ করতে পারেন:

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

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

চিত্র 3 তিনটি ভিন্ন পরিকল্পনা সহ একটি উদাহরণ অ্যাপ দেখায়:

এই অ্যাপটির তিনটি সাবস্ক্রিপশন স্তর রয়েছে..
চিত্র 3. এই অ্যাপটির তিনটি সাবস্ক্রিপশন স্তর রয়েছে৷

আপনার অ্যাপটি চিত্র 3 এর মতো একটি স্ক্রিন দেখাতে পারে, ব্যবহারকারীদের তাদের সদস্যতা পরিবর্তন করার বিকল্প দেয়। সমস্ত ক্ষেত্রে, ব্যবহারকারীদের কাছে তাদের বর্তমান সাবস্ক্রিপশন প্ল্যান কী এবং এটি পরিবর্তন করার জন্য তাদের কাছে কী বিকল্প রয়েছে তা পরিষ্কার হওয়া উচিত।

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

প্রতিস্থাপন মোড

নিম্নলিখিত সারণীতে উপলব্ধ প্রতিস্থাপন মোড এবং উদাহরণ ব্যবহার এবং অর্থপ্রদানের গণনা প্রদত্ত হিসাবে বিবেচিত হয়েছে।

প্রতিস্থাপন মোড

বর্ণনা

উদাহরণ ব্যবহার

প্রতিশ্রুতিবদ্ধ অর্থ প্রদানের হিসাবে রেকর্ড করা হয়েছে (কিস্তির সদস্যতা প্রতিস্থাপনের জন্য)

WITH_TIME_PRORATION

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

কোনো তাত্ক্ষণিক অতিরিক্ত অর্থপ্রদান ছাড়াই আরও ব্যয়বহুল স্তরে আপগ্রেড করুন৷

0

CHARGE_PRORATED_PRICE

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

দ্রষ্টব্য: এই বিকল্পটি শুধুমাত্র একটি সাবস্ক্রিপশন আপগ্রেডের জন্য উপলব্ধ, যেখানে সময়ের প্রতি ইউনিট মূল্য বৃদ্ধি পায়।

বিলিং তারিখ পরিবর্তন না করে একটি আরো ব্যয়বহুল স্তরে আপগ্রেড করুন৷

1

CHARGE_FULL_PRICE

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

দ্রষ্টব্য: যদি নতুন সাবস্ক্রিপশনে একটি বিনামূল্যের ট্রায়াল বা পরিচায়ক অফার থাকে, তবে আপগ্রেড বা ডাউনগ্রেডের সময় ব্যবহারকারীর কাছ থেকে $0 বা প্রাথমিক অফারের মূল্য, যেটি প্রযোজ্য হোক না কেন চার্জ করা হবে৷

ছোট থেকে দীর্ঘ বিলিং পিরিয়ডে আপগ্রেড করুন।

1 (দ্রষ্টব্য: 0 যদি নতুন সাবস্ক্রিপশনে বিনামূল্যে ট্রায়াল থাকে।)

WITHOUT_PRORATION

সদস্যতা অবিলম্বে আপগ্রেড বা ডাউনগ্রেড করা হয় এবং সদস্যতা পুনর্নবীকরণের সময় নতুন মূল্য চার্জ করা হয়। বিলিং চক্র একই থাকে।

কোনো অবশিষ্ট বিনামূল্যের সময় ধরে রেখে একটি উচ্চতর সাবস্ক্রিপশন স্তরে আপগ্রেড করুন।

0

DEFERRED

সাবস্ক্রিপশন আপগ্রেড বা ডাউনগ্রেড করা হয় শুধুমাত্র যখন সাবস্ক্রিপশন পুনর্নবীকরণ করা হয়, কিন্তু নতুন ক্রয় অবিলম্বে নিম্নলিখিত দুটি আইটেমের সাথে জারি করা হয়:

  • স্বয়ংক্রিয় পুনর্নবীকরণ অক্ষম এবং মেয়াদ শেষ হওয়ার সময় সহ বিদ্যমান আইটেমটি বর্তমান বিলিং চক্রের শেষে সেট করা হয়েছে৷
  • বিদ্যমান আইটেমের মেয়াদ শেষ হওয়ার পর নতুন এনটাইটেলমেন্ট শুরু হয়। আপনি ব্যবহারকারীরা চাইলে অতিরিক্ত পরিবর্তন করার অনুমতি দিতে পারেন। উদাহরণস্বরূপ, ব্যবহারকারীরা মূল প্ল্যানে ফিরে যেতে পারেন বা একটি নতুন বিলম্বিত প্ল্যান পরিবর্তন শুরু করতে পারেন।

দ্রষ্টব্য: কিস্তি সাবস্ক্রিপশনের জন্য, পরবর্তী অর্থপ্রদানের তারিখের শুরুতে প্ল্যান পরিবর্তন হয়।

কম ব্যয়বহুল স্তরে ডাউনগ্রেড করুন।

1

আপগ্রেড বা ডাউনগ্রেড অফারের বিভিন্ন আপসেল এবং উইনব্যাক অ্যাপ্লিকেশন সম্পর্কে আরও জানতে, অফার এবং প্রচার নির্দেশিকা পড়ুন।

একটি ক্রয়ের জন্য প্রতিস্থাপন মোড সেট করুন

আপনি আপনার পছন্দ এবং ব্যবসায়িক যুক্তির উপর ভিত্তি করে বিভিন্ন ধরনের সাবস্ক্রিপশন ট্রানজিশনের জন্য বিভিন্ন প্রতিস্থাপন মোড ব্যবহার করতে পারেন। এই বিভাগটি ব্যাখ্যা করে যে কীভাবে সাবস্ক্রিপশনে পরিবর্তনের জন্য একটি প্রতিস্থাপন মোড সেট করতে হয় এবং প্রযোজ্য সীমাবদ্ধতাগুলি।

একই সাবস্ক্রিপশনের মধ্যে পুনরায় সদস্যতা নিন বা প্ল্যান পরিবর্তন করুন

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

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

সাবস্ক্রিপশন জুড়ে পরিকল্পনা স্যুইচ করুন, অথবা ডিফল্ট প্রতিস্থাপন মোড ওভাররাইড করুন

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

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

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

প্রতিস্থাপন উদাহরণ এবং আচরণ

প্রতিটি প্রোরেশন মোড কীভাবে কাজ করে তা বোঝার জন্য, নিম্নলিখিত পরিস্থিতি বিবেচনা করুন:

Samwise-এর কান্ট্রি গার্ডেনার অ্যাপ থেকে অনলাইন সামগ্রীর সদস্যতা রয়েছে। কন্টেন্টের টায়ার 1 সংস্করণে তার মাসিক সাবস্ক্রিপশন রয়েছে, যা শুধুমাত্র পাঠ্য। এই সাবস্ক্রিপশনের জন্য তার প্রতি মাসে $2 খরচ হয়, এবং এটি মাসের প্রথম তারিখে পুনর্নবীকরণ হয়।

15 এপ্রিল, স্যামওয়াইজ টিয়ার 2 সাবস্ক্রিপশনের বার্ষিক সংস্করণে আপগ্রেড করার সিদ্ধান্ত নিয়েছে, যার মধ্যে ভিডিও আপডেট রয়েছে এবং প্রতি বছর $36 খরচ হয়।

সাবস্ক্রিপশন আপগ্রেড করার সময়, বিকাশকারী একটি প্রেশন মোড নির্বাচন করে। নিম্নলিখিত তালিকাটি বর্ণনা করে যে কীভাবে প্রতিটি প্রোরেশন মোড Samwise এর সদস্যতাকে প্রভাবিত করে:

WITH_TIME_PRORATION

Samwise এর Tier 1 সদস্যতা অবিলম্বে শেষ হয়৷ যেহেতু তিনি পুরো মাসের জন্য অর্থ প্রদান করেছেন (এপ্রিল 1-30) কিন্তু সাবস্ক্রিপশন সময়ের অর্ধেক পথ আপগ্রেড করেছেন, তাই এক মাসের সাবস্ক্রিপশনের অর্ধেক ($1) তার নতুন সদস্যতায় প্রয়োগ করা হয়েছে। যাইহোক, যেহেতু নতুন সাবস্ক্রিপশনের খরচ প্রতি বছর $36, তাই $1 ক্রেডিট ব্যালেন্স মাত্র 10 দিনের জন্য (এপ্রিল 16-25); তাই 26 এপ্রিল, তাকে একটি নতুন সাবস্ক্রিপশনের জন্য $36 এবং পরবর্তী প্রতি বছরের 26শে এপ্রিল আরও $36 চার্জ করা হয়।

কেনাকাটা সফল হওয়ার মুহুর্তে আপনার অ্যাপের PurchasesUpdatedListener কল করা উচিত এবং আপনি একটি queryPurchasesAsync() কলের অংশ হিসাবে নতুন কেনাকাটা পুনরুদ্ধার করতে সক্ষম হবেন। আপনার ব্যাকএন্ড অবিলম্বে একটি SUBSCRIPTION_PURCHASED রিয়েল টাইম বিকাশকারী বিজ্ঞপ্তি পায়৷

CHARGE_PRORATED_PRICE

এই মোডটি ব্যবহার করা যেতে পারে কারণ টায়ার 2 সাবস্ক্রিপশন মূল্য প্রতি টাইম ইউনিট ($36/বছর = $3/মাস) প্রতি ইউনিট প্রতি টায়ার 1 সাবস্ক্রিপশন মূল্য ($2/মাস) থেকে বেশি। Samwise এর Tier 1 সদস্যতা অবিলম্বে শেষ হয়৷ যেহেতু তিনি পুরো মাসের জন্য অর্থ প্রদান করেছেন কিন্তু শুধুমাত্র অর্ধেক ব্যবহার করেছেন, তাই একটি মাসের সাবস্ক্রিপশনের অর্ধেক ($1) তার নতুন সাবস্ক্রিপশনে প্রয়োগ করা হয়েছে। যাইহোক, যেহেতু নতুন সাবস্ক্রিপশনের দাম $36/বছর, বাকি 15 দিনের খরচ $1.50; তাই তাকে তার নতুন সাবস্ক্রিপশনের জন্য $0.50 এর পার্থক্য চার্জ করা হয়েছে। 1লা মে, Samwise তার নতুন সাবস্ক্রিপশন স্তরের জন্য $36 এবং পরবর্তী প্রতি বছরের 1 মে তারিখে আরও $36 চার্জ করা হয়।

কেনাকাটা সফল হওয়ার মুহুর্তে আপনার অ্যাপের PurchasesUpdatedListener কল করা উচিত এবং আপনি একটি queryPurchasesAsync() কলের অংশ হিসাবে নতুন কেনাকাটা পুনরুদ্ধার করতে সক্ষম হবেন। আপনার ব্যাকএন্ড অবিলম্বে একটি SUBSCRIPTION_PURCHASED রিয়েল টাইম বিকাশকারী বিজ্ঞপ্তি পায়৷

WITHOUT_PRORATION

Samwise এর Tier 1 সাবস্ক্রিপশন অবিলম্বে কোন অতিরিক্ত চার্জ ছাড়াই Tier 2 এ আপগ্রেড করা হয় এবং 1লা মে তাকে তার নতুন সাবস্ক্রিপশন স্তরের জন্য $36 এবং পরবর্তী প্রতি বছরের 1 মে তারিখে আরও $36 চার্জ করা হয়।

কেনাকাটা সফল হওয়ার মুহুর্তে আপনার অ্যাপের PurchasesUpdatedListener কল করা উচিত এবং আপনি একটি queryPurchasesAsync() কলের অংশ হিসাবে নতুন কেনাকাটা পুনরুদ্ধার করতে সক্ষম হবেন। আপনার ব্যাকএন্ড অবিলম্বে একটি SUBSCRIPTION_PURCHASED রিয়েল টাইম বিকাশকারী বিজ্ঞপ্তি পায়৷

DEFERRED

স্যামওয়াইজ এর টিয়ার 1 সাবস্ক্রিপশন 30 এপ্রিল মেয়াদ শেষ না হওয়া পর্যন্ত চলতে থাকে। 1লা মে, টায়ার 2 সাবস্ক্রিপশন কার্যকর হয় এবং Samwise তার নতুন সাবস্ক্রিপশন স্তরের জন্য $36 চার্জ করা হয়।

কেনাকাটা সফল হওয়ার মুহুর্তে আপনার অ্যাপের PurchasesUpdatedListener কল করা উচিত এবং আপনি একটি queryPurchasesAsync() কলের অংশ হিসাবে নতুন কেনাকাটা পুনরুদ্ধার করতে সক্ষম হবেন। আপনার ব্যাকএন্ড অবিলম্বে একটি SUBSCRIPTION_PURCHASED রিয়েল টাইম বিকাশকারী বিজ্ঞপ্তি পায়৷ আপনি ক্রয়টি একইভাবে প্রক্রিয়া করবেন যেভাবে আপনি সেই সময়ে অন্য কোনও নতুন ক্রয় প্রক্রিয়া করবেন। বিশেষ করে, নিশ্চিত করুন যে আপনি নতুন ক্রয় স্বীকার করেছেন। মনে রাখবেন যে প্রতিস্থাপন কার্যকর হওয়ার মুহুর্তে নতুন সাবস্ক্রিপশনের startTime পপুলেট করা হয়, যা পুরানো সাবস্ক্রিপশনের মেয়াদ শেষ হলে ঘটে। সেই সময়ে, আপনি নতুন সদস্যতা পরিকল্পনার জন্য একটি SUBSCRIPTION_RENEWED RTDN পাবেন৷ ReplacementMode.DEFERRED আচরণ সম্পর্কে আরও পড়ুন হ্যান্ডেল ডিফারড রিপ্লেসমেন্টে

CHARGE_FULL_PRICE

Samwise এর Tier 1 সদস্যতা অবিলম্বে শেষ হয়৷ তার টিয়ার 2 সাবস্ক্রিপশন আজ থেকে শুরু হয়েছে এবং তাকে $36 চার্জ করা হয়েছে। যেহেতু তিনি পুরো মাসের জন্য অর্থ প্রদান করেছেন কিন্তু শুধুমাত্র অর্ধেক ব্যবহার করেছেন, তাই একটি মাসের সাবস্ক্রিপশনের অর্ধেক ($1) তার নতুন সাবস্ক্রিপশনে প্রয়োগ করা হয়েছে। যেহেতু নতুন সাবস্ক্রিপশনের দাম $36/বছর, সে তার সাবস্ক্রিপশন সময়ের (~10 দিন) সাথে এক বছরের 1/36তম অংশ পাবে। তাই, Samwise এর পরবর্তী চার্জ হবে আজ থেকে 1 বছর 10 দিনের মধ্যে $36। এর পরে, তাকে প্রতি বছর $36 চার্জ করা হয়।

একটি proration মোড নির্বাচন করার সময়, আমাদের প্রতিস্থাপন সুপারিশ পর্যালোচনা করতে ভুলবেন না।

ট্রিগার সদস্যতা পরিবর্তন অ্যাপ মধ্যে

আপনার অ্যাপ ব্যবহারকারীদের একটি আপগ্রেড বা ডাউনগ্রেড অফার করতে পারে একই পদক্ষেপগুলি ব্যবহার করে যেমন একটি ক্রয় প্রবাহ চালু করা হয় ৷ যাইহোক, আপগ্রেড বা ডাউনগ্রেড করার সময়, আপনাকে বর্তমান সাবস্ক্রিপশন, ভবিষ্যতের (আপগ্রেড বা ডাউনগ্রেড) সাবস্ক্রিপশন এবং ব্যবহার করার জন্য প্রতিস্থাপন মোডের বিবরণ প্রদান করতে হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

val offerToken = productDetails
        .getSubscriptionOfferDetails(selectedOfferIndex)
        .getOfferToken()

val billingParams = BillingFlowParams.newBuilder().setProductDetailsParamsList(
       listOf(
           BillingFlowParams.ProductDetailsParams.newBuilder()
               .setProductDetails(productDetails)
               .setOfferToken(offerToken)
               .build()
       )
       ).setSubscriptionUpdateParams(
           BillingFlowParams.SubscriptionUpdateParams.newBuilder()
               .setOldPurchaseToken("old_purchase_token")
               .setSubscriptionReplacementMode(
                 BillingFlowParams.ReplacementMode.CHARGE_FULL_PRICE
               )
               .build()
       ).build()

billingClient.launchBillingFlow(
    activity,
    billingParams
   )
// ...

জাভা

String offerToken = productDetails
    .getSubscriptionOfferDetails(selectedOfferIndex)
    .getOfferToken();

BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(
        ImmuableList.of(
            ProductDetailsParams.newBuilder()
                // fetched via queryProductDetailsAsync
                .setProductDetails(productDetails)
                // offerToken can be found in
                // ProductDetails=>SubscriptionOfferDetails
                .setOfferToken(offerToken)
                .build()))
    .setSubscriptionUpdateParams(
        SubscriptionUpdateParams.newBuilder()
            // purchaseToken can be found in Purchase#getPurchaseToken
            .setOldPurchaseToken("old_purchase_token")
            .setSubscriptionReplacementMode(ReplacementMode.CHARGE_FULL_PRICE)
            .build())
    .build();

BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
// ...

প্রতিস্থাপন সুপারিশ

নিম্নলিখিত সারণীটি প্রতিটি দৃশ্যের জন্য আমরা যা সুপারিশ করি তার সাথে বিভিন্ন প্রেশনের পরিস্থিতি দেখায়:

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

সাবস্ক্রিপশন পরিবর্তন কেনাকাটা পরিচালনা করুন

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

অ্যাপ-মধ্যস্থ আচরণ যেকোনো নতুন কেনাকাটার মতোই। আপনার অ্যাপটি আপনার PurchasesUpdatedListener এ নতুন ক্রয়ের ফলাফল পায় এবং নতুন কেনাকাটা queryPurchasesAsync এ উপলব্ধ।

Google Play Developer API সাবস্ক্রিপশন রিসোর্সে একটি linkedPurchaseToken ফেরত দেয় যখন একটি ক্রয় একটি বিদ্যমান একটিকে প্রতিস্থাপন করে। আপনার পরিষেবাগুলিতে অ্যাক্সেস পাওয়ার জন্য পুরানো টোকেন ব্যবহার করা হচ্ছে না তা নিশ্চিত করতে linkedPurchaseToken এ প্রদত্ত টোকেনটিকে বাতিল করতে ভুলবেন না। আপগ্রেড এবং ডাউনগ্রেড কেনাকাটা পরিচালনার বিষয়ে তথ্যের জন্য আপগ্রেড, ডাউনগ্রেড এবং পদত্যাগ দেখুন।

আপনি যখন নতুন ক্রয়ের টোকেন পাবেন, তখন একটি নতুন ক্রয়ের টোকেন যাচাই করার মতো একই যাচাইকরণ প্রক্রিয়া অনুসরণ করুন৷ Google Play বিলিং লাইব্রেরি থেকে BillingClient.acknowledgePurchase() অথবা Google Play Developer API থেকে Purchases.subscriptions:acknowledge এই কেনাকাটাগুলিকে স্বীকার করতে ভুলবেন না।

স্থগিত প্রতিস্থাপন হ্যান্ডেল

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

যখন আপনি একটি নতুন কেনাকাটার জন্য ReplacementMode.DEFERRED ব্যবহার করেন, queryPurchasesAsync() ক্রয় প্রবাহের পরে একটি নতুন ক্রয় টোকেন ফেরত দেয় যা পরবর্তী পুনর্নবীকরণ তারিখে বিলম্বিত প্রতিস্থাপন না হওয়া পর্যন্ত পুরানো পণ্যের সাথে যুক্ত থাকে, যার পরে নতুন পণ্যটি ফেরত দেওয়া হয়।

অতীতে আপনি এই ব্যবহারকারীর অভিজ্ঞতাটি অপ্রচলিত ProrationMode.DEFERRED সাথে অর্জন করতে পারতেন, কিন্তু ProrationMode.DEFERRED প্লে বিলিং লাইব্রেরি 6 এর সাথে বাতিল করা হয়েছে। আচরণের পার্থক্য কোথায় তা বোঝার জন্য নিম্নলিখিত টেবিলটি দেখুন:

সময়

ProrationMode.DEFERRED (বঞ্চিত)

প্রতিস্থাপন মোড। বিলম্বিত

ক্রয় প্রবাহ সফল হওয়ার ঠিক পরে (অ্যাপ)

ক্রয় করার পরে আপগ্রেড বা ডাউনগ্রেড সফল হয়েছে কিনা তার একটি স্ট্যাটাস সহ ক্রয় করার পর PurchasesUpdatedListener ডাকা হয়।

পুরানো পরিকল্পনার এনটাইটেলমেন্ট পরবর্তী পুনর্নবীকরণ তারিখ পর্যন্ত অব্যাহত থাকে। অ্যাপটি সঠিক এনটাইটেলমেন্ট দেয় তা নিশ্চিত করতে, queryPurchasesAsync() প্রতিস্থাপন না হওয়া পর্যন্ত আসল ক্রয় টোকেন এবং আসল এনটাইটেলমেন্ট সহ একটি ক্রয় বস্তু ফেরত দেয়।

নতুন ক্রয়ের টোকেনটি দেখা যাচ্ছে না, তাই এটি এই সময়ে প্রক্রিয়া করা যাবে না।

ক্রয় করার পরে আপগ্রেড বা ডাউনগ্রেড সফল হয়েছে কিনা সে সম্পর্কে একটি স্ট্যাটাস সহ ক্রয়ের পর PurchasesUpdatedListener ডাকা হয়।

queryPurchasesAsync() অবিলম্বে নতুন ক্রয় টোকেন সহ ক্রয় ফেরত দেয় এবং এর সাথে যুক্ত মূল এনটাইটেলমেন্ট

নতুন ক্রয়ের টোকেনটি সামনে এসেছে, তাই প্রতিস্থাপনের সময় এটিকে বিবেচনায় রেখে এটি প্রক্রিয়া করা উচিত।

ক্রয় প্রবাহ সফল হওয়ার ঠিক পরে (ব্যাকএন্ড)

ক্রয় প্রবাহের পরে SUBSCRIPTION_PURCHASED RTDN পাঠানো হয় না । ব্যাকএন্ড এখনও নতুন ক্রয় সম্পর্কে সচেতন করা হয়নি।

SUBSCRIPTION_PURCHASED পুরানো product_id সহ RTDN নতুন ক্রয় টোকেনের জন্য ক্রয় প্রবাহের পরপরই পাঠানো হয়।

নতুন ক্রয় টোকেন সহ purchases.subscriptionsv2.get পদ্ধতিতে কল করলে দুটি লাইন আইটেম সহ ক্রয়ের সময় নির্দেশ করে একটি 'স্টার্টটাইম' সহ একটি ক্রয় ফেরত দেয়:

  • একটি পুরানো এনটাইটেলমেন্টের প্রতিনিধিত্ব করে এবং ভবিষ্যতে একটি 'এক্সপায়ারিটাইম' আছে। পুরানো এনটাইটেলমেন্ট পুনর্নবীকরণ করা হবে না এবং নতুন এনটাইটেলমেন্টের পণ্য সহ একটি DeferredItemReplacement আছে। এটি মেয়াদ শেষ হওয়ার পরে পুরানো এনটাইটেলমেন্টের একটি মুলতুবি প্রতিস্থাপন নির্দেশ করে।
  • একটি নতুন কেনা এনটাইটেলমেন্টের প্রতিনিধিত্ব করে। এটির 'expiryTime'-এর জন্য কোনো মান সেট করা নেই।

পুরানো ক্রয়ের টোকেনের জন্য SUBSCRIPTION_EXPIRED পাঠানো হয়েছে৷ পুরানো ক্রয় টোকেন সহ purchases.subscriptionsv2.get পদ্ধতিতে কল করার সময়, এটি মেয়াদোত্তীর্ণ হিসাবে প্রদর্শিত হয় (পুরানো পরিকল্পনার জন্য এনটাইটেলমেন্ট অবশিষ্ট সময়ের জন্য নতুন কেনাকাটায় স্থানান্তরিত হয়)।

প্রতিস্থাপনে - ক্রয় প্রবাহের পরে প্রথম পুনর্নবীকরণ (অ্যাপ)

queryPurchasesAsync() নতুন ক্রয়ের টোকেন এবং এনটাইটেলমেন্ট সহ একটি নতুন ক্রয় বস্তু ফেরত দেয়।

নতুন ক্রয়ের টোকেন এখন সামনে এসেছে, তাই এটি প্রক্রিয়া করা উচিত।

queryPurchasesAsync() অবিলম্বে নতুন ক্রয় টোকেন সহ ক্রয় ফেরত দেয়, এবং এর সাথে যুক্ত নতুন এনটাইটেলমেন্ট

ক্রয় প্রবাহ সফল হওয়ার পরে নতুন ক্রয়টি ইতিমধ্যেই প্রক্রিয়া করা উচিত ছিল, তাই সঠিক এনটাইটেলমেন্ট মঞ্জুর করা হয়েছে তা নিশ্চিত করা ছাড়া অ্যাপটির কোনও বিশেষ পদক্ষেপ নেওয়া উচিত নয়।

প্রতিস্থাপনে - ক্রয় প্রবাহের পরে প্রথম পুনর্নবীকরণ (ব্যাকএন্ড)

প্রথম SUBSCRIPTION_RENEWED RTDN পাঠানো হলে নতুন ক্রয় এখন প্রক্রিয়া করা এবং স্বীকার করা যেতে পারে।

আপনার সাবস্ক্রিপশন ব্যাকএন্ডের কোন ব্যবহারকারীকে নতুন এনটাইটেলমেন্টের সাথে আপডেট করতে হবে তা নির্ধারণ করতে সাবস্ক্রিপশন রিসোর্সে linkedPurchaseToken ব্যবহার করা যেতে পারে।

SUBSCRIPTION_PURCHASED RTDN যখন নতুন ক্রয়ের টোকেনের জন্য পাঠানো হয়েছিল এবং 'স্টার্টটাইম' হিসাবে রেকর্ড করা হয়েছিল তখন নতুন ক্রয় প্রক্রিয়া করা হয়েছিল এবং স্বীকার করা হয়েছিল৷

ReplacementMode.DEFERRED এর সাথে, প্রথম পুনর্নবীকরণগুলি অন্য কোনও পুনর্নবীকরণের আদর্শ আচরণ অনুসরণ করে এবং এই ঘটনাটি ঘটলে প্রতিস্থাপনের জন্য আপনাকে বিশেষ যুক্তি পরিচালনা করতে হবে না৷

নতুন ক্রয় টোকেন সহ purchases.subscriptionsv2.get পদ্ধতিতে কল করার সময় দুটি লাইন আইটেম সহ একটি ক্রয় ফেরত দেয়:

  • একটি পুরানো এনটাইটেলমেন্টের প্রতিনিধিত্ব করে, অতীতে একটি `ExpiryTime` সহ এবং DeferredItemReplacement-এর জন্য কোনো সেট মান নেই।
  • একটি নতুন এনটাইটেলমেন্টের প্রতিনিধিত্ব করে, ভবিষ্যতে একটি `ExpiryTime` সহ এবং স্বয়ংক্রিয়_পুনর্নবীকরণ_সক্ষম পতাকা চালু করা হয়েছে।

ReplacementMode.DEFERRED এখন থেকে অবহেলিত ProrationMode.DEFERRED এর পরিবর্তে ব্যবহার করা উচিত, কারণ এটি এনটাইটেলমেন্ট পরিবর্তনের ক্ষেত্রে একই আচরণ উপস্থাপন করে, কিন্তু ক্রয় পরিচালনা করার একটি উপায় অফার করে যা অন্যান্য নতুন কেনাকাটার জন্য আচরণের সাথে আরও সামঞ্জস্যপূর্ণ।

গ্রাহক ব্যবস্থাপনা

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

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

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

বিলিং লাইব্রেরি 2.0+ ছাড়া অ্যাপস: না

বিলিং লাইব্রেরি 2.0+ সহ অ্যাপস: হ্যাঁ। Devs কনসোলে অপ্ট-আউট করতে পারে।

যখন ব্যবহারকারী চার্জ করা হয়

একই SKU ব্যবহার করলে: বর্তমান বিলিং সময়কাল শেষ।

যদি ভিন্ন SKU ব্যবহার করা হয়: proration মোডের উপর নির্ভর করে।

বর্তমান বিলিং সময়ের শেষ অবিলম্বে অবিলম্বে
বাস্তবায়ন প্রয়োজন আপনার অ্যাপে একটি পুনরায় সাইন আপ UI প্রদান করুন

সদস্যতা অবস্থার পরিবর্তন সনাক্ত করুন

প্লে স্টোরে ডিপ লিঙ্ক

আপনার অ্যাপে একটি পুনরায় সাইন আপ UI প্রদান করুন অ্যাপ-এর বাইরে কেনাকাটা পরিচালনা করুন

সাবস্ক্রিপশনের মেয়াদ শেষ হওয়ার আগে - ইন-অ্যাপ

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

বেশিরভাগ সময়, আপনি ব্যবহারকারীকে একই মূল্য এবং SKU অফার করতে চান যে তারা ইতিমধ্যে সদস্যতা নিয়েছে, নিম্নরূপ:

  • একই SKU দিয়ে একটি নতুন সদস্যতা ক্রয় শুরু করুন।
  • নতুন সাবস্ক্রিপশন পুরানোটিকে প্রতিস্থাপন করে এবং একই মেয়াদ শেষ হওয়ার তারিখে পুনর্নবীকরণ করে। পুরানো সাবস্ক্রিপশন অবিলম্বে মেয়াদ শেষ হিসাবে চিহ্নিত করা হয়.
  • উদাহরণ স্বরূপ, অ্যাকিলিসের উদাহরণ মিউজিক অ্যাপের একটি সাবস্ক্রিপশন রয়েছে এবং সাবস্ক্রিপশনের মেয়াদ 1 আগস্টে শেষ হবে। 10 জুলাই, তিনি প্রতি মাসে একই মূল্যে এক মাসের সাবস্ক্রিপশনে পুনরায় সাবস্ক্রাইব করেন। নতুন সাবস্ক্রিপশন বাকি ক্রেডিট সহ সমানুপাতিক, অবিলম্বে সক্রিয়, এবং এখনও 1 আগস্ট পুনর্নবীকরণ করা হয়।

আপনি যদি একটি ভিন্ন মূল্য অফার করতে চান—উদাহরণস্বরূপ একটি নতুন বিনামূল্যের ট্রায়াল বা একটি উইনব্যাক ছাড়—আপনি পরিবর্তে ব্যবহারকারীকে একটি ভিন্ন SKU অফার করতে পারেন:

  • WITHOUT_PRORATION প্রতিস্থাপন মোড ব্যবহার করে বিভিন্ন SKU এর সাথে একটি আপগ্রেড বা ডাউনগ্রেড শুরু করুন।
  • নতুন সাবস্ক্রিপশন পুরানোটিকে প্রতিস্থাপন করে এবং একই মেয়াদ শেষ হওয়ার তারিখে পুনর্নবীকরণ করে। ব্যবহারকারীর কাছ থেকে মূল মেয়াদ শেষ হওয়ার তারিখে নতুন SKU-এর মূল্য, যেকোন প্রাথমিক মূল্য সহ চার্জ করা হয়। যদি পুরানো সাবস্ক্রিপশন একটি অস্পষ্ট অ্যাকাউন্ট আইডি ব্যবহার করে তৈরি করা হয়, তাহলে সেই একই আইডি আপগ্রেড এবং ডাউনগ্রেডের জন্য BillingFlowParams এ পাস করা উচিত।
  • উদাহরণ স্বরূপ, অ্যাকিলিসের উদাহরণ মিউজিক অ্যাপের সাবস্ক্রিপশন রয়েছে এবং সাবস্ক্রিপশনের মেয়াদ 1 আগস্ট শেষ হবে। 10 জুলাই, তিনি একটি প্রাথমিক মূল্য সহ একটি বার্ষিক সাবস্ক্রিপশনে পুনরায় সদস্যতা নেন। নতুন সাবস্ক্রিপশন অবিলম্বে সক্রিয় হয়, এবং ব্যবহারকারীকে 1 আগস্ট থেকে প্রাথমিক মূল্য চার্জ করা হয়।
  • আপনি যদি আপনার winback SKU-তে একটি বিনামূল্যের ট্রায়াল বা ইন্ট্রো মূল্য অন্তর্ভুক্ত করার সিদ্ধান্ত নেন, তাহলে নিশ্চিত করুন যে ব্যবহারকারী Google Play Console-এ অ্যাপ প্রতি একটি বিনামূল্যের ট্রায়ালের অনুমতি দিন টিক চিহ্ন মুক্ত করে, যা ব্যবহারকারীকে প্রতি অ্যাপে একটি বিনামূল্যের ট্রায়াল পেতে সীমাবদ্ধ করে।

আপনি যখন ক্রয়ের টোকেন পাবেন, তখন ক্রয়টি প্রক্রিয়া করুন ঠিক যেমন আপনি একটি নতুন সদস্যতার সাথে করবেন। উপরন্তু, Google Play Developer API সাবস্ক্রিপশন রিসোর্সে একটি linkedPurchaseToken ফেরত দেয়। আপনার পরিষেবাগুলিতে অ্যাক্সেস পাওয়ার জন্য পুরানো টোকেন ব্যবহার করা হচ্ছে না তা নিশ্চিত করতে linkedPurchaseToken এ প্রদত্ত টোকেনটিকে বাতিল করতে ভুলবেন না।

সাবস্ক্রিপশনের মেয়াদ শেষ হওয়ার আগে - প্লে স্টোরে

সাবস্ক্রিপশনটি বাতিল করা হলেও এখনও সক্রিয় থাকলেও ব্যবহারকারীরা রিসবস্ক্রাইব (পূর্বে পুনরুদ্ধার ) ক্লিক করে গুগল প্লে সাবস্ক্রিপশন সেন্টারে সাবস্ক্রিপশনটি পুনরুদ্ধার করতে পারেন। এটি একই সাবস্ক্রিপশন এবং ক্রয় টোকেন রাখে।

গুগল প্লে স্টোর অ্যাপে সাবস্ক্রিপশন বিভাগ একটি দেখায়             একটি পুনরায় সাবস্ক্রাইব বোতাম সহ সাবস্ক্রিপশন বাতিল করা হয়েছে
চিত্র 8। অ্যাকাউন্ট> গুগল প্লে স্টোর অ্যাপে সাবস্ক্রিপশন বিভাগগুলি একটি পুনরায় জমা দেওয়া বোতাম সহ বাতিল সাবস্ক্রিপশন দেখায়।

সাবস্ক্রিপশন পুনরুদ্ধার সম্পর্কিত আরও তথ্যের জন্য, পুনরুদ্ধার দেখুন।

সাবস্ক্রিপশন মেয়াদ শেষ হওয়ার পরে - অ্যাপ্লিকেশন

নতুন গ্রাহকদের মতো একই অ্যাপ্লিকেশন পণ্য ক্রয় প্রবাহ প্রয়োগ করে আপনি মেয়াদোত্তীর্ণ গ্রাহকদের আপনার অ্যাপ্লিকেশনটির মধ্যে পুনরায় জমা দেওয়ার অনুমতি দিতে পারেন। নিম্নলিখিত নোট করুন:

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

আপনি যখন ক্রয় টোকেনটি পান, আপনি যেমন একটি নতুন সাবস্ক্রিপশন দিয়ে ক্রয়টি প্রক্রিয়া করুন । আপনি সাবস্ক্রিপশন রিসোর্সে কোনও linkedPurchaseToken পাবেন না।

সাবস্ক্রিপশন মেয়াদ শেষ হওয়ার পরে - প্লে স্টোরে

যদি সক্ষম করা থাকে তবে ব্যবহারকারীরা গুগল প্লে সাবস্ক্রিপশন সেন্টারে রিসবস্ক্রাইব ক্লিক করে মেয়াদোত্তীর্ণ হওয়ার পরে এক বছর পর্যন্ত একই এসকিউতে পুনরায় জমা দিতে পারেন। এটি একটি নতুন সাবস্ক্রিপশন এবং ক্রয় টোকেন উত্পন্ন করে।

গুগল প্লে স্টোর অ্যাপে সাবস্ক্রিপশন বিভাগ একটি দেখায়             বাতিল এবং মেয়াদোত্তীর্ণ সাবস্ক্রিপশন পুনরায় সাবস্ক্রাইব এবং অপসারণ সহ             বোতাম
চিত্র 9। অ্যাকাউন্ট> গুগল প্লে স্টোর অ্যাপে সাবস্ক্রিপশন বিভাগগুলি পুনরায় জমা দেওয়া এবং বোতামগুলি অপসারণ সহ একটি বাতিল এবং মেয়াদোত্তীর্ণ সাবস্ক্রিপশন দেখায়।

পুনরায় সাবস্ক্রাইবকে একটি অ্যাপ-অফ-অ্যাপ্লিকেশন ক্রয় হিসাবে বিবেচনা করা হয়, তাই আপনার অ্যাপের বাইরে থেকে তৈরি ক্রয় পরিচালনার জন্য সেরা অনুশীলনগুলি অনুসরণ করতে ভুলবেন না।

আপনার সাবস্ক্রিপশন প্রচার করুন

আপনি নির্বাচিত ব্যবহারকারীদের একটি বিদ্যমান সাবস্ক্রিপশনে একটি বর্ধিত ফ্রি ট্রায়াল দিতে প্রচার কোড তৈরি করতে পারেন। আরও জানতে, প্রোমো কোডগুলি দেখুন।

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

পরীক্ষার সময় শেষ হওয়ার পরে, ব্যবহারকারীর অর্থ প্রদানের পদ্ধতিটি সম্পূর্ণ সাবস্ক্রিপশন পরিমাণের জন্য চার্জ করা হয়।

যদি কোনও ব্যবহারকারী নিখরচায় পরীক্ষার সময় যে কোনও সময় সাবস্ক্রিপশন বাতিল করে দেয়, তবে সাবস্ক্রিপশনটি ট্রায়াল শেষ না হওয়া পর্যন্ত সক্রিয় থাকে এবং বিনামূল্যে পরীক্ষার সময়কাল শেষ হলে তাদের চার্জ করা হয় না।

বাতিল, ফেরত বা প্রত্যাহার

আপনি সাবস্ক্রিপশন বাতিল , ফেরত বা প্রত্যাহার করতে গুগল প্লে বিকাশকারী এপিআই ব্যবহার করতে পারেন। এই কার্যকারিতাটি গুগল প্লে কনসোলেও উপলব্ধ।

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

নিম্নলিখিত টেবিলটি বাতিল, ফেরত এবং প্রত্যাহারের মধ্যে পার্থক্য চিত্রিত করে।

পুনর্নবীকরণ বন্ধ করে দেয় টাকা ফেরত অ্যাক্সেস প্রত্যাহার করুন
বাতিল করুন হ্যাঁ না না
ফেরত না হ্যাঁ না
প্রত্যাহার করুন হ্যাঁ হ্যাঁ হ্যাঁ

একটি গ্রাহকের জন্য বিলিং বিলিং

আপনি Purchases.subscriptions:defer মুলতুবি সময়কালে, ব্যবহারকারী সম্পূর্ণ অ্যাক্সেস সহ আপনার সামগ্রীতে সাবস্ক্রাইব করা হয় তবে চার্জ করা হয় না। সাবস্ক্রিপশন পুনর্নবীকরণের তারিখটি নতুন তারিখটি প্রতিফলিত করতে আপডেট করা হয়েছে।

প্রিপেইড পরিকল্পনার জন্য, আপনি মেয়াদোত্তীর্ণ সময় স্থগিত করতে ডিফার বিলিং এপিআই ব্যবহার করতে পারেন।

মুলতুবি বিলিং আপনাকে নিম্নলিখিতগুলি করতে দেয়:

  • ব্যবহারকারীদের একটি বিশেষ অফার হিসাবে বিনামূল্যে অ্যাক্সেস দিন, যেমন সিনেমা কেনার জন্য এক সপ্তাহ বিনামূল্যে দেওয়া।
  • শুভেচ্ছার অঙ্গভঙ্গি হিসাবে গ্রাহকদের বিনামূল্যে অ্যাক্সেস দিন।

বিলিংকে একদিনের মতো সামান্য এবং এপিআই কল প্রতি এক বছর ধরে পিছিয়ে দেওয়া যেতে পারে। আরও বিলিংকে আরও স্থগিত করার জন্য, নতুন বিলিংয়ের তারিখ আসার আগে আপনি আবার এপিআইকে কল করতে পারেন।

উদাহরণস্বরূপ, ফিশিং ত্রৈমাসিক অ্যাপ্লিকেশনটির জন্য অনলাইন সামগ্রীতে ডারসির একটি মাসিক সাবস্ক্রিপশন রয়েছে। তিনি সাধারণত প্রতি মাসের প্রথমটিতে £ 1.25 বিল দেওয়া হয়। মার্চ মাসে, তিনি অ্যাপ প্রকাশকের জন্য একটি অনলাইন সমীক্ষায় অংশ নিয়েছিলেন। প্রকাশক তাকে ১৫ ই মে অবধি পরবর্তী অর্থ প্রদানের জন্য ছয় সপ্তাহের সাথে পুরস্কৃত করে, যা তার পূর্বে নির্ধারিত বিলিংয়ের তারিখের ছয় সপ্তাহ পরে এপ্রিল 1 এর ছয় সপ্তাহ পরে। ডারসি এপ্রিল বা মে মাসের শুরুতে চার্জ করা হয় না এবং এখনও সামগ্রীতে অ্যাক্সেস রয়েছে। 15 ই মে, তাকে মাসের জন্য সাধারণ £ 1.25 সাবস্ক্রিপশন ফি নেওয়া হয়। তার পরবর্তী পুনর্নবীকরণের তারিখ এখন 15 জুন।

স্থগিত করার সময়, আপনি তাদের বিলিংয়ের তারিখ পরিবর্তিত হয়েছে তা অবহিত করতে ইমেল বা অ্যাপের মধ্যে ব্যবহারকারীকে অবহিত করতে চাইতে পারেন।

হ্যান্ডলিং পেমেন্ট হ্রাস

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

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

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

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

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

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

ইন-অ্যাপ মেসেজিং

আপনি যদি InAppMessageCategoryId.TRANSACTIONAL দিয়ে অ্যাপ্লিকেশন মেসেজিং সক্ষম করে থাকেন তবে গুগল প্লে ব্যবহারকারীদের গ্রেস পিরিয়ডের সময় এবং অ্যাকাউন্টে একবারে অ্যাকাউন্ট হোল্ডের সময় ব্যবহারকারীদের মেসেজিং প্রদর্শন করবে এবং অ্যাপটি ছাড়াই তাদের অর্থ প্রদানের সুযোগ দেওয়ার সুযোগ সরবরাহ করবে।

স্নাকবার ব্যবহারকারীকে তাদের অর্থ প্রদানের জন্য অবহিত করে
চিত্র 20। স্নাকবার ব্যবহারকারীকে তাদের অর্থ প্রদানের জন্য অবহিত করে।

আমরা সুপারিশ করি যে আপনি যখনই বার্তাটি দেখানো উচিত কিনা তা নির্ধারণের জন্য যখনই ব্যবহারকারী অ্যাপটি খুলবে তখন আপনি এই এপিআইকে কল করুন।

যদি ব্যবহারকারী সফলভাবে তাদের সাবস্ক্রিপশনটি পুনরুদ্ধার করে তবে আপনি ক্রয় টোকেনের সাথে SUBSCRIPTION_STATUS_UPDATED একটি প্রতিক্রিয়া কোড পাবেন। তারপরে গুগল প্লে বিকাশকারী এপিআইকে কল করতে এবং আপনার অ্যাপ্লিকেশনটিতে সাবস্ক্রিপশন স্থিতি রিফ্রেশ করতে আপনার এই ক্রয় টোকেনটি ব্যবহার করা উচিত।

অ্যাপ্লিকেশন মেসেজিং ইন্টিগ্রেট

ব্যবহারকারীর কাছে অ্যাপ্লিকেশন মেসেজিং দেখানোর জন্য, BillingClient.showInAppMessages() ব্যবহার করুন।

অ্যাপ্লিকেশন মেসেজিং প্রবাহকে ট্রিগার করার একটি উদাহরণ এখানে:

কোটলিন

val inAppMessageParams = InAppMessageParams.newBuilder()
        .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL)
        .build()

billingClient.showInAppMessages(activity,
        inAppMessageParams,
        object : InAppMessageResponseListener() {
            override fun onInAppMessageResponse(inAppMessageResult: InAppMessageResult) {
                if (inAppMessageResult.responseCode == InAppMessageResponseCode.NO_ACTION_NEEDED) {
                    // The flow has finished and there is no action needed from developers.
                } else if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) {
                    // The subscription status changed. For example, a subscription
                    // has been recovered from a suspend state. Developers should
                    // expect the purchase token to be returned with this response
                    // code and use the purchase token with the Google Play
                    // Developer API.
                }
            }
        })

জাভা

InAppMessageParams inAppMessageParams = InAppMessageParams.newBuilder()
        .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL)
        .build();

billingClient.showInAppMessages(activity,
        inAppMessageParams,
        new InAppMessageResponseListener() {
            @Override
            public void onInAppMessageResponse(InAppMessageResult inAppMessageResult) {
                if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.NO_ACTION_NEEDED) {
                    // The flow has finished and there is no action needed from developers.
                } else if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) {
                    // The subscription status changed. For example, a subscription
                    // has been recovered from a suspend state. Developers should
                    // expect the purchase token to be returned with this response
                    // code and use the purchase token with the Google Play
                    // Developer API.
                }
            }
        });

মুলতুবি লেনদেন সাবস্ক্রিপশন পরিচালনা করুন

মুলতুবি লেনদেনগুলি প্রাথমিক ক্রয়, টপ-আপ, আপগ্রেড বা ডাউনগ্রেডে ঘটতে পারে। সাবস্ক্রিপশন ক্রয় SUBSCRIPTION_STATE_PENDING স্টেট দিয়ে শুরু হয় SUBSCRIPTION_STATE_ACTIVE স্থানান্তরিত হওয়ার আগে। যদি লেনদেনটির মেয়াদ শেষ হয়ে যায় বা ব্যবহারকারীর দ্বারা বাতিল করা হয় তবে এটি SUBSCRIPTION_STATE_PENDING_PURCHASE_EXPIRED যায়। লেনদেনটি শেষ হওয়ার পরে আপনাকে অবশ্যই ব্যবহারকারীর এনটাইটেলমেন্ট আপডেট করতে হবে।

মুলতুবি লেনদেনের সাথে প্রাথমিক ক্রয়ের জন্য সাবস্ক্রিপশন রাষ্ট্রীয় পরিবর্তন সোজা। ব্যবহারকারী যখন মুলতুবি লেনদেন শুরু করে তখন আপনার অ্যাপ্লিকেশনটি PENDING অবস্থার সাথে একটি Purchase গ্রহণ করে। লেনদেনটি শেষ হয়ে গেলে, আপনার অ্যাপ্লিকেশনটি PURCHASED আপডেট হওয়া রাষ্ট্রের সাথে আবার Purchase গ্রহণ করে। টাইপ SUBSCRIPTION_PURCHASED সহ একটি SubscriptionNotification বার্তা আপনার আরটিডিএন ক্লায়েন্টকে প্রেরণ করা হয়েছে। ক্রয়টি যাচাই করতে, ব্যবহারকারীকে সামগ্রীতে অ্যাক্সেস দিন এবং ক্রয়ের স্বীকৃতি দেওয়ার জন্য সাধারণ প্রক্রিয়াটি অনুসরণ করুন। যদি লেনদেনের মেয়াদ শেষ হয়ে যায় বা বাতিল করা হয় তবে SubscriptionNotification বার্তাটি টাইপ SUBSCRIPTION_PENDING_PURCHASE_CANCELED সহ আপনার আরটিডিএন ক্লায়েন্টকে প্রেরণ করা হয়েছে। এই জাতীয় ক্ষেত্রে, ব্যবহারকারীর সামগ্রীতে অ্যাক্সেস পাওয়া উচিত ছিল না।

মুলতুবি লেনদেনের সাথে টপ-আপ, আপগ্রেড বা ডাউনগ্রেড পুরানো এবং নতুন উভয় সাবস্ক্রিপশন জন্য রাষ্ট্রীয় পরিবর্তন জড়িত। যখন ব্যবহারকারী কোনও মুলতুবি টপ-আপ, আপগ্রেড বা ডাউনগ্রেড লেনদেন শুরু করে, তখন আপনার অ্যাপ্লিকেশনটি একটি PendingPurchaseUpdate অবজেক্টের সাথে পুরানো সাবস্ক্রিপশনের জন্য একটি Purchase গ্রহণ করে। এই মুহুর্তে, ব্যবহারকারী এখনও পুরানো সাবস্ক্রিপশনটির মালিক এবং এখনও নতুন সাবস্ক্রিপশন অর্জন করতে পারেনি। PendingPurchaseUpdate অবজেক্টে getProducts() এবং getPurchaseToken() কল করা পণ্য আইডিগুলি ফেরত দেয় এবং নতুন সাবস্ক্রিপশনটির টোকেন ক্রয় করে। যখন লেনদেনটি সম্পন্ন হয়, আপনার অ্যাপ্লিকেশনটি নতুন সাবস্ক্রিপশনটির জন্য শীর্ষ-স্তরের ক্রয় টোকেন সেট এবং স্টেট PURCHASED জন্য সেট সহ একটি Purchase গ্রহণ করে। টাইপ SUBSCRIPTION_PURCHASED সহ একটি SubscriptionNotification বার্তা আপনার আরটিডিএন ক্লায়েন্টকে প্রেরণ করা হয়েছে। কেবলমাত্র এই মুহুর্তে, আপনার পুরানো ক্রয় টোকেনটি নতুন ক্রয় টোকেনের সাথে প্রতিস্থাপন করা উচিত এবং সামগ্রীতে ব্যবহারকারীর অ্যাক্সেস আপডেট করা উচিত। যদি লেনদেনের মেয়াদ শেষ হয়ে যায় বা বাতিল করা হয় তবে SubscriptionNotification বার্তাটি টাইপ SUBSCRIPTION_PENDING_PURCHASE_CANCELED সহ আপনার আরটিডিএন ক্লায়েন্টকে প্রেরণ করা হয়েছে। এই জাতীয় ক্ষেত্রে, ব্যবহারকারীর এখনও পুরানো সাবস্ক্রিপশনের সামগ্রীতে অ্যাক্সেস থাকা উচিত।

,

এই বিষয়টি কীভাবে সাবস্ক্রিপশন লাইফসাইকেল ইভেন্টগুলি যেমন পুনর্নবীকরণ এবং মেয়াদোত্তীর্ণের মতো পরিচালনা করবেন তা বর্ণনা করে। এটি অতিরিক্ত সাবস্ক্রিপশন বৈশিষ্ট্যগুলি যেমন প্রচার সরবরাহ করে এবং আপনার ব্যবহারকারীদের তাদের নিজস্ব সাবস্ক্রিপশন পরিচালনা করতে দেয়।

আপনি যদি আপনার অ্যাপ্লিকেশনটির জন্য সাবস্ক্রিপশন পণ্যগুলি কনফিগার না করে থাকেন তবে আপনার পণ্যগুলি তৈরি এবং কনফিগার করুন দেখুন।

সদস্যতা ওভারভিউ

একটি সাবস্ক্রিপশন একটি নির্দিষ্ট সময়কালের সময় ব্যবহারকারীরা অ্যাক্সেস করতে পারে এমন সুবিধাগুলির একটি সেট উপস্থাপন করে। উদাহরণস্বরূপ, একটি সাবস্ক্রিপশন কোনও ব্যবহারকারীকে সঙ্গীত স্ট্রিমিং পরিষেবাটি অ্যাক্সেস করার অধিকারী হতে পারে।

আপনার একই অ্যাপ্লিকেশনটির মধ্যে একাধিক সাবস্ক্রিপশন থাকতে পারে, হয় বিভিন্ন বেনিফিটের সেটগুলি উপস্থাপন করতে, বা একক বেনিফিটের বিভিন্ন স্তর ("সিলভার" এবং "সোনার" স্তরগুলি) উপস্থাপন করতে পারে।

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

সাবস্ক্রিপশন পণ্য, বেস প্ল্যান এবং অফারগুলির বিশদ বিবরণের জন্য, Play Console সহায়তা কেন্দ্রে ডকুমেন্টেশন দেখুন।

প্রিপেইড পরিকল্পনা সংহতকরণ

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

টপ-আপগুলির জন্য, আপনি মূল ক্রয়ের সাথে যেমন বিলিং প্রবাহটি চালু করুন। আপনার কোনও ক্রয় শীর্ষ-আপ তা নির্দেশ করার দরকার নেই।

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

একটি শীর্ষ-আপের পরে, Purchase ফলাফলের অবজেক্টের নিম্নলিখিত ক্ষেত্রগুলি সর্বাধিক সাম্প্রতিক টপ-আপ ক্রয়ের প্রতিফলনের জন্য আপডেট করা হয়েছে:

  • অর্ডার আইডি
  • ক্রয়ের সময়
  • স্বাক্ষর
  • টোকেন ক্রয় করুন
  • স্বীকৃত

নিম্নলিখিত Purchase ক্ষেত্রগুলিতে সর্বদা মূল ক্রয়টিতে পাওয়া একই ডেটা থাকে:

  • প্যাকেজের নাম
  • ক্রয় রাষ্ট্র
  • পণ্য
  • অটো পুনর্নবীকরণ

প্রিপেইড ক্রয় স্বীকৃতি

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

সংক্ষিপ্ত প্রিপেইড পরিকল্পনার সময়কালের সম্ভাবনার কারণে, যত তাড়াতাড়ি সম্ভব ক্রয়টি স্বীকার করা গুরুত্বপূর্ণ।

এক সপ্তাহ বা তার বেশি সময়কাল সহ প্রিপেইড পরিকল্পনাগুলি অবশ্যই তিন দিনের মধ্যে স্বীকৃত হতে হবে।

এক সপ্তাহেরও কম সময়কালের সাথে প্রিপেইড পরিকল্পনাগুলি অবশ্যই পরিকল্পনার অর্ধেকের মধ্যে স্বীকৃত হতে হবে। উদাহরণস্বরূপ, বিকাশকারীদের তিন দিনের প্রিপেইড পরিকল্পনাটি স্বীকার করতে 1.5 দিন সময় রয়েছে।

কিস্তি সাবস্ক্রিপশন ইন্টিগ্রেশন

একটি কিস্তি সাবস্ক্রিপশন হ'ল এক ধরণের সাবস্ক্রিপশন যেখানে ব্যবহারকারীরা পুরো সাবস্ক্রিপশন ফি সামনে অর্থ প্রদানের পরিবর্তে একাধিক কিস্তিতে সাবস্ক্রিপশনের জন্য অর্থ প্রদান করে।

কিস্তি সাবস্ক্রিপশন জন্য অতিরিক্ত বিবেচনা:

  • দেশের উপলভ্যতা : কিস্তি সাবস্ক্রিপশন বৈশিষ্ট্যগুলি কেবল ব্রাজিল, ফ্রান্স, ইতালি এবং স্পেনে পাওয়া যায় (সর্বশেষ প্রাপ্যতার জন্য কনসোল চেক করুন)।
  • মূল্য নির্ধারণ : কনসোলে একটি কিস্তি সাবস্ক্রিপশন জন্য মূল্য নির্ধারণ করার সময়, দামটি মাসিক প্রদানের পরিমাণের প্রতিনিধিত্ব করে। এটি সেট করা প্রতিশ্রুতিবদ্ধ সময়ের সাথে মিলিত, ক্রয় স্ক্রিনে সাবস্ক্রিপশনের জন্য মোট পরিমাণ উত্পন্ন করে।
  • প্রতিশ্রুতিবদ্ধ সময়কাল : প্রাথমিক সাবস্ক্রিপশন প্রতিশ্রুতির মোট সময়কাল, যার সময় মাসিক অর্থ প্রদানের প্রয়োজন হয়। উদাহরণস্বরূপ, যদি কোনও বেস পরিকল্পনার 15 মাসের প্রতিশ্রুতিবদ্ধ সময়কাল থাকে তবে ব্যবহারকারী এই সময়ের মধ্যে 15 মাসিক অর্থ প্রদান করবেন।
  • পুনর্নবীকরণ : কিস্তি সাবস্ক্রিপশনের প্রসঙ্গে, "পুনর্নবীকরণ" একটি প্রতিশ্রুতি সময়কালের সমাপ্তির ইঙ্গিত দেয়, হয় প্রাথমিক প্রতিশ্রুতি সময়কাল বা পরবর্তী প্রতিশ্রুতিবদ্ধ সময়কাল। প্রাথমিক সাইন আপের পরে, প্রথম পুনর্নবীকরণটি পুরো প্রাথমিক প্রতিশ্রুতি সময়কালের সমাপ্তির পরে ঘটে। পরবর্তী প্রতিটি প্রতিশ্রুতিবদ্ধ সময়কালের পরে পরবর্তী পুনর্নবীকরণগুলি ঘটে। কিস্তি সাবস্ক্রিপশনগুলির জন্য পুনর্নবীকরণের ধরণগুলি "অটো-রাইঙ্কস মাসিক" বা "একই সময়ের জন্য অটো-পুনর্নবীকরণ" হতে পারে। "অটো-পুনর্নবীকরণ মাসিক" এর জন্য, পরবর্তী কোনও প্রতিশ্রুতি নেই এবং পরিকল্পনাটি একটি মাসিক সাবস্ক্রিপশনের মতো আচরণ করে যেখানে প্রতিটি মাসিক সাবস্ক্রিপশন চার্জ একটি পুনর্নবীকরণ গঠন করে।
  • বিলিং পিরিয়ড : কিস্তি সাবস্ক্রিপশনগুলির প্রসঙ্গে, এটি বেস পরিকল্পনায় উল্লিখিত হিসাবে পৃথক অর্থ প্রদান করা হয় এমন পুনরাবৃত্তির ব্যবধানকে বোঝায়।
  • পরিকল্পনা পরিবর্তন বনাম মূল্য পরিবর্তন আচরণ : দাম পরিবর্তন এবং বাতিলকরণের জন্য, প্রতিশ্রুতি দৃ firm ়। এর অর্থ হ'ল যদি কোনও ব্যবহারকারী বাতিল করতে চান বা কোনও বিকাশকারী দাম পরিবর্তন করতে চান তবে পরিবর্তনটি একটি প্রতিশ্রুতি সময়কালের শেষে কার্যকর হয়। পরিকল্পনার পরিবর্তনের জন্য, প্রতিশ্রুতি দৃ firm ় নয়। এর অর্থ হ'ল পরিকল্পনার পরিবর্তনটি কোনও প্রতিশ্রুতিবদ্ধ সময় শেষ না হওয়া পর্যন্ত অপেক্ষা করতে হবে না, এটি সেট রিপ্লেসমেন্ট মোডের ভিত্তিতে অবিলম্বে বা পরবর্তী অর্থ প্রদানের তারিখে কার্যকর হয়।
  • একই সাবস্ক্রিপশন পরিকল্পনা পরিবর্তন : পরিকল্পনা পরিবর্তন একটি কিস্তি বেস পরিকল্পনা থেকে একই সাবস্ক্রিপশন পণ্যের একটি অ-স্থাপনা বেস প্ল্যানে অনুমোদিত নয়।
  • রিয়েল-টাইম বিকাশকারী বিজ্ঞপ্তি (আরটিডিএনএস) : প্রতিশ্রুতিবদ্ধ সময়কালের জন্য অর্থ প্রদানের সময় ব্যবহারকারী-উদ্যোগী বাতিলকরণের পরে অবিলম্বে একটি SUBSCRIPTION_CANCELLATION_SCHEDULED আরটিডিএন প্রেরণ করা হয়। বাতিলকরণ মুলতুবি রয়েছে এবং কেবল প্রতিশ্রুতিবদ্ধ সময়কালের শেষে কার্যকর হবে। তারপরে, যদি ব্যবহারকারীর দ্বারা পুনরুদ্ধার না করা হয় তবে SUBSCRIPTION_CANCELED এবং SUBSCRIPTION_EXPIRED আরটিডিএনগুলি প্রতিশ্রুতিবদ্ধ সময়কালের শেষে প্রেরণ করা হয়।

  • পরিশোধ / উপার্জন উপলব্ধি : ব্যবহারকারীরা অন্যান্য সমস্ত সাবস্ক্রিপশনের মতো একই শর্ত সাপেক্ষে তাদের মাসিক অর্থ প্রদান করার কারণে বিকাশকারী পরিশোধগুলি ঘটবে। ব্যবহারকারী কিস্তি সাবস্ক্রিপশনের জন্য সাইন আপ করার সময় বিকাশকারীদের সামনে অর্থ প্রদান করা হয় না।

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

  • বিলিং লাইব্রেরির প্রাপ্যতা খেলুন : installmentDetails ক্ষেত্রটি কেবল পিবিএল 7 বা তার পরে উপলব্ধ। পিবিএল 5 এবং তার পরে, কিস্তি সাবস্ক্রিপশনটি queryProductDetails() ব্যবহার করে ফিরে আসে, তবে সাবস্ক্রিপশনে পরিকল্পনার প্রতিশ্রুতিবদ্ধ অর্থ প্রদানের গণনার মতো বিস্তারিত কিস্তি তথ্য অন্তর্ভুক্ত করা হবে না।

ব্যবহারকারীদের একটি সদস্যতা পরিচালনা করার অনুমতি দিতে গভীর লিঙ্ক ব্যবহার করুন৷

আপনার অ্যাপ্লিকেশনটিতে একটি সেটিংস বা পছন্দসই স্ক্রিনে একটি লিঙ্ক অন্তর্ভুক্ত করা উচিত যা ব্যবহারকারীদের তাদের সাবস্ক্রিপশনগুলি পরিচালনা করতে দেয়, যা আপনি আপনার অ্যাপ্লিকেশনটির প্রাকৃতিক চেহারা এবং অনুভূতিতে অন্তর্ভুক্ত করতে পারেন।

আপনি আপনার অ্যাপ্লিকেশন থেকে অ-এক্সপ্রেড সাবস্ক্রিপশনগুলির জন্য গুগল প্লে সাবস্ক্রিপশন সেন্টারে একটি গভীর লিঙ্ক অন্তর্ভুক্ত করতে পারেন, যা আপনি সাবস্ক্রিপশন রিসোর্সের subscriptionState ক্ষেত্রটি ব্যবহার করে নির্ধারণ করতে পারেন। এর উপর ভিত্তি করে, প্লে স্টোর সাবস্ক্রিপশন সেন্টারে আপনি গভীর লিঙ্ক করতে পারেন এমন বেশ কয়েকটি উপায় রয়েছে।

চিত্রগুলি 1 এবং 2 এ দেখানো হয়েছে এমন সমস্ত সাবস্ক্রিপশন দেখায় এমন পৃষ্ঠায় ব্যবহারকারীদের সরাসরি নির্দেশ দেওয়ার জন্য নিম্নলিখিত ইউআরএলটি ব্যবহার করুন:

https://play.google.com/store/account/subscriptions
প্লে স্টোর সাবস্ক্রিপশন স্ক্রিনটি কোনও ব্যবহারকারীর গুগল প্লে-বিলযুক্ত সাবস্ক্রিপশনগুলির জন্য স্থিতি দেখায়।
চিত্র 1। প্লে স্টোর সাবস্ক্রিপশন স্ক্রিনটি কোনও ব্যবহারকারীর গুগল প্লে-বিলযুক্ত সাবস্ক্রিপশনগুলির জন্য স্থিতি দেখায়।


অতিরিক্ত বিশদ দেখতে সাবস্ক্রিপশনে আলতো চাপুন।
চিত্র 2। অতিরিক্ত বিশদ দেখতে সাবস্ক্রিপশনে আলতো চাপুন।

এই গভীর লিঙ্কটি কোনও ব্যবহারকারীকে প্লে স্টোর সাবস্ক্রিপশন কেন্দ্র থেকে বাতিল সাবস্ক্রিপশন পুনরুদ্ধার করতে সহায়তা করতে কার্যকর হতে পারে।

অ-এক্স-প্রজনিত সাবস্ক্রিপশনের জন্য সরাসরি পরিচালনা পৃষ্ঠায় লিঙ্ক করতে, ক্রয়কৃত সাবস্ক্রিপশনের সাথে সম্পর্কিত প্যাকেজের নাম এবং productId নির্দেশ করুন। কোনও বিদ্যমান সাবস্ক্রিপশনের জন্য productId প্রোগ্রামগতভাবে নির্ধারণ করতে, আপনার অ্যাপ্লিকেশনটির ব্যাকএন্ডটি জিজ্ঞাসা করুন বা কোনও নির্দিষ্ট ব্যবহারকারীর সাথে সম্পর্কিত সাবস্ক্রিপশনের তালিকার জন্য BillingClient.queryPurchasesAsync() কল করুন। প্রতিটি সাবস্ক্রিপশনে সাবস্ক্রিপশন স্থিতি তথ্যের অংশ হিসাবে সংশ্লিষ্ট productId থাকে। সাবস্ক্রিপশন ক্রয়ের সাথে যুক্ত প্রতিটি SubscriptionPurchaseLineItem অবজেক্টে ব্যবহারকারী সেই লাইন আইটেমটিতে কিনেছিলেন এমন সাবস্ক্রিপশনের সাথে যুক্ত productId মান রয়েছে।

ব্যবহারকারীদের নির্দিষ্ট সাবস্ক্রিপশন ম্যানেজমেন্ট স্ক্রিনে সরাসরি "আপনার সাব-প্রোডাক্ট-আইডি" এবং "আপনার অ্যাপ্লিকেশন-প্যাকেজ" প্রতিস্থাপনের জন্য যথাক্রমে productId এবং অ্যাপ প্যাকেজের নামের সাথে ব্যবহার করুন:

https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package

এরপরে ব্যবহারকারী তাদের অর্থ প্রদানের পদ্ধতিগুলি এবং বাতিলকরণ, পুনরায় জমা দেওয়া এবং বিরতি সহ অ্যাক্সেস বৈশিষ্ট্যগুলি পরিচালনা করতে সক্ষম হয়।

ব্যবহারকারীদের আপগ্রেড, ডাউনগ্রেড বা তাদের সদস্যতা পরিবর্তন করার অনুমতি দিন

আপনি বিদ্যমান গ্রাহকদের তাদের প্রয়োজনীয়তাগুলি আরও ভালভাবে মেটাতে তাদের সাবস্ক্রিপশন পরিকল্পনা পরিবর্তন করতে বিভিন্ন বিকল্পের সাথে সরবরাহ করতে পারেন:

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

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

চিত্র 3 তিনটি পৃথক পরিকল্পনা সহ একটি উদাহরণ অ্যাপ্লিকেশন দেখায়:

এই অ্যাপ্লিকেশনটিতে তিনটি সাবস্ক্রিপশন স্তর রয়েছে ..
চিত্র 3। এই অ্যাপ্লিকেশনটিতে তিনটি সাবস্ক্রিপশন স্তর রয়েছে।

আপনার অ্যাপ্লিকেশন চিত্র 3 এর অনুরূপ একটি স্ক্রিন প্রদর্শন করতে পারে, ব্যবহারকারীদের তাদের সাবস্ক্রিপশন পরিবর্তন করার বিকল্পগুলি দেয়। সমস্ত ক্ষেত্রে, এটি ব্যবহারকারীদের তাদের বর্তমান সাবস্ক্রিপশন পরিকল্পনা কী এবং এটি পরিবর্তন করার জন্য তাদের কী বিকল্প রয়েছে তা স্পষ্ট হওয়া উচিত।

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

প্রতিস্থাপন মোড

নিম্নলিখিত টেবিলটি উপলভ্য প্রতিস্থাপন মোড এবং উদাহরণ ব্যবহার এবং প্রদত্ত প্রদানের গণনা তালিকাভুক্ত করে।

প্রতিস্থাপন মোড

বর্ণনা

উদাহরণ ব্যবহার

প্রদত্ত হিসাবে রেকর্ড করা অর্থ প্রদান (কিস্তি সাবস্ক্রিপশন প্রতিস্থাপনের জন্য)

WITH_TIME_PRORATION

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

কোনও তাত্ক্ষণিক অতিরিক্ত অর্থ প্রদান ছাড়াই আরও ব্যয়বহুল স্তরে আপগ্রেড করুন।

0

CHARGE_PRORATED_PRICE

সাবস্ক্রিপশনটি অবিলম্বে আপগ্রেড করা হয়েছে, এবং বিলিং চক্রটি একই রয়েছে। অবশিষ্ট সময়ের জন্য দামের পার্থক্যটি তখন ব্যবহারকারীর কাছে চার্জ করা হয়।

দ্রষ্টব্য: এই বিকল্পটি কেবল সাবস্ক্রিপশন আপগ্রেডের জন্য উপলব্ধ, যেখানে প্রতি ইউনিটের দাম বৃদ্ধি পায়।

বিলিংয়ের তারিখ পরিবর্তন না করে আরও ব্যয়বহুল স্তরে আপগ্রেড করুন।

1

CHARGE_FULL_PRICE

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

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

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

1 (দ্রষ্টব্য: 0 যদি নতুন সাবস্ক্রিপশনের একটি নিখরচায় পরীক্ষা থাকে))

WITHOUT_PRORATION

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

কোনও অবশিষ্ট অবশিষ্ট সময় ধরে রাখার সময় একটি উচ্চতর সাবস্ক্রিপশন স্তরে আপগ্রেড করুন।

0

DEFERRED

সাবস্ক্রিপশনটি কেবল তখনই আপগ্রেড বা ডাউনগ্রেড করা হয় যখন সাবস্ক্রিপশনটি পুনর্নবীকরণ হয়, তবে নিম্নলিখিত দুটি আইটেম সহ নতুন ক্রয়টি অবিলম্বে জারি করা হয়:

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

দ্রষ্টব্য: কিস্তি সাবস্ক্রিপশনগুলির জন্য, পরবর্তী অর্থ প্রদানের তারিখের শুরুতে পরিকল্পনা পরিবর্তন ঘটে।

কম ব্যয়বহুল স্তরে ডাউনগ্রেড করুন।

1

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

একটি ক্রয়ের জন্য প্রতিস্থাপন মোড সেট করুন

আপনি আপনার পছন্দ এবং ব্যবসায়িক যুক্তির উপর ভিত্তি করে বিভিন্ন ধরণের সাবস্ক্রিপশন ট্রানজিশনের জন্য বিভিন্ন প্রতিস্থাপন মোড ব্যবহার করতে পারেন। এই বিভাগটি কীভাবে সাবস্ক্রিপশন পরিবর্তন এবং প্রযোজ্য সীমাবদ্ধতাগুলির জন্য একটি প্রতিস্থাপন মোড সেট করবেন তা ব্যাখ্যা করে।

একই সাবস্ক্রিপশনের মধ্যে পুনরায় সাবস্ক্রাইব করুন বা পরিকল্পনাগুলি স্যুইচ করুন

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

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

সাবস্ক্রিপশন জুড়ে পরিকল্পনাগুলি স্যুইচ করুন, বা ডিফল্ট প্রতিস্থাপন মোডটি ওভাররাইড করুন

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

আপনার রানটাইম ক্রয় প্রবাহ কনফিগারেশনের অংশ হিসাবে সঠিকভাবে SubscriptionUpdateParams সরবরাহ করতে, নিম্নলিখিত বিধিনিষেধগুলি নোট করুন:

  • প্রিপেইড পরিকল্পনা, অটো-পুনর্নবীকরণ পরিকল্পনা বা কিস্তি পরিকল্পনা থেকে প্রিপেইড পরিকল্পনায় আপগ্রেড, ডাউনগ্রেডিং বা একই সাবস্ক্রিপশন স্যুইচ করা শুরু করার সময়, কেবলমাত্র অনুমোদিত প্রতিস্থাপন মোডটি CHARGE_FULL_PRICE । আপনি যদি অন্য কোনও প্রতিস্থাপন মোড নির্দিষ্ট করেন তবে ক্রয় ব্যর্থ হয় এবং ব্যবহারকারীকে একটি ত্রুটি দেখানো হয়।
  • প্রিপেইড পরিকল্পনা বা অটো-পুনর্নবীকরণ পরিকল্পনা থেকে একটি অটো-পুনর্নবীকরণ পরিকল্পনার একই সাবস্ক্রিপশনের মধ্যে পরিকল্পনাগুলি স্যুইচ করার সময়, বৈধ প্রেশন মোডগুলি CHARGE_FULL_PRICE এবং_প্রেশন WITHOUT_PRORATION হয়। আপনি যদি অন্য কোনও প্রোরেশন মোড নির্দিষ্ট করেন তবে ক্রয় ব্যর্থ হয় এবং ব্যবহারকারীকে একটি ত্রুটি দেখানো হয়।
  • একই সাবস্ক্রিপশন পণ্যের মধ্যে একটি কিস্তি বেস পরিকল্পনা থেকে অ-ইনসালমেন্টস বেস প্ল্যানে পরিকল্পনাগুলি স্যুইচ করার অনুমতি নেই।

প্রতিস্থাপনের উদাহরণ এবং আচরণ

প্রতিটি প্রেশন মোড কীভাবে কাজ করে তা বুঝতে, নিম্নলিখিত দৃশ্যটি বিবেচনা করুন:

স্যামওয়াইয়ের দেশীয় উদ্যান অ্যাপ্লিকেশন থেকে অনলাইন সামগ্রীর সাবস্ক্রিপশন রয়েছে। বিষয়বস্তুর টিয়ার 1 সংস্করণে তাঁর একটি মাসিক সাবস্ক্রিপশন রয়েছে, যা কেবলমাত্র পাঠ্য। এই সাবস্ক্রিপশনে তার প্রতি মাসে 2 ডলার ব্যয় হয় এবং এটি মাসের প্রথম দিকে নবায়ন করে।

15 এপ্রিল, স্যামওয়াই টায়ার 2 সাবস্ক্রিপশনের বার্ষিক সংস্করণে আপগ্রেড করতে বেছে নিয়েছে, যার মধ্যে ভিডিও আপডেটগুলি অন্তর্ভুক্ত রয়েছে এবং প্রতি বছর $ 36 খরচ হয়।

সাবস্ক্রিপশনটি আপগ্রেড করার সময়, বিকাশকারী একটি প্রেশন মোড নির্বাচন করে। নিম্নলিখিত তালিকাটি বর্ণনা করে যে প্রতিটি প্রেশন মোড কীভাবে স্যামওয়াইয়ের সাবস্ক্রিপশনকে প্রভাবিত করে:

WITH_TIME_PRORATION

স্যামওয়াইজের টিয়ার 1 সাবস্ক্রিপশন অবিলম্বে শেষ হয়। যেহেতু তিনি পুরো মাসের জন্য (এপ্রিল 1-30) অর্থ প্রদান করেছিলেন তবে সাবস্ক্রিপশন পিরিয়ডের মধ্য দিয়ে অর্ধেকটি আপগ্রেড করেছেন, এক মাসের সাবস্ক্রিপশনের অর্ধেক ($ 1) তার নতুন সাবস্ক্রিপশনে প্রয়োগ করা হয়েছে। তবে, যেহেতু নতুন সাবস্ক্রিপশনের দাম প্রতি বছর $ 36, $ 1 ক্রেডিট ব্যালেন্সটি কেবল 10 দিনের জন্য (16-25 এপ্রিল) প্রদান করে; সুতরাং 26 এপ্রিল, তাকে একটি নতুন সাবস্ক্রিপশনের জন্য $ 36 এবং আরও একটি $ 36 এপ্রিল প্রতি বছরের 26 শে এপ্রিল চার্জ করা হয়েছে।

ক্রয়টি সফল হওয়ার মুহুর্তে আপনার অ্যাপ্লিকেশনটির PurchasesUpdatedListener কল করা উচিত এবং আপনি একটি queryPurchasesAsync() কলের অংশ হিসাবে নতুন ক্রয়টি পুনরুদ্ধার করতে সক্ষম হবেন। আপনার ব্যাকএন্ডটি অবিলম্বে একটি SUBSCRIPTION_PURCHASED রিয়েল টাইম বিকাশকারী বিজ্ঞপ্তি গ্রহণ করে।

CHARGE_PRORATED_PRICE

এই মোডটি ব্যবহার করা যেতে পারে কারণ টাইম 2 সাবস্ক্রিপশন মূল্য প্রতি সময় ইউনিট ($ 36/বছর = $ 3/মাস) প্রতি সময় ইউনিট ($ 2/মাস) প্রতি স্তরের 1 সাবস্ক্রিপশন দামের চেয়ে বেশি। স্যামওয়াইজের টিয়ার 1 সাবস্ক্রিপশন অবিলম্বে শেষ হয়। যেহেতু তিনি পুরো মাসের জন্য অর্থ প্রদান করেছিলেন তবে এর অর্ধেকটি ব্যবহার করেছেন, তার নতুন সাবস্ক্রিপশনে এক মাসের সাবস্ক্রিপশন ($ 1) প্রয়োগ করা হয়েছে। তবে, যেহেতু সেই নতুন সাবস্ক্রিপশনের দাম $ 36/বছর, বাকি 15 দিনের দাম $ 1.50; সুতরাং তার নতুন সাবস্ক্রিপশনের জন্য তাকে $ 0.50 এর পার্থক্য চার্জ করা হয়েছে। ১ লা মে, সামওয়াইজকে তার নতুন সাবস্ক্রিপশন টিয়ারের জন্য $ 36 এবং নিম্নলিখিত বছরের 1 মে আরও 36 ডলার চার্জ করা হয়।

ক্রয়টি সফল হওয়ার মুহুর্তে আপনার অ্যাপ্লিকেশনটির PurchasesUpdatedListener কল করা উচিত এবং আপনি একটি queryPurchasesAsync() কলের অংশ হিসাবে নতুন ক্রয়টি পুনরুদ্ধার করতে সক্ষম হবেন। আপনার ব্যাকএন্ডটি অবিলম্বে একটি SUBSCRIPTION_PURCHASED রিয়েল টাইম বিকাশকারী বিজ্ঞপ্তি গ্রহণ করে।

WITHOUT_PRORATION

স্যামওয়াইয়ের টিয়ার 1 সাবস্ক্রিপশনটি তাত্ক্ষণিকভাবে কোনও অতিরিক্ত চার্জ ছাড়াই টিয়ার 2 এ উন্নীত করা হয়েছে এবং 1 ম মে তাকে তার নতুন সাবস্ক্রিপশন স্তরটির জন্য $ 36 এবং আরও $ 36 এর জন্য প্রতি বছরের 1 মে চার্জ করা হয়।

ক্রয়টি সফল হওয়ার মুহুর্তে আপনার অ্যাপ্লিকেশনটির PurchasesUpdatedListener কল করা উচিত এবং আপনি একটি queryPurchasesAsync() কলের অংশ হিসাবে নতুন ক্রয়টি পুনরুদ্ধার করতে সক্ষম হবেন। আপনার ব্যাকএন্ডটি অবিলম্বে একটি SUBSCRIPTION_PURCHASED রিয়েল টাইম বিকাশকারী বিজ্ঞপ্তি গ্রহণ করে।

DEFERRED

স্যামওয়াইয়ের টিয়ার 1 সাবস্ক্রিপশন 30 এপ্রিল শেষ না হওয়া পর্যন্ত অব্যাহত রয়েছে। 1 ই মে, টিয়ার 2 সাবস্ক্রিপশনটি কার্যকর হয়, এবং স্যামওয়াইজকে তার নতুন সাবস্ক্রিপশন স্তরের জন্য $ 36 চার্জ করা হয়।

ক্রয়টি সফল হওয়ার মুহুর্তে আপনার অ্যাপ্লিকেশনটির PurchasesUpdatedListener কল করা উচিত এবং আপনি একটি queryPurchasesAsync() কলের অংশ হিসাবে নতুন ক্রয়টি পুনরুদ্ধার করতে সক্ষম হবেন। আপনার ব্যাকএন্ডটি অবিলম্বে একটি SUBSCRIPTION_PURCHASED রিয়েল টাইম বিকাশকারী বিজ্ঞপ্তি গ্রহণ করে। আপনার ক্রয়টি একইভাবে প্রক্রিয়া করা উচিত যে আপনি সেই সময়ে অন্য কোনও নতুন ক্রয় প্রক্রিয়া করবেন। বিশেষত, আপনি নতুন ক্রয়টি স্বীকার করেছেন তা নিশ্চিত করুন। নোট করুন যে নতুন সাবস্ক্রিপশনটির startTime প্রতিস্থাপন কার্যকর হওয়ার মুহুর্তে পপুলেট করা হয়েছে, যা পুরানো সাবস্ক্রিপশনটির মেয়াদ শেষ হয়ে গেলে ঘটে। এই মুহুর্তে, আপনি নতুন সাবস্ক্রিপশন পরিকল্পনার জন্য একটি SUBSCRIPTION_RENEWED আরটিডিএন পান। হ্যান্ডেল মুলতুবি প্রতিস্থাপনে ReplacementMode.DEFERRED আচরণ সম্পর্কে আরও পড়ুন।

CHARGE_FULL_PRICE

স্যামওয়াইজের টিয়ার 1 সাবস্ক্রিপশন অবিলম্বে শেষ হয়। তার টিয়ার 2 সাবস্ক্রিপশন আজ শুরু হয় এবং তাকে 36 ডলার চার্জ করা হয়। যেহেতু তিনি পুরো মাসের জন্য অর্থ প্রদান করেছিলেন তবে এর অর্ধেকটি ব্যবহার করেছেন, তার নতুন সাবস্ক্রিপশনে এক মাসের সাবস্ক্রিপশন ($ 1) প্রয়োগ করা হয়েছে। যেহেতু সেই নতুন সাবস্ক্রিপশনের দাম $ 36/বছর, তিনি তার সাবস্ক্রিপশন পিরিয়ডে (10 দিন) যোগ করা এক বছরের 1/36 তম পাবেন। অতএব, স্যামওয়াইয়ের পরবর্তী চার্জটি আজ থেকে 1 বছর এবং 10 দিন হবে $ 36 এর জন্য। এর পরে, তার পরে প্রতি বছর $ 36 চার্জ করা হয়।

প্রেশন মোডটি বেছে নেওয়ার সময়, আমাদের প্রতিস্থাপনের সুপারিশগুলি পর্যালোচনা করতে ভুলবেন না।

ট্রিগার সাবস্ক্রিপশন ইন-অ্যাপ্লিকেশন পরিবর্তন

Your app can offer users an upgrade or downgrade using the same steps as with launching a purchase flow . However, when upgrading or downgrading, you need to provide details for the current subscription, the future (upgraded or downgraded) subscription, and the replacement mode to use, as shown in the following example:

কোটলিন

val offerToken = productDetails
        .getSubscriptionOfferDetails(selectedOfferIndex)
        .getOfferToken()

val billingParams = BillingFlowParams.newBuilder().setProductDetailsParamsList(
       listOf(
           BillingFlowParams.ProductDetailsParams.newBuilder()
               .setProductDetails(productDetails)
               .setOfferToken(offerToken)
               .build()
       )
       ).setSubscriptionUpdateParams(
           BillingFlowParams.SubscriptionUpdateParams.newBuilder()
               .setOldPurchaseToken("old_purchase_token")
               .setSubscriptionReplacementMode(
                 BillingFlowParams.ReplacementMode.CHARGE_FULL_PRICE
               )
               .build()
       ).build()

billingClient.launchBillingFlow(
    activity,
    billingParams
   )
// ...

জাভা

String offerToken = productDetails
    .getSubscriptionOfferDetails(selectedOfferIndex)
    .getOfferToken();

BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(
        ImmuableList.of(
            ProductDetailsParams.newBuilder()
                // fetched via queryProductDetailsAsync
                .setProductDetails(productDetails)
                // offerToken can be found in
                // ProductDetails=>SubscriptionOfferDetails
                .setOfferToken(offerToken)
                .build()))
    .setSubscriptionUpdateParams(
        SubscriptionUpdateParams.newBuilder()
            // purchaseToken can be found in Purchase#getPurchaseToken
            .setOldPurchaseToken("old_purchase_token")
            .setSubscriptionReplacementMode(ReplacementMode.CHARGE_FULL_PRICE)
            .build())
    .build();

BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
// ...

Replacement recommendations

The following table shows diferrent proration scenarios along with what we recommend for each scenario:

দৃশ্যকল্প Recommended replacement mode ফলাফল
Upgrading to a more expensive tier CHARGE_PRORATED_PRICE The user receives access immediately while keeping the same billing period.
Downgrading to a less expensive tier DEFERRED The user already paid for the more expensive tier, so they keep access until the next billing date.
Upgrading while in a free trial, keeping the trial WITHOUT_PRORATION The user upgrades to a higher tier for the remainder of the trial period without extra charge.
Upgrading while in a free trial - ending access to the free trial CHARGE_PRORATED_PRICE The user receives access to the new tier immediately, the remaining value of the free trial is carried over. The carried over value is calculated based on base plan pricing.

Handle subscription change purchases

Changes of plan are new purchases for all terms and purposes, and they should be processed and acknowledged as such after the billing flow completes successfully. In addition to processing the new purchase appropriately, you have to retire the purchase that is being replaced.

The in-app behavior is the same as for any new purchase. Your app receives the outcome of the new purchase in your PurchasesUpdatedListener , and the new purchase is available in queryPurchasesAsync .

The Google Play Developer API returns a linkedPurchaseToken in the subscription resource when a purchase replaces an existing one. Be sure to invalidate the token provided in the linkedPurchaseToken to ensure that the old token is not used to gain access to your services. See Upgrades, downgrades, and resignups for information on handling upgrade and downgrade purchases.

When you receive the new purchase token, follow the same verification process as with verifying a new purchase token . Make sure to acknowledge these purchases with BillingClient.acknowledgePurchase() from the Google Play Billing Library or Purchases.subscriptions:acknowledge from the Google Play Developer API.

Handle deferred replacement

Deferred replacement mode lets you let a user use up the remaining entitlement in their old plan before starting on the new plan.

When you use ReplacementMode.DEFERRED for a new purchase, queryPurchasesAsync() returns a new purchase token after the purchase flow that remains associated with the old product until the deferred replacement takes place on the next renewal date, after which the new product is returned.

In the past you could achieve this user experience with the deprecated ProrationMode.DEFERRED , but ProrationMode.DEFERRED is deprecated with Play Billing Library 6. See the following table to understand where the behavior differs:

সময়

ProrationMode.DEFERRED (deprecated)

ReplacementMode.DEFERRED

Right after the purchase flow succeeds (app)

PurchasesUpdatedListener is invoked after purchase with a status of whether the upgrade or downgrade was successful.

Entitlement to the old plan continues until the next renewal date. To ensure that the app gives the right entitlement, queryPurchasesAsync() returns a Purchase object with the original purchase token and the original entitlement until replacement occurs.

The new purchase token is not surfaced, so it can't be processed at this point.

PurchasesUpdatedListener gets invoked after purchase with a status of whether the upgrade or downgrade was successful.

queryPurchasesAsync() returns purchase with the new purchase token right away, and the original entitlement associated with it.

The new purchase token is surfaced, so it should be processed at this point taking into account when the replacement is to take place.

Right after the purchase flow succeeds (backend)

SUBSCRIPTION_PURCHASED RTDN is not sent after the purchase flow. The backend is not made aware of the new purchase yet.

SUBSCRIPTION_PURCHASED RTDN with the old product_id is sent immediately after the purchase flow for the new purchase token.

Calling the purchases.subscriptionsv2.get method with the new purchase token returns a purchase having a 'startTime' indicating the purchase time with two line items :

  • One representing the old entitlement and has an 'expiryTime' in the future. The old entitlement will not be renewed and has a DeferredItemReplacement containing the product of the new entitlement. This indicates a pending replacement of the old entitlement upon its expiration.
  • One representing the newly purchased entitlement. It has no value set for 'expiryTime'.

SUBSCRIPTION_EXPIRED sent for the old purchase token. When calling the purchases.subscriptionsv2.get method with the old purchase token, it appears as expired (the entitlement for the old plan is transferred to the new purchase for the remaining time).

On replacement - first renewal after the purchase flow (app)

queryPurchasesAsync() returns a new Purchase object with the new purchase token and entitlement.

The new purchase token is now surfaced, so it should be processed .

queryPurchasesAsync() returns purchase with the new purchase token right away, and the new entitlement associated with it.

The new purchase should have been processed already when the purchase flow succeeded, so the app shouldn't take any special action apart from making sure the right entitlement is granted.

On replacement - first renewal after the purchase flow (backend)

The new purchase can now be processed and acknowledged when the first SUBSCRIPTION_RENEWED RTDN is sent.

The linkedPurchaseToken in the subscription resource can be used to determine which user in your subscription backend, if applicable, should be updated with the new entitlement.

New purchase was processed and acknowledged when the SUBSCRIPTION_PURCHASED RTDN was sent for the new purchase token and recorded as the 'startTime'.

With ReplacementMode.DEFERRED, first renewals follow the standard behavior of any other renewal and you don't need to handle special logic for replacements when this event happens.

When calling the purchases.subscriptionsv2.get method with the new purchase token returns a purchase with two line items :

  • One representing the old entitlement, with an `expiryTime` in the past and no set value for DeferredItemReplacement .
  • One representing the new entitlement, with an `expiryTime` in the future and the auto_renewing_enabled flag turned on.

ReplacementMode.DEFERRED should be used from now on instead of the deprecated ProrationMode.DEFERRED, as it presents the same behavior regarding entitlement changes, but offers a way to manage the purchase that is more consistent with behaviors for other new purchases.

গ্রাহক ব্যবস্থাপনা

Using Real-time developer notifications, you can detect in real time when a user decides to cancel. When a user cancels, but before their subscription has expired, you can send them push notifications or in-app messages to ask them to resubscribe.

After a user has cancelled their subscription, you can try to win them back either in your app, or through the Play store. The following table describes various subscription scenarios along with associated winback actions and app requirements.

Before subscription expiration After subscription expiration
ইন-অ্যাপ In Play Store ইন-অ্যাপ In Play Store
Winback feature In-app subscription পুনরুদ্ধার করুন In-app subscription পুনরায় সদস্যতা
User goes through checkout flow হ্যাঁ না হ্যাঁ হ্যাঁ
User subscription remains associated with the same SKU User can sign up for same or different SKU হ্যাঁ User can sign up for same or different SKU হ্যাঁ
Creates new purchase token হ্যাঁ না হ্যাঁ হ্যাঁ
ডিফল্টরূপে সক্রিয় না Yes, support required for all devs না

Apps without Billing Library 2.0+: No

Apps with Billing Library 2.0+: Yes. Devs can opt-out in Console.

When user is charged

If using same SKU: end of current billing period.

If using different SKU: depends on proration mode.

End of current billing period অবিলম্বে অবিলম্বে
Implementation required Provide a re-signup UI in your app

Detect change in subscription state

Deep-link to Play Store

Provide a re-signup UI in your app Handle out-of-app purchases

Before subscription expiration - in-app

For subscriptions that have been canceled but have not yet expired, you can allow subscribers to restore their subscription within your app by applying the same in-app product purchase flow as for new subscribers. Ensure your UI reflects that the user has an existing subscription. For example, you might want to display the user's current expiration date and recurring price with a Reactivate button.

Most of the time, you will want to offer the user the same price and SKU they were already subscribed to, as follows:

  • Initiate a new subscription purchase with the same SKU.
  • The new subscription replaces the old one and renews on the same expiration date. The old subscription is immediately marked as expired.
  • As an example, Achilles has a subscription to Example Music App, and the subscription is due to expire on August 1. On July 10, he resubscribes to the one-month subscription at the same price per month. The new subscription is prorated with the remaining credit, is immediately active, and still renews on August 1.

If you would like to offer a different price—for example a new free trial or a winback discount—you can instead offer a different SKU to the user:

  • Initiate an upgrade or downgrade with the different SKU using the replacement mode WITHOUT_PRORATION .
  • The new subscription replaces the old one and renews on the same expiration date. The user is charged the price of the new SKU, including any introductory prices, on the original expiration date. If the old subscription was created using an obfuscated account id, that same id should be passed to the BillingFlowParams for upgrades and downgrades.
  • As an example, Achilles has a subscription to Example Music App, and the subscription is due to expire on August 1. On July 10, he resubscribes to an annual subscription with an introductory price. The new subscription is immediately active, and the user is charged the introductory price on August 1.
  • If you decide to include a free trial or intro price in your winback SKU, ensure that the user is eligible by unchecking the Allow one free trial per app box in the Google Play Console, which restricts the user to getting one free trial per app.

When you receive the purchase token, process the purchase just as you would with a new subscription. Additionally, the Google Play Developer API returns a linkedPurchaseToken in the subscription resource. Be sure to invalidate the token provided in the linkedPurchaseToken to ensure that the old token is not used to gain access to your services.

Before subscription expiration - in Play Store

While the subscription is canceled but still active, users can restore the subscription in the Google Play subscriptions center by clicking Resubscribe (previously Restore ). This keeps the same subscription and purchase token.

subscriptions section in the google play store app showing a
            cancelled subscription with a resubscribe button
Figure 8. Account > Subscriptions section in the Google Play Store app showing a cancelled subscription with a Resubscribe button.

For more information on restoring subscriptions, see Restorations .

After subscription expiration - in-app

You can allow expired subscribers to resubscribe within your app by applying the same in-app product purchase flow as for new subscribers. নিম্নলিখিত নোট করুন:

  • To offer users a discount, you might want to offer a product ID with special pricing for your subscription, also called a winback SKU . You can provide the offer in your app, or you can notify the user of the offer outside of the app, such as in email.
  • To start a winback subscription, launch the purchase flow in your Android app using the Google Play Billing Library. This is the same process as with a new subscription, but you can determine the SKU that is available to the user.
  • If you decide to include a free trial or intro price in your winback SKU, ensure that the user is eligible by unchecking the Allow one free trial per app box in the Google Play Console, which restricts the user to getting one free trial per app.
  • If the user resubscribes to the same SKU, they are no longer eligible for free trials or introductory price. Ensure that your UI reflects this.

When you receive the purchase token, process the purchase just as you would with a new subscription. You will not receive a linkedPurchaseToken in the subscription resource.

After subscription expiration - in Play Store

If enabled, users can resubscribe to the same SKU for up to one year after expiration by clicking Resubscribe in the Google Play subscriptions center. This generates a new subscription and purchase token.

subscriptions section in the google play store app showing a             cancelled and expired subscription with resubscribe and remove             বোতাম
Figure 9. Account > Subscriptions section in the Google Play Store app showing a cancelled and expired subscription with Resubscribe and Remove buttons.

Resubscribing is considered an out-of-app purchase, so be sure to follow best practices for handling purchases made from outside your app .

Promote your subscription

You can create promotion codes to give selected users an extended free trial to an existing subscription. To learn more, see Promo codes .

For free trials, Google Play verifies that the user has a valid payment method before starting the free trial. Some users may see this verification as a hold or charge on their payment method. This hold or charge is temporary and is later reversed or refunded.

After the trial period ends, the user's payment method is charged for the full subscription amount.

If a user cancels a subscription at any time during the free trial, the subscription remains active until the end of the trial, and they aren't charged when the free trial period ends.

Cancel, refund, or revoke

You can use the Google Play Developer API to cancel , refund , or revoke a subscription. This functionality is also available in the Google Play Console .

  • Cancel : Users can cancel a subscription on Google Play. You can also provide an option for users to cancel in your app or on your website. Your app should handle these cancellations as described in Cancellations .
  • Refund : When you refund, the user can continue to use the subscription. Refunds can be used if, for example, there was a technical error that prevented the user from accessing your product, but the error has been resolved. Note that to refund more than the most recent payment, or if you want to issue a partial refund, you must use the Google Play Console.
  • Revoke : When you revoke, the user immediately loses access to the subscription. This can be used if, for example, there was a technical error that prevented the user from accessing your product, and the user does not want to continue using the product. Your app should handle these cancellations as described in Revocations .

The following table illustrates the differences between cancel, refund, and revoke.

Stops renewal টাকা ফেরত অ্যাক্সেস প্রত্যাহার করুন
বাতিল করুন হ্যাঁ না না
ফেরত না হ্যাঁ না
প্রত্যাহার করুন হ্যাঁ হ্যাঁ হ্যাঁ

Defer billing for a subscriber

You can advance the next billing date for an auto-renewing subscriber by using Purchases.subscriptions:defer from the Google Play Developer API. During the deferral period, the user is subscribed to your content with full access but is not charged. The subscription renewal date is updated to reflect the new date.

For prepaid plans, you can use the defer billing API to defer the expiration time.

Deferred billing allows you to do the following:

  • Give users free access as a special offer, such as giving one week free for purchasing a movie.
  • Give free access to customers as a gesture of goodwill.

Billing can be deferred by as little as one day and by as long as one year per API call. To defer the billing even further, you can call the API again before the new billing date arrives.

As an example, Darcy has a monthly subscription to online content for the Fishing Quarterly app. She is normally billed £1.25 on the first of each month. In March, she participated in an online survey for the app publisher. The publisher rewards her with six free weeks by deferring the next payment until May 15, which is six weeks after her previously scheduled billing date of April 1. Darcy is not charged for April or the beginning of May and still has access to the content. On May 15, she is charged the normal £1.25 subscription fee for the month. Her next renewal date is now June 15.

When deferring, you might want to notify the user by email or within the app to notify them that their billing date has changed.

Handling payment declines

If there are payment issues with a subscription renewal, Google will periodically attempt to renew the subscription for some time before canceling. This recovery period can consists of a grace period, followed by an account hold period. During this time, Google sends the user emails and notifications prompting them to update their payment method.

Upon payment decline, the subscription enters a grace period if one is configured. During the grace period, you should ensure the user still has access to the subscription entitlements.

After any grace period has ended, the subscription enters an account hold period. During account hold, you should ensure the user does not have access to the subscription entitlements.

You can specify the length of each auto-renewing base plan's grace period and account hold in the Google Play Console. Specifying lengths less than the default values may reduce the number of subscriptions recovered from payment declines.

To maximize the likelihood of subscription recovery during a payment decline, you can inform your user of a payment issue and ask them to fix it.

You can either do this yourself, as described in the grace period and account hold sections, or you can implement the in-app messaging API, where Google shows a message to users in your app.

ইন-অ্যাপ মেসেজিং

If you've enabled in-app messaging with InAppMessageCategoryId.TRANSACTIONAL , Google Play will show users messaging during grace period and account hold once per day and provide them an opportunity to fix their payment without leaving the app.

Snackbar notifying the user to fix their payment
Figure 20. Snackbar notifying the user to fix their payment.

We recommend that you call this API whenever the user opens the app to determine whether the message should be shown.

If the user successfully recovered their subscription, you will receive a response code of SUBSCRIPTION_STATUS_UPDATED along with a purchase token. You should then use this purchase token to call the Google Play Developer API and refresh the subscription status in your app.

Integrate in-app messaging

To show in-app messaging to user, use BillingClient.showInAppMessages() .

Here is an example of triggering the in-app messaging flow:

কোটলিন

val inAppMessageParams = InAppMessageParams.newBuilder()
        .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL)
        .build()

billingClient.showInAppMessages(activity,
        inAppMessageParams,
        object : InAppMessageResponseListener() {
            override fun onInAppMessageResponse(inAppMessageResult: InAppMessageResult) {
                if (inAppMessageResult.responseCode == InAppMessageResponseCode.NO_ACTION_NEEDED) {
                    // The flow has finished and there is no action needed from developers.
                } else if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) {
                    // The subscription status changed. For example, a subscription
                    // has been recovered from a suspend state. Developers should
                    // expect the purchase token to be returned with this response
                    // code and use the purchase token with the Google Play
                    // Developer API.
                }
            }
        })

জাভা

InAppMessageParams inAppMessageParams = InAppMessageParams.newBuilder()
        .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL)
        .build();

billingClient.showInAppMessages(activity,
        inAppMessageParams,
        new InAppMessageResponseListener() {
            @Override
            public void onInAppMessageResponse(InAppMessageResult inAppMessageResult) {
                if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.NO_ACTION_NEEDED) {
                    // The flow has finished and there is no action needed from developers.
                } else if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) {
                    // The subscription status changed. For example, a subscription
                    // has been recovered from a suspend state. Developers should
                    // expect the purchase token to be returned with this response
                    // code and use the purchase token with the Google Play
                    // Developer API.
                }
            }
        });

Handle subscription pending transactions

Pending transactions can happen in initial purchase, top-up, upgrade or downgrade. The subscription purchase starts with the SUBSCRIPTION_STATE_PENDING state before transitioning to SUBSCRIPTION_STATE_ACTIVE . If the transaction is expired or canceled by the user, it goes to SUBSCRIPTION_STATE_PENDING_PURCHASE_EXPIRED . You must and should only update the user's entitlement after the transaction is completed.

Subscription state change for initial purchase with pending transactions is straightforward. Your app receives a Purchase with PENDING state when the user initiates a pending transaction. When the transaction is completed, your app receives the Purchase again with state updated to PURCHASED . A SubscriptionNotification message with type SUBSCRIPTION_PURCHASED is sent to your RTDN client. Follow the normal process to verify the purchase, give the user access to the content and acknowledge the purchase. If the transaction expires or is canceled, a SubscriptionNotification message with type SUBSCRIPTION_PENDING_PURCHASE_CANCELED is sent to your RTDN client. In such cases, the user should never have gained access to the content.

Top-up, upgrade or downgrade with pending transactions involves state changes for both the old and new subscriptions. When the user initiates a pending top-up, upgrade or downgrade transaction, your app receives a Purchase for the old subscription with a PendingPurchaseUpdate object. At this time, the user is still owning the old subscription and has not gained the new subscription yet. Calling getProducts() and getPurchaseToken() on the PendingPurchaseUpdate object returns the product ids and purchase token of the new subscription. When the transaction is completed, your app receives a Purchase with the top-level purchase token set for the new subscription and the state set to PURCHASED . A SubscriptionNotification message with type SUBSCRIPTION_PURCHASED is sent to your RTDN client. Only at this time, you should replace the old purchase token with the new purchase token and update the user's access to the content. If the transaction expires or is canceled, a SubscriptionNotification message with type SUBSCRIPTION_PENDING_PURCHASE_CANCELED is sent to your RTDN client. In such cases, the user should still have access to the content of the old subscription.