সাবস্ক্রিপশন জীবনচক্র

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

স্বয়ংক্রিয়ভাবে পুনর্নবীকরণ সাবস্ক্রিপশনের জন্য জীবনচক্র পরিচালনা করুন

যখন একজন ব্যবহারকারীর সদস্যতার অবস্থা পরিবর্তিত হয়, তখন আপনার ব্যাকএন্ড সার্ভার একটি SubscriptionNotification বার্তা পায়

চিত্র 1. সাবস্ক্রিপশন ক্রয়ের স্বয়ংক্রিয় পুনর্নবীকরণের জন্য জীবনচক্রের অবস্থা এবং পরিবর্তনের ঘটনাগুলি৷

আপনার ব্যাকএন্ডের অবস্থা আপডেট করতে, বিজ্ঞপ্তিতে অন্তর্ভুক্ত ক্রয় টোকেন সহ purchases.subscriptionsv2.get API-এ কল করুন। এই শেষ পয়েন্টটি একটি ক্রয় টোকেন দেওয়া সর্বশেষ সাবস্ক্রিপশন অবস্থা প্রদান করে এবং সাবস্ক্রিপশন পরিচালনার জন্য সত্যের উৎস হিসেবে বিবেচিত হয়।

ক্রয় টোকেন সাবস্ক্রিপশন সাইনআপ থেকে মেয়াদ শেষ হওয়ার 60 দিন পর্যন্ত বৈধ। এই তারিখের পরে, Google Play Developer API কল করার জন্য ক্রয় টোকেনটি আর বৈধ থাকবে না।

নতুন স্বয়ংক্রিয় পুনর্নবীকরণ সাবস্ক্রিপশন ক্রয়

যখন একজন ব্যবহারকারী একটি সদস্যতা ক্রয় করেন, তখন আপনার RTDN ক্লায়েন্টকে SUBSCRIPTION_PURCHASED টাইপ সহ একটি SubscriptionNotification বার্তা পাঠানো হয়। আপনি এই বিজ্ঞপ্তিটি পান বা আপনি PurchasesUpdatedListener এর মাধ্যমে অ্যাপ-মধ্যস্থ একটি নতুন কেনাকাটা নিবন্ধন করুন বা আপনার অ্যাপের onResume() পদ্ধতিতে ম্যানুয়ালি কেনাকাটা আনুন , আপনার নিরাপদ ব্যাকএন্ডে নতুন কেনাকাটা প্রক্রিয়া করা উচিত। এটি করার জন্য, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. একটি সাবস্ক্রিপশন রিসোর্স পেতে purchases.subscriptionsv2.get এন্ডপয়েন্টে প্রশ্ন করুন যাতে সর্বশেষ সাবস্ক্রিপশন স্টেট রয়েছে।
  2. নিশ্চিত করুন যে subscriptionState ক্ষেত্রের মান SUBSCRIPTION_STATE_ACTIVE
  3. ক্রয় যাচাই করুন .
  4. ব্যবহারকারীকে সামগ্রীতে অ্যাক্সেস দিন। ক্রয়ের সাথে যুক্ত ব্যবহারকারীর অ্যাকাউন্টটিকে সদস্যতা সংস্থান থেকে ExternalAccountIdentifiers অবজেক্টের সাথে সনাক্ত করা যেতে পারে যদি শনাক্তকারীগুলি ক্রয়ের সময় সেট করা হয় setObfuscatedAccountId এবং setObfuscatedProfileId ব্যবহার করে।

প্লে বিলিং লাইব্রেরিতে সাবস্ক্রিপশন স্বীকার করার একটি পদ্ধতি, acknowledgePurchase() এবং স্বীকৃতির স্থিতি পরীক্ষা করার একটি পদ্ধতি, isAcknowledged() অন্তর্ভুক্ত রয়েছে। যাইহোক, আমরা সুপারিশ করি যে আপনি ভাল নিরাপত্তার জন্য আপনার ব্যাকএন্ডে ক্রয় প্রক্রিয়া পরিচালনা করুন।

নতুন কেনাকাটার জন্য সাবস্ক্রিপশন সংস্থান নিম্নলিখিত উদাহরণের মতো দেখায়:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  "startTime": "2022-04-22T18:39:58.270Z",
  "regionCode": "US",
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  "latestOrderId": "GPA.3333-4137-0319-36762",
  "acknowledgementState": "ACKNOWLEDGEMENT_STATE_PENDING", // need to acknowledge new purchases
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date,
      "autoRenewingPlan": {
        "autoRenewEnabled": true
      }
    }
  ],
}

