এই নির্দেশিকাটি বর্ণনা করে যে কীভাবে আপনার অ্যাপে ব্যবহারকারীর পছন্দের সাথে বিকল্প বিলিং অফার করার জন্য API গুলিকে একীভূত করবেন।
প্লে বিলিং লাইব্রেরি সেটআপ
আপনার অ্যান্ড্রয়েড অ্যাপে Play Billing Library নির্ভরতা যোগ করুন । বিকল্প বিলিং API ব্যবহার করতে আপনাকে 5.2 বা তার বেশি সংস্করণ ব্যবহার করতে হবে। যদি আপনার পূর্ববর্তী সংস্করণ থেকে মাইগ্রেট করার প্রয়োজন হয়, তাহলে বিকল্প বিলিং বাস্তবায়নের চেষ্টা করার আগে মাইগ্রেশন নির্দেশিকাতে থাকা নির্দেশাবলী অনুসরণ করুন।
গুগল প্লেতে সংযোগ করুন
ইন্টিগ্রেশন প্রক্রিয়ার প্রথম ধাপগুলি Google Play বিলিং ইন্টিগ্রেশন গাইডে বর্ণিত ধাপগুলির মতোই, আপনার BillingClient শুরু করার সময় কিছু পরিবর্তন করা হয়েছে:
- ব্যবহারকারীকে বিলিং বিকল্পগুলির একটি পছন্দ অফার করতে চান তা বোঝাতে আপনাকে একটি নতুন পদ্ধতি কল করতে হবে:
enableUserChoiceBilling। - ব্যবহারকারী যখন বিকল্প বিলিং বেছে নেন, তখন আপনাকে
UserChoiceBillingListenerনিবন্ধন করতে হবে।
নিম্নলিখিত উদাহরণটি এই পরিবর্তনগুলি ব্যবহার করে একটি BillingClient শুরু করার পদ্ধতি প্রদর্শন করে:
কোটলিন
val purchasesUpdatedListener =
PurchasesUpdatedListener { billingResult, purchases ->
// Handle new Google Play purchase.
}
val userChoiceBillingListener =
UserChoiceBillingListener { userChoiceDetails ->
// Handle alternative billing choice.
}
val billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.enableUserChoiceBilling(userChoiceBillingListener)
.build()
জাভা
private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
@Override
public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
// Handle new Google Play purchase.
}
};
private UserChoiceBillingListener userChoiceBillingListener = new UserChoiceBillingListener() {
@Override
public void userSelectedAlternativeBilling(
UserChoiceDetails userChoiceDetails) {
// Handle new Google Play purchase.
}
};
private BillingClient billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.enableUserChoiceBilling(userChoiceBillingListener)
.build();
BillingClient আরম্ভ করার পরে, ইন্টিগ্রেশন গাইডে বর্ণিত Google Play-তে একটি সংযোগ স্থাপন করতে হবে।
উপলব্ধ পণ্যগুলি প্রদর্শন করুন
আপনি Google Play বিলিং সিস্টেম ইন্টিগ্রেশনের মতোই ব্যবহারকারীর কাছে উপলব্ধ পণ্যগুলি প্রদর্শন করতে পারেন। যখন আপনার ব্যবহারকারী কেনার জন্য উপলব্ধ পণ্যগুলি দেখে ফেলেন এবং কেনার জন্য একটি নির্বাচন করেন, তখন নিম্নলিখিত বিভাগে বর্ণিত ব্যবহারকারীর পছন্দের বিলিং প্রবাহ চালু করুন।
ব্যবহারকারীর পছন্দের বিলিং ফ্লো চালু করুন
launchBillingFlow() কল করে ব্যবহারকারীর পছন্দের বিলিং ফ্লো চালু করুন। এটি Google Play বিলিং সিস্টেম ইন্টিগ্রেশনের মাধ্যমে একটি ক্রয় ফ্লো চালু করার মতোই কাজ করে: আপনি একটি ProductDetails ইনস্ট্যান্স এবং একটি offerToken প্রদান করেন যা পণ্য এবং ব্যবহারকারী যে অফারের জন্য আগ্রহী তার সাথে সঙ্গতিপূর্ণ। যদি ব্যবহারকারী Google Play এর বিলিং সিস্টেম বেছে নেন, তাহলে এই তথ্য ক্রয় ফ্লো চালিয়ে যেতে ব্যবহার করা হয়।
যখন ডেভেলপাররা launchBillingFlow() কল করে, তখন Google Play বিলিং সিস্টেম নিম্নলিখিত পরীক্ষাটি সম্পাদন করে:
- সিস্টেমটি পরীক্ষা করে যে ব্যবহারকারীর Google Play দেশটি এমন একটি দেশ কিনা যা ব্যবহারকারীর পছন্দের (অর্থাৎ সমর্থিত দেশ) বিকল্প বিলিং সমর্থন করে। যদি ব্যবহারকারীর Google Play দেশটি সমর্থিত হয়, তাহলে
BillingClientএর কনফিগারেশনের উপর ভিত্তি করে Google Play পরীক্ষা করে যে বিকল্প বিলিং সক্ষম করা হয়েছে কিনা।- যদি ব্যবহারকারীর পছন্দ সহ বিকল্প বিলিং সক্ষম করা থাকে, তাহলে ক্রয় প্রবাহ ব্যবহারকারীর পছন্দ UX দেখায়।
- যদি ব্যবহারকারীর পছন্দ সহ বিকল্প বিলিং সক্ষম না করা থাকে, তাহলে ক্রয় প্রবাহ ব্যবহারকারীর পছন্দ ছাড়াই স্ট্যান্ডার্ড Google Play বিলিং সিস্টেম UX দেখায়।
- যদি ব্যবহারকারীর Google Play দেশটি সমর্থিত দেশ না হয়, তাহলে ক্রয় প্রবাহ ব্যবহারকারীর পছন্দ ছাড়াই স্ট্যান্ডার্ড Google Play বিলিং সিস্টেম UX দেখায়।
ব্যবহারকারীর খেলার দেশটি একটি সমর্থিত দেশ | ব্যবহারকারীর খেলার দেশটি সমর্থিত দেশ নয় | |
|---|---|---|
BillingClient সেটআপের সময় কল করা enableUserChoiceBilling | ব্যবহারকারী ব্যবহারকারীর পছন্দের UX দেখেন | ব্যবহারকারী স্ট্যান্ডার্ড গুগল প্লে বিলিং সিস্টেম ইউএক্স দেখেন |
BillingClient সেটআপের সময় enableUserChoiceBilling কল করা হয়নি | ব্যবহারকারী স্ট্যান্ডার্ড গুগল প্লে বিলিং সিস্টেম ইউএক্স দেখেন | ব্যবহারকারী স্ট্যান্ডার্ড গুগল প্লে বিলিং সিস্টেম ইউএক্স দেখেন |
ব্যবহারকারী নির্বাচন পরিচালনা করুন
বাকি ক্রয় প্রবাহ কীভাবে পরিচালনা করবেন তা ব্যবহারকারী Google Play এর বিলিং সিস্টেম নাকি বিকল্প বিলিং সিস্টেম বেছে নিয়েছেন তার উপর নির্ভর করে।
যখন ব্যবহারকারী একটি বিকল্প বিলিং সিস্টেম নির্বাচন করেন
যদি ব্যবহারকারী বিকল্প বিলিং সিস্টেমটি বেছে নেন, তাহলে Google Play UserChoiceBillingListener কল করে অ্যাপটিকে অবহিত করে যে তাদের বিকল্প বিলিং সিস্টেমে ক্রয় প্রবাহ চালু করতে হবে। বিশেষ করে, userSelectedAlternativeBilling() পদ্ধতিটি বলা হয়।
UserChoiceDetails অবজেক্টে প্রদত্ত বহিরাগত লেনদেন টোকেনটি বিকল্প বিলিং প্রবাহে প্রবেশের জন্য ব্যবহারকারীর পছন্দের জন্য একটি স্বাক্ষর উপস্থাপন করে। ব্যাকএন্ড ইন্টিগ্রেশন গাইডে ব্যাখ্যা করা হয়েছে যে এই পছন্দের ফলে যে কোনও লেনদেন রিপোর্ট করতে এই টোকেনটি ব্যবহার করুন।
UserChoiceBillingListener এর নিম্নলিখিত ক্রিয়াগুলি সম্পাদন করা উচিত:
- ব্যবহারকারীর দ্বারা কেনা পণ্য বা পণ্যগুলি পান যাতে সেগুলি বিকল্প বিলিং সিস্টেমে ক্রয় প্রবাহে উপস্থাপন করা যায়।
- বাহ্যিক লেনদেন টোকেন হিসেবে প্রাপ্ত স্ট্রিংটি সংগ্রহ করুন এবং এটি ধরে রাখার জন্য আপনার ব্যাকএন্ডে পাঠান। ব্যবহারকারী যদি এই নির্দিষ্ট ক্রয়টি সম্পন্ন করেন তবে পরবর্তীতে বাহ্যিক লেনদেনটি Google Play-তে রিপোর্ট করার জন্য এটি ব্যবহার করা হবে।
- ডেভেলপারের বিকল্প ক্রয় প্রবাহ চালু করুন।
যদি ব্যবহারকারী বিকল্প বিলিং সিস্টেম ব্যবহার করে কেনাকাটা সম্পন্ন করেন, তাহলে আপনাকে 24 ঘন্টার মধ্যে আপনার ব্যাকএন্ড থেকে Google Play ডেভেলপার API-তে কল করে Google Play-তে লেনদেনের রিপোর্ট করতে হবে , externalTransactionToken এবং অতিরিক্ত লেনদেনের বিবরণ প্রদান করতে হবে। আরও বিস্তারিত জানার জন্য ব্যাকএন্ড ইন্টিগ্রেশন গাইড দেখুন।
নিম্নলিখিত উদাহরণটি UserChoiceBillingListener কীভাবে বাস্তবায়ন করতে হয় তা দেখায়:
কোটলিন
private val userChoiceBillingListener =
UserChoiceBillingListener { userChoiceDetails ->
// Get the products being purchased by the user.
val products = userChoiceDetails.products
// Send external transaction token to developer backend server
// this devBackend object is for demonstration purposes,
// developers can implement this step however best fits their
// app to backend communication.
devBackend.sendExternalTransactionStarted(
userChoiceDetails.externalTransactionToken,
user
)
// Launch alternative billing
// ...
// The developer backend handles reporting the transaction
// to Google Play's backend once the alternative billing
// purchase is completed.
}
জাভা
private userChoiceBillingListener userChoiceBillingListener = new UserChoiceBillingListener() {
@Override
public void userSelectedAlternativeBilling(
UserChoiceDetails userChoiceDetails) {
// Get the products being purchased by the user.
List<Product> products =
userChoiceDetails.getProducts();
// Send external transaction token to developer backend server
// this devBackend object is for demonstration purposes,
// developers can implement this step however best fits their
// app to backend communication.
devBackend.sendExternalTransactionStarted(
userChoiceDetails.getExternalTransactionToken(),
user
);
// Launch alternative billing
// ...
// The developer backend handles reporting the transaction
// to Google Play's backend once the alternative billing
// purchase is completed.
}
};
যখন ব্যবহারকারী Google Play এর বিলিং সিস্টেম নির্বাচন করেন
ব্যবহারকারী যদি গুগল প্লে-এর বিলিং সিস্টেম বেছে নেন, তাহলে তারা গুগল প্লে-এর মাধ্যমে কেনাকাটা চালিয়ে যাবেন।
- গুগল প্লে-এর বিলিং সিস্টেমের মাধ্যমে নতুন অ্যাপ-মধ্যস্থ কেনাকাটা কীভাবে পরিচালনা করবেন সে সম্পর্কে আরও তথ্যের জন্য লাইব্রেরি ইন্টিগ্রেশন গাইডে কেনাকাটা প্রক্রিয়াকরণ দেখুন।
- সাবস্ক্রিপশন ক্রয়ের জন্য অতিরিক্ত নির্দেশিকা পেতে সাবস্ক্রিপশন ব্যবস্থাপনা নির্দেশিকাতে নতুন সাবস্ক্রিপশন দেখুন।
সাবস্ক্রিপশনের পরিবর্তনগুলি পরিচালনা করুন
ব্যবহারকারীর পছন্দের বিকল্প বিলিং ব্যবহারকারী ডেভেলপারদের জন্য, ব্যবহারকারীর পছন্দের উপর নির্ভর করে ক্রয়গুলি Google Play এর বিলিং সিস্টেমের মাধ্যমে প্রক্রিয়াজাত করতে হবে অথবা একটি externalTransactionId দিয়ে রিপোর্ট করতে হবে। ব্যবহারকারীর পছন্দের প্রবাহের মাধ্যমে প্রক্রিয়াকৃত বিদ্যমান সাবস্ক্রিপশনগুলিতে পরিবর্তনগুলি মেয়াদ শেষ না হওয়া পর্যন্ত একই বিলিং সিস্টেমের মাধ্যমে করা যেতে পারে।
এই বিভাগে কিছু সাধারণ সাবস্ক্রিপশন পরিবর্তনের পরিস্থিতি কীভাবে পরিচালনা করতে হয় তা বর্ণনা করা হয়েছে।
আপগ্রেড এবং ডাউনগ্রেড প্রবাহ
সাবস্ক্রিপশন প্ল্যানের পরিবর্তনগুলি, যার মধ্যে আপগ্রেড এবং ডাউনগ্রেড ফ্লো অন্তর্ভুক্ত, তা ভিন্নভাবে পরিচালনা করা উচিত, সাবস্ক্রিপশনটি মূলত গুগল প্লে-এর বিলিং সিস্টেমের মাধ্যমে কেনা হয়েছিল নাকি বিকল্প বিলিং সিস্টেমের মাধ্যমে কেনা হয়েছিল তার উপর নির্ভর করে।
যেসব অ্যাড-অন বিদ্যমান সাবস্ক্রিপশনের উপর নির্ভর করে, একই পেমেন্ট পদ্ধতি ব্যবহার করে এবং পুনরাবৃত্ত চার্জ সারিবদ্ধ করে, সেগুলো আপগ্রেড হিসেবে পরিচালিত হয়। অন্যান্য অ্যাড-অনের জন্য, ব্যবহারকারীরা কোন বিলিং সিস্টেম ব্যবহার করতে চান তা বেছে নিতে সক্ষম হবেন। ব্যবহারকারীর পছন্দের বিলিং প্রবাহ চালু করুন -এ বর্ণিত launchBillingFlow() ব্যবহার করে একটি নতুন ক্রয়ের অভিজ্ঞতা শুরু করুন।
বিকল্প বিলিং সিস্টেমের মাধ্যমে কেনা সাবস্ক্রিপশন
ব্যবহারকারীর পছন্দের পরে ডেভেলপারের বিকল্প বিলিং সিস্টেমের মাধ্যমে মূলত কেনা সাবস্ক্রিপশনের জন্য, আপগ্রেড বা ডাউনগ্রেডের অনুরোধকারী ব্যবহারকারীদের আবার ব্যবহারকারীর পছন্দের অভিজ্ঞতা না দিয়ে ডেভেলপারের বিকল্প বিলিং সিস্টেমের মাধ্যমে এগিয়ে যেতে হবে।
এটি করার জন্য, ব্যবহারকারী যখন আপগ্রেড বা ডাউনগ্রেডের অনুরোধ করেন তখন launchBillingFlow() কল করুন। প্যারামিটারগুলিতে SubscriptionUpdateParams অবজেক্ট নির্দিষ্ট করার পরিবর্তে, setOriginalExternalTransactionId ব্যবহার করুন, মূল ক্রয়ের জন্য বাহ্যিক লেনদেন আইডি প্রদান করুন। এটি ব্যবহারকারীর পছন্দের স্ক্রিনটি প্রদর্শন করে না , কারণ মূল ক্রয়ের জন্য ব্যবহারকারীর পছন্দ আপগ্রেড এবং ডাউনগ্রেডের জন্য সংরক্ষিত থাকে। এই ক্ষেত্রে launchBillingFlow() এ কল করলে লেনদেনের জন্য একটি নতুন বাহ্যিক লেনদেন টোকেন তৈরি হয় যা আপনি কলব্যাক থেকে পুনরুদ্ধার করতে পারেন।
কোটলিন
// The external transaction ID from the current
// alternative billing subscription.
val externalTransactionId = //... ;
val billingFlowParams = BillingFlowParams.newBuilder()
.setProductDetailsParamsList(
listOf(
BillingFlowParams.ProductDetailsParams.newBuilder()
// Fetched using queryProductDetailsAsync.
.setProductDetails(productDetailsNewPlan)
// offerIdToken can be found in
// ProductDetails=>SubscriptionOfferDetails.
.setOfferToken(offerTokenNewPlan)
.build()
)
)
.setSubscriptionUpdateParams(
BillingFlowParams.SubscriptionUpdateParams.newBuilder()
.setOriginalExternalTransactionId(externalTransactionId)
.build()
)
.build()
val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
// When the user selects the alternative billing flow,
// the UserChoiceBillingListener is triggered.
জাভা
// The external transaction ID from the current
// alternative billing subscription.
String externalTransactionId = //... ;
BillingFlowParams billingFlowParams =
BillingFlowParams.newBuilder()
.setProductDetailsParamsList(
ImmutableList.of(
ProductDetailsParams.newBuilder()
// Fetched using queryProductDetailsAsync.
.setProductDetails(productDetailsNewPlan)
// offerIdToken can be found in
// ProductDetails=>SubscriptionOfferDetails
.setOfferToken(offerTokenNewPlan)
.build()
)
)
.setSubscriptionUpdateParams(
SubscriptionUpdateParams.newBuilder()
.setOriginalExternalTransactionId(externalTransactionId)
.build()
)
.build();
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
// When the user selects the alternative billing flow,
// the UserChoiceBillingListener is triggered.
বিকল্প বিলিং সিস্টেমে আপগ্রেড বা ডাউনগ্রেড সম্পন্ন হলে, নতুন সাবস্ক্রিপশন ক্রয়ের জন্য পূর্ববর্তী কলের মাধ্যমে প্রাপ্ত বহিরাগত লেনদেন টোকেন ব্যবহার করে আপনাকে একটি নতুন লেনদেনের রিপোর্ট করতে হবে।
Google Play এর বিলিং সিস্টেমের মাধ্যমে কেনা সাবস্ক্রিপশন
একইভাবে, ব্যবহারকারীদের পছন্দের পরে যারা Google Play-এর বিলিং সিস্টেমের মাধ্যমে তাদের বর্তমান সাবস্ক্রিপশন কিনেছেন তাদের Google Play-এর বিলিং সিস্টেমে আপগ্রেড বা ডাউনগ্রেড ফ্লো দেখানো উচিত। নিম্নলিখিত নির্দেশাবলী বর্ণনা করে যে আপনি Google Play-এর বিলিং সিস্টেমের মাধ্যমে আপগ্রেড বা ডাউনগ্রেডের জন্য ক্রয় ফ্লো কীভাবে চালু করবেন:
নতুন প্ল্যানের জন্য নির্বাচিত অফারের
offerTokenচিহ্নিত করুন:কোটলিন
val offerTokenNewPlan = productDetailsNewPlan .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken()জাভা
String offerTokenNewPlan = productDetailsNewPlan .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken();নতুন কেনাকাটা প্রক্রিয়া করার জন্য Google Play-এর বিলিং সিস্টেমে সঠিক তথ্য পাঠান, যার মধ্যে বিদ্যমান সাবস্ক্রিপশনের ক্রয় টোকেনও অন্তর্ভুক্ত রয়েছে:
কোটলিন
val billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList( listOf( BillingFlowParams.ProductDetailsParams.newBuilder() // Fetched using queryProductDetailsAsync .setProductDetails(productDetailsNewPlan) // offerIdToken can be found in // ProductDetails=>SubscriptionOfferDetails. .setOfferToken(offerTokenNewPlan) .build() ) ) .setSubscriptionUpdateParams( BillingFlowParams.SubscriptionUpdateParams.newBuilder() // purchaseToken can be found in // Purchase#getPurchaseToken .setOldPurchaseToken(oldToken) .setReplaceProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE) .build() ) .build() val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)জাভা
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList( ImmutableList.of( ProductDetailsParams.newBuilder() // Fetched using queryProductDetailsAsync .setProductDetails(productDetailsNewPlan) // offerIdToken can be found in // ProductDetails=>SubscriptionOfferDetails. .setOfferToken(offerTokenNewPlan) .build() ) ) .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() // purchaseToken can be found in // Purchase#getPurchaseToken .setOldPurchaseToken(oldToken) .setReplaceProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE) .build() ) .build(); BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
এই ক্রয়টি Google Play এর বিলিং সিস্টেমে সম্পন্ন হয় এবং আপনার অ্যাপটি ক্রয়ের ফলাফল সহ PurchasesUpdatedListener.onPurchaseUpdated কলটি গ্রহণ করে। যদি ক্রয়টি সফল হয়, তাহলে onPurchaseUpdated() পদ্ধতিটি নতুন ক্রয়ের তথ্যও গ্রহণ করে এবং আপনার ব্যাকএন্ড একটি SUBSCRIPTION_PURCHASED রিয়েল টাইম ডেভেলপার বিজ্ঞপ্তি পায়। নতুন ক্রয়ের জন্য স্ট্যাটাসটি টানার সময়, একটি linkedPurchaseToken অ্যাট্রিবিউট পুরানো সাবস্ক্রিপশন ক্রয়ের সাথে লিঙ্ক করে যাতে আপনি এটি সুপারিশ অনুসারে বাতিল করতে পারেন।
সাবস্ক্রিপশন বাতিলকরণ এবং পুনরুদ্ধার
ব্যবহারকারীরা যেকোনো সময় তাদের সাবস্ক্রিপশন বাতিল করতে পারবেন। যখন একজন ব্যবহারকারী সাবস্ক্রিপশন বাতিল করেন, তখন প্রদত্ত সময়কাল শেষ না হওয়া পর্যন্ত এনটাইটেলমেন্টের অবসান স্থগিত করা যেতে পারে। উদাহরণস্বরূপ, যদি একজন ব্যবহারকারী মাসের মাঝামাঝি সময়ে একটি মাসিক সাবস্ক্রিপশন বাতিল করেন, তাহলে তাদের অ্যাক্সেস অপসারণ না করা পর্যন্ত বাকি ~2 সপ্তাহের জন্য তারা পরিষেবাটি অ্যাক্সেস করতে পারবেন। এই সময়ের মধ্যে, সাবস্ক্রিপশনটি এখনও প্রযুক্তিগতভাবে সক্রিয় থাকে, তাই ব্যবহারকারী পরিষেবাটি ব্যবহার করতে পারবেন।
এই সক্রিয় সময়ের মধ্যে ব্যবহারকারীরা বাতিলকরণ বাতিল করার সিদ্ধান্ত নেন এমনটা অস্বাভাবিক কিছু নয়। এই নির্দেশিকায়, এটিকে পুনরুদ্ধার বলা হয়। নিম্নলিখিত বিভাগগুলিতে আপনার বিকল্প বিলিং API ইন্টিগ্রেশনে পুনরুদ্ধারের পরিস্থিতি কীভাবে পরিচালনা করবেন তা বর্ণনা করা হয়েছে।
বিকল্প বিলিং সিস্টেমের মাধ্যমে কেনা সাবস্ক্রিপশন
যদি আপনার বাতিল করা সাবস্ক্রিপশনের জন্য একটি বহিরাগত লেনদেন আইডি থাকে, তাহলে সাবস্ক্রিপশন পুনরুদ্ধার করার জন্য launchBillingFlow() কল করার প্রয়োজন নেই, তাই এই ধরণের সক্রিয়করণের জন্য এটি ব্যবহার করা উচিত নয়। যদি কোনও ব্যবহারকারী বাতিল করা সাবস্ক্রিপশনের সক্রিয় সময়কালে তাদের সাবস্ক্রিপশন পুনরুদ্ধার করেন, তবে সেই সময়ে কোনও লেনদেন হয় না; বর্তমান চক্রের মেয়াদ শেষ হয়ে গেলে এবং পরবর্তী পুনর্নবীকরণ ঘটলে আপনি কেবল পুনর্নবীকরণের প্রতিবেদন চালিয়ে যেতে পারেন। এর মধ্যে এমন ঘটনাও অন্তর্ভুক্ত যেখানে ব্যবহারকারী পুনরুদ্ধারের অংশ হিসাবে একটি ক্রেডিট বা বিশেষ পুনর্নবীকরণ মূল্য পান (উদাহরণস্বরূপ, ব্যবহারকারীকে তাদের সাবস্ক্রিপশন চালিয়ে যেতে উৎসাহিত করার জন্য একটি প্রচার)।
Google Play এর বিলিং সিস্টেমের মাধ্যমে কেনা সাবস্ক্রিপশন
সাধারণত, ব্যবহারকারীরা Google Play-এর বিলিং সিস্টেমে সাবস্ক্রিপশন পুনরুদ্ধার করতে পারেন। Google Play-এর বিলিং সিস্টেমে মূলত কেনা বাতিল করা সাবস্ক্রিপশনের ক্ষেত্রে, ব্যবহারকারী Google Play-এর পুনঃসাবস্ক্রাইব বৈশিষ্ট্যের মাধ্যমে সাবস্ক্রিপশন সক্রিয় থাকাকালীন বাতিলকরণ পূর্বাবস্থায় ফেরাতে পারেন। সেক্ষেত্রে, আপনি আপনার ব্যাকএন্ডে একটি SUBSCRIPTION_RESTARTED রিয়েল টাইম ডেভেলপার বিজ্ঞপ্তি পাবেন এবং একটি নতুন ক্রয় টোকেন জারি করা হবে না —সদস্যতা চালিয়ে যাওয়ার জন্য মূল টোকেনটি ব্যবহার করা হবে। Google Play-এর বিলিং সিস্টেমে পুনরুদ্ধার কীভাবে পরিচালনা করবেন তা জানতে, সাবস্ক্রিপশন পরিচালনা নির্দেশিকাতে পুনরুদ্ধারগুলি দেখুন।
আপনি launchBillingFlow() কল করে অ্যাপ থেকে Google Play এর বিলিং সিস্টেমে পুনরুদ্ধার শুরু করতে পারেন। এটি কীভাবে করবেন তার ব্যাখ্যার জন্য সাবস্ক্রিপশনের মেয়াদ শেষ হওয়ার আগে - ইন-অ্যাপ দেখুন। মূল ক্রয়ের জন্য ব্যবহারকারীর পছন্দ প্রবাহের মধ্য দিয়ে যাওয়া ব্যবহারকারীদের ক্ষেত্রে (যা বাতিল করা হয়েছিল কিন্তু এখনও সক্রিয়), সিস্টেমটি স্বয়ংক্রিয়ভাবে তাদের পছন্দ সনাক্ত করে এবং এই ক্রয়গুলি পুনরুদ্ধার করার জন্য ব্যবহারকারী ইন্টারফেস প্রদর্শন করে। তাদের Google Play এর মাধ্যমে সাবস্ক্রিপশন পুনঃক্রয় নিশ্চিত করতে বলা হয়, তবে তাদের আবার ব্যবহারকারীর পছন্দ প্রবাহের মধ্য দিয়ে যেতে হবে না। এই ক্ষেত্রে ব্যবহারকারীর জন্য একটি নতুন ক্রয় টোকেন জারি করা হয়। আপনার ব্যাকএন্ড একটি SUBSCRIPTION_PURCHASED রিয়েল টাইম ডেভেলপার বিজ্ঞপ্তি পায় এবং নতুন ক্রয়ের স্থিতির জন্য linkedPurchaseToken মান আপগ্রেড বা ডাউনগ্রেডের ক্ষেত্রে সেট করা হয়, বাতিল করা সাবস্ক্রিপশনের জন্য পুরানো ক্রয় টোকেন সহ।
পুনঃসদস্যতা
যদি কোনও সাবস্ক্রিপশন সম্পূর্ণরূপে শেষ হয়ে যায়, তা বাতিলকরণের কারণে হোক বা পুনরুদ্ধার ছাড়াই অর্থপ্রদান প্রত্যাখ্যানের কারণে হোক (একটি মেয়াদোত্তীর্ণ অ্যাকাউন্ট হোল্ড), তাহলে ব্যবহারকারীকে এনটাইটেলমেন্ট পুনরায় চালু করতে চাইলে পুনরায় সাবস্ক্রাইব করতে হবে।
অ্যাপের মাধ্যমে পুনরায় সাবস্ক্রাইব করাও একটি স্ট্যান্ডার্ড সাইনআপের মতো প্রক্রিয়াকরণের মাধ্যমে সক্ষম করা যেতে পারে। ব্যবহারকারীরা কোন বিলিং সিস্টেম ব্যবহার করতে চান তা বেছে নিতে সক্ষম হবেন। এই ক্ষেত্রে launchBillingFlow() বলা যেতে পারে, যেমনটি ব্যবহারকারীর পছন্দের বিলিং প্রবাহ চালু করুন বিভাগে বর্ণিত হয়েছে।
বিকল্প বিলিং পরীক্ষা করুন
আপনার বিকল্প বিলিং ইন্টিগ্রেশন পরীক্ষা করার জন্য লাইসেন্স পরীক্ষক ব্যবহার করা উচিত। লাইসেন্স পরীক্ষক অ্যাকাউন্ট দ্বারা শুরু করা লেনদেনের জন্য আপনাকে ইনভয়েস করা হবে না। লাইসেন্স পরীক্ষক কনফিগার করার বিষয়ে আরও তথ্যের জন্য অ্যাপ্লিকেশন লাইসেন্সিং সহ টেস্ট ইন-অ্যাপ বিলিং দেখুন।
পরবর্তী পদক্ষেপ
একবার আপনি ইন-অ্যাপ ইন্টিগ্রেশন শেষ করলে, আপনি আপনার ব্যাকএন্ড ইন্টিগ্রেট করার জন্য প্রস্তুত।