আপনার অ্যাপে ব্যবহারকারীর পছন্দ অনুযায়ী বিকল্প বিলিং অফার করতে, কীভাবে API ইন্টিগ্রেট করতে হয় তা এই গাইড থেকে জানতে পারবেন।
Play Billing Library সেট-আপ
আপনার Android অ্যাপে Play Billing লাইব্রেরি ডিপেন্ডেন্সি যোগ করুন। বিকল্প বিলিং API ব্যবহার করতে হলে আপনাকে 5.2 বা তার পরবর্তী যেকোনও ভার্সন ব্যবহার করতে হবে। আপনি যদি আগের কোনও ভার্সন থেকে মাইগ্রেট করতে চান, তাহলে বিকল্প বিলিং প্রয়োগ করার চেষ্টা করার আগে মাইগ্রেশন গাইড-এ দেওয়া নির্দেশাবলী অনুসরণ করুন।
Google Play-তে কানেক্ট করা
ইন্টিগ্রেশন প্রসেসের প্রথম ধাপগুলি Google Play বিলিং ইন্টিগ্রেশন গাইড-এ বর্ণিত ধাপগুলির মতোই, তবে আপনার BillingClient ইনিশিয়ালাইজ করার সময় কিছু পরিবর্তন করতে হবে:
- আপনি যে ব্যবহারকারীকে বিলিং বিকল্পের
চয়েস অফার করতে চান তা বোঝাতে আপনাকে একটি নতুন পদ্ধতি কল করতে হবে:
enableUserChoiceBilling। - ব্যবহারকারী বিকল্প বিলিং বেছে নিলে, সেইসব কেস হ্যান্ডেল করার জন্য আপনাকে একটি
UserChoiceBillingListenerরেজিস্টার করতে হবে ।
নিচের উদাহরণে এইসব পরিবর্তন সহ BillingClient শুরু করার
পদ্ধতি দেখানো হয়েছে:
Kotlin
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(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) .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 দেশ কাজ করলে, Google Play চেক করে দেখে যে
BillingClient-এর কনফিগারেশনের উপর ভিত্তি করে বিকল্প বিলিং চালু করা হয়েছে কিনা।- ব্যবহারকারীর পছন্দ সহ বিকল্প বিলিং চালু করা থাকলে, কেনাকাটার ফ্লোতে ব্যবহারকারীর পছন্দ সংক্রান্ত UX দেখানো হয়।
- ব্যবহারকারীর পছন্দ সহ বিকল্প বিলিং চালু করা না থাকলে, কেনাকাটার ফ্লোতে ব্যবহারকারীর পছন্দ ছাড়াই স্ট্যান্ডার্ড Google Play বিলিং সিস্টেম UX দেখানো হয়।
- ব্যবহারকারীর Google Play দেশ যদি কাজ করে এমন দেশ না হয়, তাহলে কেনাকাটার ফ্লোতে ব্যবহারকারীর পছন্দ ছাড়াই স্ট্যান্ডার্ড Google Play বিলিং সিস্টেম UX দেখানো হয়।
ব্যবহারকারীর Play দেশ হল একটি কাজ করে এমন দেশ |
ব্যবহারকারীর Play কান্ট্রি এমন কোনও দেশ নয় যেখানে এটি কাজ করে |
|
|---|---|---|
BillingClient সেট-আপ করার সময় enableUserChoiceBilling কল করা হয় |
ব্যবহারকারী ব্যবহারকারীর পছন্দ সংক্রান্ত UX দেখতে পান |
ব্যবহারকারী স্ট্যান্ডার্ড Google Play বিলিং সিস্টেম UX দেখতে পান |
BillingClient সেট-আপ করার সময় enableUserChoiceBilling কল করা হয়নি |
ব্যবহারকারী স্ট্যান্ডার্ড Google Play বিলিং সিস্টেম UX দেখতে পান |
ব্যবহারকারী স্ট্যান্ডার্ড Google Play বিলিং সিস্টেম UX দেখতে পান |
ব্যবহারকারীর বেছে নেওয়া বিকল্প ম্যানেজ করা
ব্যবহারকারী Google Play-র বিলিং সিস্টেম বেছে নিয়েছেন নাকি বিকল্প বিলিং সিস্টেম বেছে নিয়েছেন, তার উপর নির্ভর করে আপনি কেনাকাটা প্রসেসের বাকি অংশটি কীভাবে ম্যানেজ করবেন তা আলাদা হয়।
ব্যবহারকারী বিকল্প বিলিং সিস্টেম বেছে নিলে
ব্যবহারকারী বিকল্প বিলিং সিস্টেম বেছে নিলে, Google Play
UserChoiceBillingListener কল করে অ্যাপকে জানায় যে সেটিকে বিকল্প বিলিং সিস্টেমে
কেনাকাটার প্রসেস লঞ্চ করতে হবে। বিশেষ করে, userSelectedAlternativeBilling() পদ্ধতি কল করা হয়।
UserChoiceDetails অবজেক্টে
প্রদান করা এক্সটার্নাল ট্রানজ্যাকশন টোকেন
বিকল্প বিলিং ফ্লোতে প্রবেশ করার জন্য ব্যবহারকারীর পছন্দের একটি সিগনেচারকে উপস্থাপন করে। এই বিকল্প বেছে নেওয়ার ফলে হওয়া যেকোনও ট্রানজ্যাকশনের বিষয়ে অভিযোগ জানাতে এই টোকেন ব্যবহার করুন।
এটি ব্যাকএন্ড ইন্টিগ্রেশন গাইড-এ ব্যাখ্যা করা হয়েছে।
UserChoiceBillingListener-কে নিম্নলিখিত অ্যাকশন নিতে হবে:
- ব্যবহারকারী যে প্রোডাক্ট বা প্রোডাক্টগুলি কিনছেন সেগুলি পান যাতে সেগুলি বিকল্প বিলিং সিস্টেমে কেনাকাটার ফ্লোতে দেখানো যায়।
- এক্সটার্নাল ট্রানজ্যাকশন টোকেন হিসেবে প্রাপ্ত স্ট্রিং সংগ্রহ করুন এবং এটি সেভ করে রাখার জন্য আপনার ব্যাকএন্ডে পাঠান। ব্যবহারকারী এই নির্দিষ্ট কেনাকাটা সম্পূর্ণ করলে, Google Play-তে এক্সটার্নাল ট্রানজ্যাকশন সম্পর্কে অভিযোগ জানানোর জন্য এটি পরে ব্যবহার করা হয়।
- ডেভেলপারের বিকল্প কেনাকাটার ফ্লো লঞ্চ করুন।
ব্যবহারকারী বিকল্প বিলিং সিস্টেম ব্যবহার করে কেনাকাটা সম্পূর্ণ করলে, আপনাকে
অবশ্যই ২৪ ঘণ্টার মধ্যে আপনার ব্যাক-এন্ড থেকে Google Play Developer
API কল করে Google Play-তে ট্রানজ্যাকশন সম্পর্কে রিপোর্ট করতে হবে, এর সাথে
externalTransactionToken এবং অতিরিক্ত ট্রানজ্যাকশনের বিবরণ দিতে হবে। আরও বিবরণের জন্য
ব্যাকএন্ড ইন্টিগ্রেশন গাইড দেখুন।
নিচের উদাহরণ থেকে কীভাবে
UserChoiceBillingListener প্রয়োগ করতে হয় তা জানুন:
Kotlin
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-র বিলিং সিস্টেম বেছে নিলে, তিনি Google Play-র মাধ্যমে কেনাকাটা চালিয়ে যান।
- Google Play-এর বিলিং সিস্টেমের মাধ্যমে নতুন অ্যাপ-মধ্যস্থ কেনাকাটা কীভাবে ম্যানেজ করবেন সেই সম্পর্কে আরও তথ্য পেতে লাইব্রেরি ইন্টিগ্রেশন গাইডে কেনাকাটা প্রসেস করা দেখুন।
- সাবস্ক্রিপশন কেনার ব্যাপারে অতিরিক্ত নির্দেশিকা পেতে সাবস্ক্রিপশন ম্যানেজমেন্ট গাইডে নতুন সাবস্ক্রিপশন দেখুন।
সাবস্ক্রিপশনে পরিবর্তন ম্যানেজ করা
ব্যবহারকারীর পছন্দ অনুযায়ী বিকল্প বিলিং ব্যবহার করা ডেভেলপারদের ক্ষেত্রে, কেনাকাটা
Google Play-এর বিলিং সিস্টেমের মাধ্যমে প্রসেস করতে হবে অথবা
externalTransactionId সহ রিপোর্ট করতে হবে, এটি ব্যবহারকারীর পছন্দের উপর নির্ভর করে। ব্যবহারকারীর পছন্দ সংক্রান্ত ফ্লোয়ের মাধ্যমে প্রসেস করা হয়েছে এমন আগে থেকে থাকা
সাবস্ক্রিপশনে পরিবর্তন করতে চাইলে, মেয়াদ শেষ না হওয়া পর্যন্ত একই বিলিং সিস্টেমের মাধ্যমে
তা করা যাবে।
সাবস্ক্রিপশনে পরিবর্তন সংক্রান্ত কিছু সাধারণ পরিস্থিতি কীভাবে সামলাতে হয়, এই বিভাগে তার বিবরণ দেওয়া আছে।
ফ্লো আপগ্রেড ও ডাউনগ্রেড করা
আপগ্রেড ও ডাউনগ্রেড ফ্লো সহ সাবস্ক্রিপশন প্ল্যানে পরিবর্তন করার বিষয়টি আলাদাভাবে ম্যানেজ করতে হবে। এটি নির্ভর করে সাবস্ক্রিপশনটি Google Play-এর বিলিং সিস্টেম অথবা বিকল্প বিলিং সিস্টেমের মাধ্যমে কেনা হয়েছে কিনা তার উপর।
যেসব অ্যাড-অন আগে থেকে থাকা সাবস্ক্রিপশনের উপর নির্ভর করে, একই পেমেন্ট পদ্ধতি শেয়ার করে
এবং রেকারিং চার্জ একই থাকে, সেগুলিকে আপগ্রেড হিসেবে বিবেচনা করা হয়। অন্যান্য অ্যাড-অনের ক্ষেত্রে, ব্যবহারকারী
কোন বিলিং সিস্টেম ব্যবহার করতে চান তা বেছে নিতে পারবেন। launchBillingFlow() ব্যবহার করে নতুন
কেনাকাটার অভিজ্ঞতা শুরু করুন, যেমন ব্যবহারকারীর পছন্দ
বিলিং ফ্লো চালু করুন নিবন্ধে বর্ণনা করা হয়েছে।
বিকল্প বিলিং সিস্টেমের মাধ্যমে কেনা সাবস্ক্রিপশন
ব্যবহারকারীর পছন্দ অনুযায়ী ডেভেলপারের বিকল্প বিলিং সিস্টেমের মাধ্যমে কেনা সাবস্ক্রিপশনের ক্ষেত্রে, আপগ্রেড বা ডাউনগ্রেড করার অনুরোধকারী ব্যবহারকারীদের ডেভেলপারের বিকল্প বিলিং সিস্টেমের মাধ্যমে প্রসেস করতে হবে এবং তাদের আর ব্যবহারকারীর পছন্দ সংক্রান্ত অভিজ্ঞতা নিতে হবে না।
এটি করতে, ব্যবহারকারী আপগ্রেড বা
ডাউনগ্রেড করার অনুরোধ করলে launchBillingFlow()-এ কল করুন।
প্যারামিটারে SubscriptionUpdateParams অবজেক্ট নির্দিষ্ট করার পরিবর্তে, setOriginalExternalTransactionId ব্যবহার করুন, এর সাথে আসল কেনাকাটার জন্য এক্সটার্নাল
ট্রানজ্যাকশন আইডি দিন। আপগ্রেড ও ডাউনগ্রেডের ক্ষেত্রে আসল কেনাকাটার জন্য ব্যবহারকারীর পছন্দ সেভ করা থাকে বলে এটি ব্যবহারকারীর
পছন্দ সংক্রান্ত স্ক্রিন দেখায় না। এই ক্ষেত্রে launchBillingFlow()-এ কল করলে
ট্রানজ্যাকশনের জন্য একটি নতুন এক্সটার্নাল ট্রানজ্যাকশন টোকেন তৈরি হয় যা আপনি
কলব্যাক থেকে রিট্রিভ করতে পারবেন।
Kotlin
// The external transaction ID from the current // alternative billing subscription. val externalTransactionId = "your_external_transaction_id" 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চিহ্নিত করুন:Kotlin
val offerTokenNewPlan = productDetailsNewPlan.getSubscriptionOfferDetails() ?.getOrNull(selectedOfferIndex) ?.offerToken ?: ""
জাভা
String offerTokenNewPlan = productDetailsNewPlan .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken();নতুন কেনাকাটা প্রসেস করার জন্য Google Play-এর বিলিং সিস্টেমে সঠিক তথ্য পাঠান। এর মধ্যে বর্তমান সাবস্ক্রিপশনের জন্য কেনাকাটা টোকেন অন্তর্ভুক্ত:
Kotlin
val billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList( listOf( BillingFlowParams.ProductDetailsParams.newBuilder() // Fetched using queryProductDetailsAsync .setProductDetails(productDetailsNewPlan) .setSubscriptionProductReplacementParams( SubscriptionProductReplacementParams.newBuilder() .setReplacementMode( SubscriptionProductReplacementParams.ReplacementMode.CHARGE_FULL_PRICE ) .setOldProductId("old_product_id") .build() ) // offerIdToken can be found in // ProductDetails=>SubscriptionOfferDetails. .setOfferToken(offerTokenNewPlan) .build() ) ) .setSubscriptionUpdateParams( BillingFlowParams.SubscriptionUpdateParams.newBuilder() // purchaseToken can be found in // Purchase#getPurchaseToken .setOldPurchaseToken(oldToken) .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 অ্যাট্রিবিউটটি পুরনো
সাবস্ক্রিপশন কেনাকাটার সাথে লিঙ্ক করে যাতে আপনি সাজেস্ট করা
হিসেবে এটি বন্ধ করতে পারেন।
সাবস্ক্রিপশন বাতিল করা ও রিস্টোর করা
ব্যবহারকারীকে যেকোনও সময় সাবস্ক্রিপশন বাতিল করার সুবিধা দিতে হবে। কোনও ব্যবহারকারী সাবস্ক্রিপশন বাতিল করলে, পেমেন্ট করা মেয়াদ শেষ না হওয়া পর্যন্ত এনটাইটেলমেন্ট বাতিল করা নাও হতে পারে। যেমন, কোনও ব্যবহারকারী মাসিক সাবস্ক্রিপশন মাসের মাঝামাঝি বাতিল করলে, তার অ্যাক্সেস সরিয়ে না দেওয়া পর্যন্ত বাকি ~২ সপ্তাহ পরিষেবা অ্যাক্সেস করতে পারবেন। এই সময়সীমার মধ্যে, সাবস্ক্রিপশন টেকনিক্যালি অ্যাক্টিভ থাকে, তাই ব্যবহারকারী পরিষেবা ব্যবহার করতে পারেন।
অ্যাক্টিভ থাকাকালীন ব্যবহারকারীরা যে বাতিল করার সিদ্ধান্ত পরিবর্তন করেন, তা অস্বাভাবিক নয়। এই নির্দেশিকায়, এটিকে রিস্টোরেশন বলা হয়। আপনার বিকল্প বিলিং API ইন্টিগ্রেশনে কীভাবে রিস্টোরেশন পরিস্থিতি সামলাবেন তা নিম্নলিখিত বিভাগগুলিতে বর্ণনা করা হয়েছে।
বিকল্প বিলিং সিস্টেমের মাধ্যমে কেনা সাবস্ক্রিপশন
বাতিল করা সাবস্ক্রিপশনের জন্য আপনার কাছে এক্সটার্নাল ট্রানজ্যাকশন আইডি থাকলে, সাবস্ক্রিপশন রিস্টোর করার জন্য launchBillingFlow()-এ কল করার প্রয়োজন নেই, তাই এই ধরনের অ্যাক্টিভেশনের জন্য এটি ব্যবহার করা
উচিত নয়। কোনও ব্যবহারকারী বাতিল করা সাবস্ক্রিপশনের অ্যাক্টিভ মেয়াদ চলাকালীন সেটি
রিস্টোর করলে, সেই সময় কোনও
ট্রানজ্যাকশন হয় না; বর্তমান চক্রের মেয়াদ শেষ হলে এবং পরবর্তী রিনিউয়াল হলে আপনি
রিনিউয়াল সম্পর্কে রিপোর্ট করা চালিয়ে যেতে পারেন। এর মধ্যে সেইসব কেস অন্তর্ভুক্ত যেখানে
রিস্টোরেশনের অংশ হিসেবে ব্যবহারকারী ক্রেডিট বা বিশেষ রিনিউয়াল প্রাইস পান
(যেমন, ব্যবহারকারীকে সাবস্ক্রিপশন চালিয়ে যেতে উৎসাহিত করার জন্য প্রোমোশন)।
Google Play-র বিলিং সিস্টেমের মাধ্যমে কেনা সাবস্ক্রিপশন
সাধারণত, ব্যবহারকারীরা Google Play-এর বিলিং সিস্টেমে সাবস্ক্রিপশন রিস্টোর করতে পারেন। Google Play-এর বিলিং
সিস্টেম থেকে কেনা বাতিল করা সাবস্ক্রিপশনের ক্ষেত্রে, Google Play-এর আবার সাবস্ক্রাইব করুন ফিচারের মাধ্যমে সাবস্ক্রিপশন
অ্যাক্টিভ থাকাকালীন ব্যবহারকারী বাতিল করা আনডু করার বিকল্প বেছে নিতে পারেন। সেই ক্ষেত্রে, আপনার
ব্যাকএন্ডে SUBSCRIPTION_RESTARTED রিয়েল-টাইম ডেভেলপার নোটিফিকেশন পাবেন
এবং নতুন পারচেজ টোকেন ইস্যু করা হবে না—সাবস্ক্রিপশন চালিয়ে যাওয়ার জন্য
মূল টোকেন ব্যবহার করা হবে। Google Play-এর বিলিং সিস্টেমে কীভাবে রিস্টোরেশন ম্যানেজ করতে হয় তা জানতে, সাবস্ক্রিপশন ম্যানেজমেন্ট
গাইডে রিস্টোরেশন দেখুন।
এছাড়াও, আপনি অ্যাপ থেকে Google Play-র বিলিং সিস্টেমে রিস্টোর করার প্রসেস ট্রিগার করতে পারেন
launchBillingFlow()-কে কল করে। এটি কীভাবে করবেন তার ব্যাখ্যা পেতে সাবস্ক্রিপশনের মেয়াদ শেষ হওয়ার আগে -
ইন-অ্যাপ দেখুন। যেসব ব্যবহারকারী আসল কেনাকাটার জন্য ব্যবহারকারীর পছন্দ সংক্রান্ত ফ্লো
সম্পূর্ণ করেছেন (যা বাতিল করা হয়েছে কিন্তু
এখনও অ্যাক্টিভ আছে), তাদের ক্ষেত্রে সিস্টেম অটোমেটিক তাদের পছন্দ শনাক্ত করে এবং এইসব কেনাকাটা রিস্টোর করার জন্য
ইউজার ইন্টারফেস দেখায়। তাদের Google Play-এর মাধ্যমে সাবস্ক্রিপশন
আবার কেনার বিষয়টি কনফার্ম করতে বলা হয়, তবে তাদের আর ব্যবহারকারীর পছন্দ সংক্রান্ত ফ্লো
অনুসরণ করতে হয় না। এই ক্ষেত্রে ব্যবহারকারীর জন্য একটি নতুন পার্চেজ টোকেন ইস্যু করা হয়
। আপনার ব্যাকএন্ড একটি SUBSCRIPTION_PURCHASED রিয়েল টাইম
ডেভেলপার বিজ্ঞপ্তি পায় এবং আপগ্রেড বা ডাউনগ্রেডের ক্ষেত্রে যেমন হয়, তেমনই বাতিল করা সাবস্ক্রিপশনের জন্য পুরনো পারচেজ
টোকেন সহ নতুন পারচেজের linkedPurchaseToken ভ্যালু
স্ট্যাটাস সেট করা হয়।
আবার সাবস্ক্রাইব করা
সাবস্ক্রিপশনের মেয়াদ সম্পূর্ণ শেষ হয়ে গেলে, তা বাতিল করার কারণে হোক বা পেমেন্ট বাতিল হয়ে যাওয়ার কারণে হোক (অ্যাকাউন্ট হোল্ডের মেয়াদ শেষ হয়ে যাওয়া), ব্যবহারকারীকে এনটাইটেলমেন্ট আবার চালু করতে হলে আবার সাবস্ক্রাইব করতে হবে।
এছাড়াও, সাধারণ সাইন-আপের মতো একই প্রসেস অনুসরণ করে অ্যাপের মাধ্যমে আবার সাবস্ক্রাইব করার সুবিধা চালু করা যেতে পারে।
ব্যবহারকারীকে কোন বিলিং সিস্টেম ব্যবহার করতে চান তা বেছে নিতে
পারতে হবে। launchBillingFlow()-কে এই ক্ষেত্রে কল করা হতে পারে, যেমনটি
ব্যবহারকারীর পছন্দের বিলিং ফ্লো লঞ্চ করুন-এ বর্ণনা করা হয়েছে।
বিকল্প বিলিং পরীক্ষা করা
আপনার বিকল্প বিলিং ইন্টিগ্রেশন পরীক্ষা করার জন্য লাইসেন্স টেস্টার ব্যবহার করা উচিত। লাইসেন্স টেস্টার অ্যাকাউন্ট থেকে শুরু করা ট্রানজ্যাকশনের জন্য আপনাকে ইনভয়েস করা হবে না। লাইসেন্স টেস্টার কনফিগার করা সম্পর্কে আরও তথ্য পেতে, অ্যাপ্লিকেশন লাইসেন্সিং সহ ইন-অ্যাপ বিলিং টেস্ট করা দেখুন।
পরবর্তী ধাপ
ইন-অ্যাপ ইন্টিগ্রেশন সম্পূর্ণ হয়ে গেলে, আপনি ব্যাকএন্ড ইন্টিগ্রেট করার জন্য প্রস্তুত।