সদস্যতা পুনর্নবীকরণ

অ-কিস্তির জন্য, স্বয়ংক্রিয়ভাবে পুনর্নবীকরণ করা সদস্যতাগুলির জন্য, সদস্যতা পুনর্নবীকরণের সময় একটি SUBSCRIPTION_RENEWED বিজ্ঞপ্তি পাঠানো হয়৷ কিস্তি সাবস্ক্রিপশনের জন্য, একটি SUBSCRIPTION_RENEWED বিজ্ঞপ্তি পাঠানো হয় প্রতিবার সদস্যতার বিলিংয়ের তারিখে চার্জ করা হয়। নিশ্চিত করুন যে ব্যবহারকারী এখনও সাবস্ক্রিপশনের অধিকারী এবং তারপর Google Play Developer API থেকে প্রত্যাবর্তিত সাবস্ক্রিপশন রিসোর্সে প্রদত্ত নতুন expiryTime হওয়ার সাথে সদস্যতার অবস্থা আপডেট করুন। সাবস্ক্রিপশন সংস্থান নিম্নলিখিত উদাহরণের অনুরূপ দেখায়:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  "startTime": "2022-04-22T18:39:58.270Z",
  "regionCode": "US",
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  "latestOrderId": "GPA.3333-4137-0319-36762",
  "acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date,
      "autoRenewingPlan": {
        "autoRenewEnabled": true
      }
    }
  ]
}

আপনাকে সাবস্ক্রিপশন পুনর্নবীকরণ স্বীকার করতে হবে না।

গ্রেস পিরিয়ড

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

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

আপনার ব্যাকএন্ডের সাথে সাবস্ক্রিপশন স্থিতি সিঙ্ক্রোনাইজ করা আপনাকে অর্থপ্রদানের অস্বীকৃতি সম্পর্কে আরও সচেতন হতে দেয় এবং আপনি যখন অনিচ্ছাকৃত মন্থন কমানোর চেষ্টা করেন তখন আপনাকে আরও প্রসঙ্গ দেয়। SUBSCRIPTION_IN_GRACE_PERIOD টাইপ সহ SubscriptionNotification বার্তাগুলির জন্য শুনুন যখন ব্যবহারকারী একটি গ্রেস পিরিয়ড প্রবেশ করবে তখন বিজ্ঞপ্তি পাওয়ার জন্য৷ ব্যবহারকারী যখন গ্রেস পিরিয়ডে থাকে, সাবস্ক্রিপশন রিসোর্সে autoRenewEnabled = true থাকে। গ্রেস পিরিয়ড শেষ না হওয়া পর্যন্ত Google Play গতিশীলভাবে expiryTime মান বাড়ায় কারণ এনটাইটেলমেন্টটি ব্যবহারকারী বাতিল না হওয়া পর্যন্ত বা গ্রেস পিরিয়ড তার সর্বোচ্চ দৈর্ঘ্য পর্যন্ত স্থায়ী হওয়া উচিত। এই সময়ের মধ্যে subscriptionState ফিল্ডের মান হল SUBSCRIPTION_STATE_IN_GRACE_PERIOD । সাবস্ক্রিপশন সংস্থান নিম্নলিখিত উদাহরণের অনুরূপ দেখায়:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_future,
      "autoRenewingPlan": {
        "autoRenewEnabled": true
      }
    }
  ],
}

Play তাদের পেমেন্ট প্রত্যাখ্যান করা হয়েছে বলে গ্রেস পিরিয়ডে থাকা ব্যবহারকারীদের জানায় এবং Play Store-এ তাদের পেমেন্ট পদ্ধতির সমস্যাগুলি সমাধান করার জন্য অনুরোধ করে। যখন একজন ব্যবহারকারী একটি গ্রেস পিরিয়ডে প্রবেশ করেন, আপনি ব্যবহারকারীকে তাদের অর্থপ্রদানের পদ্ধতিটি ঠিক করতে উৎসাহিত করবেন যদি ব্যর্থতা অনিচ্ছাকৃত হয়। এটি করার একটি সহজ উপায় হল ইন-অ্যাপ মেসেজিং API ব্যবহার করা। ব্যবহারকারী আপনার অ্যাপ খোলে আপনি যদি এই API-কে কল করেন, তাহলে তাদের একটি অস্থায়ী স্ন্যাকবারে একটি প্লে বার্তা দেখানো হয় যা ব্যবহারকারীকে জানায় যে তাদের অর্থপ্রদান প্রত্যাখ্যান করা হয়েছে। এই বার্তাটিতে ব্যবহারকারীর জন্য Google Play-এ তাদের অর্থপ্রদানের পদ্ধতি ঠিক করার জন্য একটি গভীর লিঙ্কও রয়েছে৷

ব্যবহারকারী তার অর্থপ্রদানের পদ্ধতি ঠিক করার সাথে সাথে সদস্যতাটি তার মূল পুনর্নবীকরণ তারিখের সাথে পুনর্নবীকরণ হয় এবং আপনি পুনর্নবীকরণে বর্ণিত হিসাবে পুনর্নবীকরণ পরিচালনা করতে পারেন৷

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

গ্রেস পিরিয়ড অ্যাক্সেস এবং পুনরুদ্ধার

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

চিত্র 2. একটি সাবস্ক্রিপশনের টাইমলাইন যা একটি গ্রেস পিরিয়ডে প্রবেশ করে এবং এটি শেষ হওয়ার আগে পুনরুদ্ধার করে।

নিম্নলিখিত পয়েন্টগুলি মনে রাখা গুরুত্বপূর্ণ:

  • একটি গ্রেস পিরিয়ডের সময়, ব্যবহারকারীর সদস্যতা সুবিধার অ্যাক্সেস বজায় রাখা উচিত।
  • গ্রেস পিরিয়ডের মধ্যে যখন সাবস্ক্রিপশন পুনরুদ্ধার হয়, তখন পুনর্নবীকরণের তারিখ রিসেট হয় না
  • আপনি যদি গ্রেস পিরিয়ড বাড়ান—উদাহরণস্বরূপ, 7 দিন থেকে 14 দিন—যারা গ্রেস পিরিয়ডের মধ্যে আছেন তারা সাবস্ক্রিপশন সুবিধাগুলিতে বর্ধিত অ্যাক্সেস পাবেন।
  • আপনি যদি গ্রেস পিরিয়ড হ্রাস করেন, যে সমস্ত ব্যবহারকারীরা নতুন গ্রেস পিরিয়ড অতিক্রম করার জন্য পুরানো গ্রেস পিরিয়ডের মধ্যে যথেষ্ট, তাদের সদস্যতা সুবিধাগুলি অবিলম্বে প্রত্যাহার করা হবে৷ উদাহরণস্বরূপ, যদি আপনি গ্রেস পিরিয়ড 14 দিন থেকে কমিয়ে 7 দিনে করেন, যে সমস্ত ব্যবহারকারীরা পুরানো গ্রেস পিরিয়ডের 8-14 দিনে থাকে তাদের সদস্যতা সুবিধাগুলি অবিলম্বে প্রত্যাহার করা হবে৷
  • সাবস্ক্রিপশন একটি সক্রিয় অবস্থায় থাকে এবং নীরব গ্রেস পিরিয়ড শেষ না হওয়া পর্যন্ত আপনি গ্রেস পিরিয়ড RTDN পাবেন না

নীরব গ্রেস পিরিয়ড

আপনি 0 দিনের গ্রেস পিরিয়ড সেট করতে পারেন, তবে পেমেন্টের পুনরায় চেষ্টা করার জন্য পর্যাপ্ত সময় নিশ্চিত করতে Play সর্বনিম্ন 1 দিন অপেক্ষা করবে। এই নীরব গ্রেস পিরিয়ড পেমেন্ট প্রক্রিয়াকরণের জন্য একটি নিরাপত্তা জাল অফার করে। এই 24-ঘন্টা সময়ের মধ্যে সদস্যতা ACTIVE অবস্থায় থাকে৷

সাবস্ক্রিপশন স্টেট পরিবর্তনের সাথে সিঙ্কে থাকার জন্য আপনার জন্য সবচেয়ে ভালো উপায় হল রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDN) শোনা এবং প্রতিক্রিয়া জানানো। সাবস্ক্রিপশনের আরও সঠিক স্ট্যাটাস পেতে মেয়াদ শেষ হওয়ার পরিবর্তে RTDN সময়ে purchases.subscriptionsv2.get() পদ্ধতিতে কল করুন।

24-ঘন্টা নীরব গ্রেস পিরিয়ডের পরে সদস্যতা স্থিতির উপর নির্ভর করে, আপনি নিম্নলিখিত বিজ্ঞপ্তিগুলির মধ্যে একটি পাবেন:

  • SUBSCRIPTION_ON_HOLD (যদি সক্ষম করা থাকে)
  • SUBSCRIPTION_CANCELED (যদি বাতিল করা হয়)
  • SUBSCRIPTION_EXPIRED (যদি মেয়াদ শেষ হয়)
  • SUBSCRIPTION_RENEWED (যদি সফলভাবে নবায়ন করা হয়)

আপনি সাবস্ক্রিপশনের সর্বশেষ স্থিতি পেতে 24-ঘন্টা নীরব গ্রেস পিরিয়ডের পরে যে কোনও সময়ে subscriptionV2.get() পদ্ধতিতে কল করতে পারেন।

অ্যাকাউন্ট হোল্ড

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

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

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

যদি আপনার ব্যবহারকারীরা আপনার অ্যাপের বাইরে সাবস্ক্রিপশন বিষয়বস্তু অ্যাক্সেস করতে পারে, তাহলে তারা আবিষ্কার করতে পারে যে তারা বিভিন্ন সারফেসে অ্যাক্সেস হারিয়েছে। আপনি ব্যবহারকারীর কাছে একটি পুশ বিজ্ঞপ্তি বা একটি ইমেল পাঠাতে চাইতে পারেন যাতে তাদের জানানো হয় যে অর্থপ্রদান হ্রাসের কারণে তাদের সদস্যতা আর সক্রিয় নেই৷

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

রিয়েল-টাইম ডেভেলপার বিজ্ঞপ্তিগুলির সাথে, যখন একটি সদস্যতা অ্যাকাউন্ট হোল্ডে প্রবেশ করে তখন আপনি SUBSCRIPTION_ON_HOLD টাইপ সহ একটি SubscriptionNotification বার্তা পাবেন৷ নতুন সাবস্ক্রিপশন তথ্য পুনরুদ্ধার করতে আপনার নিরাপদ ব্যাকএন্ড সার্ভার থেকে purchases.subscriptionsv2.get পদ্ধতিতে কল করুন। অ্যাকাউন্ট হোল্ডের সময় সাবস্ক্রিপশন রিসোর্সের expiryTime ক্ষেত্রটি একটি অতীত টাইমস্ট্যাম্পে সেট করা হয় এবং subscriptionState ক্ষেত্রটি SUBSCRIPTION_STATE_ON_HOLD এ সেট করা হয় :

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ON_HOLD",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_past,
      ...
    }
  ],
}

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

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

কিস্তি সাবস্ক্রিপশনের জন্য, পেমেন্ট প্রত্যাখ্যান এবং পুনরুদ্ধার যে কোনো ব্যক্তিগত অর্থপ্রদানের প্রচেষ্টার জন্য ঘটতে পারে।

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

সাবস্ক্রিপশন পুনরুদ্ধার করা হলে বিজ্ঞপ্তি পাওয়ার জন্য SUBSCRIPTION_RECOVERED টাইপ সহ একটি SubscriptionNotification বার্তা শুনুন এবং ব্যবহারকারীর অ্যাক্সেস পুনরুদ্ধার করা উচিত। এই বিজ্ঞপ্তি পাওয়ার পর আপনি যদি সাবস্ক্রিপশনের জন্য ক্যোয়ারী করেন, তাহলে expiryTime ক্ষেত্রটি ভবিষ্যতে একটি টাইমস্ট্যাম্পে সেট করা হবে এবং subscriptionState ক্ষেত্রটি আবার SUBSCRIPTION_STATE_ACTIVE এ সেট করা হয়েছে:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date,
      ...
    }
  ],
}

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

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_past,
      ...
    }
  ],
}

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

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

অ্যাকাউন্ট হোল্ড অ্যাক্সেস এবং পুনরুদ্ধার

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

চিত্র 3. একটি সাবস্ক্রিপশনের টাইমলাইন যা একটি অ্যাকাউন্ট হোল্ডে প্রবেশ করে এবং এটি শেষ হওয়ার আগেই পুনরুদ্ধার করে৷

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

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

নিম্নলিখিত পয়েন্টগুলি মনে রাখা গুরুত্বপূর্ণ:

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

মেয়াদোত্তীর্ণ

একবার সাবস্ক্রিপশনের মেয়াদ শেষ হয়ে গেলে, ব্যবহারকারীর সাবস্ক্রিপশনে অ্যাক্সেস হারাতে হবে। সেই ক্ষেত্রে SUBSCRIPTION_EXPIRED টাইপ সহ একটি SubscriptionNotification বার্তা পাঠানো হয়৷ আপনি যখন এই বিজ্ঞপ্তিটি পান, সর্বশেষ সদস্যতা সংস্থান পেতে Google Play বিকাশকারী API-কে জিজ্ঞাসা করুন৷ আপনি নিশ্চিত করার পরে যে subscriptionState SUBSCRIPTION_STATE_EXPIRED , এনটাইটেলমেন্টটি সরান এবং আপনার ব্যাকএন্ডে ক্রয়ের অবস্থাটিকে অবৈধ হিসাবে নিবন্ধন করুন৷ সাবস্ক্রিপশন সংস্থান নিম্নলিখিত উদাহরণের অনুরূপ দেখায়:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": expiration_time_in_past,
      ...
    }
  ],
}

বাতিলকরণ

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

একটি অ-কিস্তি বাতিল করা, স্বয়ংক্রিয়ভাবে পুনর্নবীকরণ করা সদস্যতা একটি SUBSCRIPTION_CANCELED বিজ্ঞপ্তি ট্রিগার করে৷ আপনি যখন এই বিজ্ঞপ্তিটি পান, তখন Google Play Developer API থেকে প্রত্যাবর্তিত সাবস্ক্রিপশন রিসোর্সে subscriptionState ক্ষেত্রটি SUBSCRIPTION_STATE_CANCELED এ সেট করা থাকে এবং expiryTime ক্ষেত্রটিতে ব্যবহারকারীর সদস্যতা হারানোর তারিখ থাকে৷ যদি সেই তারিখটি অতীতে থাকে, তাহলে ব্যবহারকারীকে অবিলম্বে এনটাইটেলমেন্ট হারাতে হবে। এটি ঘটতে পারে, উদাহরণস্বরূপ, যদি কোনও ব্যবহারকারী অর্থ প্রদানের অস্বীকৃতির কারণে অ্যাকাউন্ট হোল্ডে থাকাকালীন একটি সদস্যতা বাতিল করে।

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

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": expiration_time,
      ...
    }
  ],
}

কিস্তি সাবস্ক্রিপশনের জন্য, একটি SUBSCRIPTION_CANCELLATION_SCHEDULED নোটিফিকেশন একটি ব্যবহারকারীর দ্বারা সূচিত বাতিলকরণের সময় পাঠানো হয় যখন পেমেন্ট প্রতিশ্রুতি সময়ের জন্য থাকে। বাতিলকরণ মুলতুবি রয়েছে এবং বর্তমান প্রতিশ্রুতি সময়ের শেষে কার্যকর হয়। যখন আপনি এই বিজ্ঞপ্তিটি পান, তখন Google Play Developer API থেকে প্রত্যাবর্তিত সাবস্ক্রিপশন রিসোর্সে সাবস্ক্রিপশন স্টেট ফিল্ডটি SUBSCRIPTION_STATE_ACTIVE সেট করা থাকে কারণ কিস্তির সদস্যতা প্রতিশ্রুতি সময়ের শেষ না হওয়া পর্যন্ত সক্রিয় থাকে। যাইহোক, একটি খালি মুলতুবি বাতিলকরণ বস্তু উপস্থিত আছে। একটি SUBSCRIPTION_CANCELED বিজ্ঞপ্তি পাঠানো হয় এবং প্রতিশ্রুতি সময়ের শেষে একটি SUBSCRIPTION_EXPIRED পাঠানো হয়৷

একটি কিস্তি সাবস্ক্রিপশন ক্রয়ের জন্য সাবস্ক্রিপশন সংস্থান যা বাতিলকরণ মুলতুবি রয়েছে তা নিম্নলিখিত উদাহরণের মতো দেখায়:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_plan01",
      "expiryTime": expiration_time,
      "autoRenewingPlan": {
        "autoRenewEnabled": true,
        "recurringPrice": {
          "currencyCode": "USD",
          "units": "1",
          "nanos": 990000000
        },
        "installmentDetails": {
          "initialCommittedPaymentsCount": 6,
          "remainingCommittedPaymentsCount": 5,
          "pendingCancellation": {}
      ...
        }
      }
    }
  ],
}

কেন সাবস্ক্রিপশন বাতিল করা হয়েছে তা জানতে আপনি সাবস্ক্রিপশন রিসোর্সে canceledStateContext ক্ষেত্রটি দেখতে পারেন (উদাহরণস্বরূপ, সাবস্ক্রিপশন ব্যবহারকারী, সিস্টেম বা আপনার দ্বারা বাতিল করা হয়েছে কিনা)। ব্যবহারকারীর দ্বারা সাবস্ক্রিপশন বাতিল করা হলে, ব্যবহারকারী কেন সাবস্ক্রিপশন বাতিল করেছেন তা জানতে আপনি userInitiatedCancellation ক্ষেত্রটি দেখতে পারেন। এটি যোগাযোগের কৌশলগুলি জানাতে সাহায্য করতে পারে।

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

প্রত্যাহার

বিভিন্ন কারণে একটি সাবস্ক্রিপশন প্রত্যাহার করা যেতে পারে, যার মধ্যে আপনার ব্যাকএন্ড purchases.subscriptions.revoke ব্যবহার করে সাবস্ক্রিপশন প্রত্যাহার করে বা ক্রয় ফেরত নেওয়া হয়। এই পরিস্থিতিতে, অবিলম্বে ব্যবহারকারীর এনটাইটেলমেন্ট প্রত্যাহার করুন। যখন এটি ঘটে তখন SUBSCRIPTION_REVOKED টাইপ সহ একটি SubscriptionNotification বার্তা পাঠানো হয়৷ আপনি যখন এই বিজ্ঞপ্তিটি পান, তখন Google Play Developer API থেকে প্রত্যাবর্তিত সাবস্ক্রিপশন রিসোর্সে subscriptionState ফিল্ডটি SUBSCRIPTION_STATE_EXPIRED সেট করা থাকে।

একটি প্রত্যাহার করা ক্রয়ের জন্য সদস্যতা সংস্থান নিম্নলিখিত উদাহরণের মতো দেখায়:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": expiration_time,
      ...
    }
  ]
}

বিলম্বিত সদস্যতা

আপনি একজন ব্যবহারকারীর এনটাইটেলমেন্ট প্রসারিত করতে চাইতে পারেন এমন বিভিন্ন কারণ রয়েছে। উদাহরণস্বরূপ, আপনি একটি বিশেষ প্রচার হিসাবে ব্যবহারকারীদের বিনামূল্যে অ্যাক্সেস অফার করতে চাইতে পারেন, যেমন একটি সিনেমা কেনার জন্য এক সপ্তাহ বিনামূল্যে দেওয়া বা শুভেচ্ছার অঙ্গভঙ্গি হিসাবে গ্রাহকদের বিনামূল্যে অ্যাক্সেস প্রদান করা। আপনি একটি স্বয়ংক্রিয় পুনর্নবীকরণ সাবস্ক্রিপশনের জন্য পরবর্তী বিলিংয়ের তারিখ অগ্রসর করতে Play Developer API থেকে purchases.subscriptions.defer পদ্ধতি ব্যবহার করতে পারেন। আপনি যখন এটি করেন, SUBSCRIPTION_DEFERRED টাইপ সহ একটি SubscriptionNotification বার্তা পাঠানো হয়৷ বিলম্বিত সময়কালে, ব্যবহারকারী সম্পূর্ণ অ্যাক্সেস সহ আপনার সামগ্রীতে সদস্যতা নিয়েছে কিন্তু চার্জ করা হয় না। নতুন তারিখ প্রতিফলিত করতে সাবস্ক্রিপশন পুনর্নবীকরণের তারিখ আপডেট করা হয়েছে।

প্রিপেইড প্ল্যানের জন্য, মেয়াদ শেষ হওয়ার সময় পিছিয়ে দিতে আপনি ডিফার বিলিং API ব্যবহার করতে পারেন।

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

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_future,
      ...
    }
  ],
}

বিরতি দেওয়া সাবস্ক্রিপশন

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

সদস্যতা পুনরাবৃত্তি সাপ্তাহিক মাসিক তিন মাস ছয় মাস বার্ষিক
উপলব্ধ বিরতি দৈর্ঘ্য * 1 সপ্তাহ
২ সপ্তাহ
3 সপ্তাহ
4 সপ্তাহ
1 মাস
2 মাস
3 মাস
1 মাস
2 মাস
3 মাস
1 মাস
2 মাস
3 মাস
N/A
* যে কোন সময় পরিবর্তন সাপেক্ষে.

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

চিত্র 5. একজন ব্যবহারকারী বিরতি দেয় এবং তারপর তাদের সদস্যতা পুনরায় শুরু করে।
চিত্র 6. একজন ব্যবহারকারী তাদের সাবস্ক্রিপশন বিরতি দেয় এবং তারপর অ্যাকাউন্ট হোল্ডে প্রবেশ করে।

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

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

একজন ব্যবহারকারী যখন তাদের সদস্যতা বিরতি দেয় তখন সচেতন হতে RTDN-এর জন্য শুনুন। এই বিজ্ঞপ্তিগুলি আপনাকে আপনার অ্যাপে আপনার ব্যবহারকারীদের অবহিত করার অনুমতি দেয় যে তারা তাদের সদস্যতা বিরাম দিয়েছে এবং এটিতে তাদের অ্যাক্সেস নেই। Google Play-তে একটি ডিপ লিঙ্ক ব্যবহার করে যেকোন সময় ব্যবহারকারীকে ম্যানুয়ালি তাদের সদস্যতা পুনরায় শুরু করার জন্য আপনাকে একটি উপায় প্রদান করতে হবে।

SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED টাইপ সহ একটি SubscriptionNotification বার্তা পাঠানো হয় যখন আপনার ব্যবহারকারী তাদের সাবস্ক্রিপশনের বিরতি শুরু করেন। এই সময়ে, ব্যবহারকারীকে পরবর্তী পুনর্নবীকরণের তারিখ পর্যন্ত তাদের সাবস্ক্রিপশনে অ্যাক্সেস রাখা উচিত এবং সাবস্ক্রিপশন সংস্থানে autoRenewEnabled = true রয়েছে। subscriptionState ফিল্ডের মান এই মুহুর্তে SUBSCRIPTION_STATE_ACTIVE

যখন বিরতি কার্যকর হয় তখন SUBSCRIPTION_PAUSED টাইপ সহ একটি SubscriptionNotification বার্তা পাঠানো হয়৷ যখন এটি ঘটবে, ব্যবহারকারীর তাদের সাবস্ক্রিপশনে অ্যাক্সেস হারাতে হবে, এবং সাবস্ক্রিপশন রিসোর্সে autoRenewEnabled = true থাকে, এবং subscriptionState ক্ষেত্রটি SUBSCRIPTION_STATE_PAUSED এ সেট করা হয়। আপনি PausedStateContext অবজেক্ট চেক করে সাবস্ক্রিপশন পুনরায় পুনর্নবীকরণের আশা করা হয় তা দেখতে পারেন।

SUBSCRIPTION_RENEWED টাইপ সহ একটি SubscriptionNotification বার্তা পাঠানো হয় যদি সাবস্ক্রিপশনটি বিরতির সময় শেষে স্বয়ংক্রিয়ভাবে পুনরায় শুরু করা হয় বা ব্যবহারকারী ম্যানুয়ালি সাবস্ক্রিপশন পুনরায় শুরু করতে বেছে নেন। এটি পুনর্নবীকরণে বর্ণিত হিসাবে পরিচালনা করা উচিত।

বিরতির পরে সাবস্ক্রিপশন পুনরায় চালু করার চেষ্টা করার সময় অর্থপ্রদান ব্যর্থ হলে SUBSCRIPTION_ON_HOLD টাইপ সহ একটি SubscriptionNotification বার্তা পাঠানো হয়৷ অ্যাকাউন্ট হোল্ডে বর্ণিত হিসাবে এটি পরিচালনা করা উচিত।

পুনরায় সদস্যতা

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

চিত্র 7. Google Play Store অ্যাপের অ্যাকাউন্ট > সাবস্ক্রিপশন সেকশনে একটি রিসাবস্ক্রাইব বোতাম দিয়ে বাতিল হওয়া সাবস্ক্রিপশন দেখানো হচ্ছে।

যদিও বোতামটি সর্বদা পুনঃসাবস্ক্রাইব লেবেলযুক্ত থাকে, তবে এর কার্যকারিতা সদস্যতার অবস্থার উপর নির্ভর করে।

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

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

মেয়াদ শেষ হওয়ার আগে পুনরুদ্ধার করুন

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

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

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date
      ...
    }
  ],
}

মেয়াদ শেষ হওয়ার পরে পুনরায় সদস্যতা নিন

যদি পুনঃসাবস্ক্রাইব করার অনুমতি দেওয়ার জন্য Google Play Console বা API ব্যবহার করে একটি স্বয়ংক্রিয় পুনর্নবীকরণ বেস প্ল্যান কনফিগার করা হয়, তাহলে ব্যবহারকারীরা Google Play Store-এ মেয়াদোত্তীর্ণ সাবস্ক্রিপশন পুনরায় ক্রয় করতে পারবেন।

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

আপগ্রেড, ডাউনগ্রেড, এবং পুনরায় সদস্যতা

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

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

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

যদি ব্যবহারকারী সফলভাবে আপগ্রেড, ডাউনগ্রেড বা পুনরায় সদস্যতা ক্রয় করেন, এটি একটি নতুন ক্রয় যা আপনাকে অবশ্যই স্বীকার করতে হবে। এটি করার প্রস্তাবিত উপায় হল Google Play Developer API ব্যবহার করা। সাবস্ক্রিপশন সংস্থান নিম্নলিখিত উদাহরণের অনুরূপ দেখায়:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  "linkedPurchaseToken": old_purchase_token,
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date,
      "autoRenewingPlan": {
        "autoRenewEnabled": true
      }
    }
  ],
}

মূল্য পরিবর্তন

স্বয়ংক্রিয় পুনর্নবীকরণ সাবস্ক্রিপশন মূল্য পরিবর্তন এবং উপযুক্ত হলে ব্যবহারকারীদের অবহিত করার বিষয়ে জানতে মূল্য পরিবর্তনের সর্বোত্তম অনুশীলন নির্দেশিকা দেখুন।

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

একটি অপ্ট-ইন মূল্য পরিবর্তন ব্যবহারকারী নিশ্চিতকরণ হ্যান্ডেল

যখন কোনো ব্যবহারকারী আপনার সাবস্ক্রিপশনের মূল্য বৃদ্ধি স্বীকার করেন, আপনি SUBSCRIPTION_PRICE_CHANGED_CONFIRMED টাইপ সহ একটি SubscriptionNotification বার্তা পাবেন। একটি অপ্ট-আউট মূল্য হ্রাসের সাথে, অথবা যখন সদস্যতার মূল্য বৃদ্ধি পুনর্নবীকরণ হয়, আপনি SUBSCRIPTION_RENEWED টাইপ সহ একটি SubscriptionNotification বার্তা পাবেন৷ এই বিজ্ঞপ্তিটিকে অন্য যেকোনো পুনর্নবীকরণের মতো বিবেচনা করুন।

একটি অপ্ট-ইন মূল্য বৃদ্ধি গৃহীত হয় না এমন ক্ষেত্রে পরিচালনা করুন

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

ব্যবহারকারীরা একই প্রক্রিয়া অনুসরণ করে অপ্ট-আউট মূল্য বৃদ্ধির জন্য তাদের সদস্যতা বাতিল করতে পারেন।

প্রিপেইড প্ল্যানের জন্য জীবনচক্র পরিচালনা করুন

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

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

চিত্র 8. সাবস্ক্রিপশন ক্রয়ের জন্য জীবনচক্রের অবস্থা এবং ট্রানজিশন ইভেন্ট।

SUBSCRIPTION_PURCHASED টাইপ সহ একটি SubscriptionNotification বার্তা আপনার RTDN ক্লায়েন্টকে পাঠানো হয় যখনই প্রতিটি টপ-আপ সহ একটি প্রিপেইড প্ল্যান সদস্যতা কেনা হয়। সর্বশেষ প্রিপেইড প্ল্যান সাবস্ক্রিপশনের অবস্থা চেক করতে purchases.subscriptionsv2.get পদ্ধতিতে কল করুন।

টপ-আপ কেনাকাটার জন্য একটি নতুন ক্রয় টোকেন জারি করা হয়, এবং আপনি নতুন সাবস্ক্রিপশন ক্রয়ের অবস্থার অংশ হিসাবে linkedPurchaseToken ক্ষেত্রের আগের ক্রয়ের টোকেনটি পাবেন। ক্রয় টোকেন সাবস্ক্রিপশন সাইনআপ থেকে মেয়াদ শেষ হওয়ার 60 দিন পর্যন্ত বৈধ। এই তারিখের পরে, Google Play Developer API কল করার জন্য ক্রয় টোকেনটি আর বৈধ থাকবে না।

একটি প্রিপেইড প্ল্যান ক্রয়ের জন্য সাবস্ক্রিপশন সংস্থান নিম্নলিখিত উদাহরণের মতো দেখায়:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  "startTime": "2022-04-22T18:39:58.270Z",
  "regionCode": "US",
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  "latestOrderId": "GPA.3333-4137-0319-36762",
  "acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
  "lineItems": [
    {
      "productId": "prepaid_plan01",
      "expiryTime": expiry_date,
      "prepaidPlan": {
        "allowExtendAfterTime": timestamp_after_which_topups_are_allowed
      }
    }
  ]
}

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

আপনি ব্যবহারকারীকে জানিয়ে আপনার অ্যাপে একটি বার্তা প্রদর্শন করতে চাইতে পারেন যে তাদের প্রিপেইড সাবস্ক্রিপশন একটি টপ-আপের মাধ্যমে বাড়ানো যেতে পারে। একজন ব্যবহারকারী কখন টপ-আপ করতে সক্ষম হবেন তা জানতে, সাবস্ক্রিপশন রিসোর্সে allowExtendAfterTime ক্ষেত্রটি পরীক্ষা করুন৷

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