এই ডকুমেন্টে যোগ্য অ্যাপগুলিতে বহিরাগত পেমেন্ট অফার করার জন্য Play Billing Library API গুলিকে কীভাবে একীভূত করা যায় তা বর্ণনা করা হয়েছে। এই প্রোগ্রাম সম্পর্কে আরও জানতে, প্রোগ্রামের প্রয়োজনীয়তাগুলি দেখুন।
প্লে বিলিং লাইব্রেরি সেটআপ
আপনার অ্যান্ড্রয়েড অ্যাপে Play Billing Library নির্ভরতা যোগ করুন । বহিরাগত পেমেন্ট API ব্যবহার করতে আপনাকে 8.3 বা তার বেশি সংস্করণ ব্যবহার করতে হবে। যদি আপনার পূর্ববর্তী সংস্করণ থেকে মাইগ্রেট করার প্রয়োজন হয়, তাহলে আপনার ইন্টিগ্রেশন শুরু করার আগে আপগ্রেড করার জন্য মাইগ্রেশন গাইডের নির্দেশাবলী অনুসরণ করুন।
বিলিং ক্লায়েন্ট শুরু করুন
ইন্টিগ্রেশন প্রক্রিয়ার প্রথম ধাপগুলি Google Play বিলিং ইন্টিগ্রেশন গাইডে বর্ণিত ধাপগুলির মতোই, আপনার BillingClient শুরু করার সময় কিছু পরিবর্তন করা হয়েছে:
- আপনি যে বহিরাগত অর্থপ্রদান অফার করতে চান তা বোঝাতে আপনাকে একটি নতুন
enableBillingProgram(EnableBillingProgramParams)পদ্ধতি কল করতে হবে। - ব্যবহারকারী আপনার ওয়েবসাইট বা পেমেন্ট অ্যাপে অর্থ প্রদান করতে চাইলে, সেইসব ক্ষেত্রে পরিচালনা করার জন্য আপনাকে একটি
DeveloperProvidedBillingListenerনিবন্ধন করতে হবে।
নিম্নলিখিত উদাহরণটি এই পরিবর্তনগুলি ব্যবহার করে একটি BillingClient শুরু করার পদ্ধতি প্রদর্শন করে:
কোটলিন
val purchasesUpdatedListener =
PurchasesUpdatedListener { billingResult, purchases ->
// Handle new Google Play purchase.
}
val developerProvidedBillingListener =
DeveloperProvidedBillingListener { details ->
// Handle user selection for developer provided billing option.
}
val billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.enableBillingProgram(
EnableBillingProgramParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
.setDeveloperProvidedBillingListener(developerProvidedBillingListener)
.build())
.build()
জাভা
private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
@Override
public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
// Handle new Google Play purchase.
}
};
private DeveloperProvidedBillingListener developerProvidedBillingListener =
new DeveloperProvidedBillingListener() {
@Override
public void onUserSelectedDeveloperBilling(
DeveloperProvidedBillingDetails details) {
// Handle user selection for developer provided billing option.
}
};
private BillingClient billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.enableBillingProgram(
EnableBillingProgramParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
.setDeveloperProvidedBillingListener(developerProvidedBillingListener)
.build())
.build();
গুগল প্লেতে সংযোগ করুন
BillingClient আরম্ভ করার পরে, Connect to Google Play তে বর্ণিত পদ্ধতিতে Google Play তে সংযোগ করুন।
ব্যবহারকারীর যোগ্যতা পরীক্ষা করুন
গুগল প্লেতে সংযোগ করার পর, আপনি isBillingProgramAvailableAsync() পদ্ধতিতে কল করে ব্যবহারকারী বাহ্যিক পেমেন্ট প্রোগ্রামের জন্য যোগ্য কিনা তা পরীক্ষা করতে পারেন। ব্যবহারকারী যোগ্য হলে এই পদ্ধতিটি BillingResponseCode.OK প্রদান করে। নিম্নলিখিত নমুনাটি কীভাবে যোগ্যতা পরীক্ষা করবেন তা প্রদর্শন করে:
কোটলিন
billingClient.isBillingProgramAvailableAsync(
BillingProgram.EXTERNAL_PAYMENTS,
object : BillingProgramAvailabilityListener {
override fun onBillingProgramAvailabilityResponse(
billingProgram: Int, billingResult: BillingResult) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling external payments unavailable, etc.
return
}
// External payments are available. Can proceed with generating an
// external transaction token.
})
জাভা
billingClient.isBillingProgramAvailableAsync(
BillingProgram.EXTERNAL_PAYMENTS,
new BillingProgramAvailabilityListener() {
@Override
public void onBillingProgramAvailabilityResponse(
int billingProgram, BillingResult billingResult) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling external payments unavailable, etc.
return;
}
// External payments are available. Can proceed with generating an external transaction token.
}
});
আপনার অ্যাপটি অন্যান্য রেসপন্স কোডগুলিতে কীভাবে সাড়া দেবে তার বিস্তারিত জানার জন্য রেসপন্স হ্যান্ডলিং বিভাগটি দেখুন। আপনি যদি কোটলিন এক্সটেনশন ব্যবহার করেন , তাহলে আপনি কোটলিন কর্উটিন ব্যবহার করতে পারেন যাতে আপনাকে আলাদা শ্রোতা নির্ধারণ করতে না হয়।
উপলব্ধ পণ্যগুলি প্রদর্শন করুন
আপনি Google Play বিলিং সিস্টেম ইন্টিগ্রেশনের মতোই ব্যবহারকারীর কাছে উপলব্ধ পণ্যগুলি প্রদর্শন করতে পারেন। যখন আপনার ব্যবহারকারী ক্রয়ের জন্য উপলব্ধ পণ্যগুলি দেখেন এবং কেনার জন্য একটি নির্বাচন করেন, তখন "বাহ্যিক অর্থপ্রদান প্রবাহ চালু করা" বিভাগে বর্ণিত বাহ্যিক অর্থপ্রদান প্রবাহ চালু করুন।
একটি বহিরাগত লেনদেন টোকেন প্রস্তুত করুন
Google Play-তে কোনও বহিরাগত লেনদেনের প্রতিবেদন করার জন্য, আপনার কাছে Play Billing Library থেকে তৈরি একটি বহিরাগত লেনদেন টোকেন থাকতে হবে। ব্যবহারকারী যখনই বহিরাগত পেমেন্ট API-এর মাধ্যমে কোনও বহিরাগত ওয়েবসাইট বা অ্যাপ পরিদর্শন করবেন তখনই একটি নতুন বহিরাগত লেনদেন টোকেন তৈরি করতে হবে। createBillingProgramReportingDetailsAsync API-এ কল করে এটি করা যেতে পারে। launchBillingFlow কল করার ঠিক আগে টোকেনটি তৈরি করা উচিত।
কোটলিন
val params =
BillingProgramReportingDetailsParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
.build()
billingClient.createBillingProgramReportingDetailsAsync(
params,
object : BillingProgramReportingDetailsListener {
override fun onCreateBillingProgramReportingDetailsResponse(
billingResult: BillingResult,
billingProgramReportingDetails: BillingProgramReportingDetails?) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return
}
val externalTransactionToken =
billingProgramReportingDetails?.externalTransactionToken
// Persist the external transaction token locally. Pass it to
// the external website using DeveloperBillingOptionParams when
// launchBillingFlow is called.
}
})
জাভা
BillingProgramReportingDetailsParams params =
BillingProgramReportingDetailsParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
.build();
billingClient.createBillingProgramReportingDetailsAsync(
params,
new BillingProgramReportingDetailsListener() {
@Override
public void onCreateBillingProgramReportingDetailsResponse(
BillingResult billingResult,
@Nullable BillingProgramReportingDetails
billingProgramReportingDetails) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return;
}
String transactionToken =
billingProgramReportingDetails.getExternalTransactionToken();
// Persist the external transaction token locally. Pass it to
// the external website using DeveloperBillingOptionParams when
// launchBillingFlow is called.
}
});
যদি আপনি কোটলিন এক্সটেনশন ব্যবহার করেন , তাহলে আপনি কোটলিন কোরোটিন ব্যবহার করতে পারেন যাতে আপনাকে আলাদা শ্রোতা নির্ধারণ করতে না হয়।
বহিরাগত অর্থপ্রদান প্রবাহ চালু করা
launchBillingFlow() কল করে বাহ্যিক পেমেন্ট ফ্লো চালু করুন, ঠিক যেমন Google Play বিলিং সিস্টেম ইন্টিগ্রেশনের মাধ্যমে ক্রয় ফ্লো চালু করার মতো , কিন্তু DeveloperBillingOptionParams নামে একটি অতিরিক্ত প্যারামিটার দিয়ে যা নির্দেশ করে যে আপনার অ্যাপ এই ক্রয়ের জন্য বাহ্যিক পেমেন্ট ফ্লো সক্ষম করতে চায়।
DeveloperBillingOptionParams নিম্নলিখিতগুলি থাকতে হবে:
-
billingProgramEXTERNAL_PAYMENTSবিলিং প্রোগ্রামে সেট করা হয়েছে -
linkURIলিঙ্ক গন্তব্যে সেট করা হয়েছে - যদি Google Play লিঙ্কটি চালু করে তাহলে
launchModeLAUNCH_IN_EXTERNAL_BROWSER_OR_APPএ সেট করা আছে অথবা যদি আপনার অ্যাপ লিঙ্কটি চালু করে তাহলেCALLER_WILL_LAUNCH_LINKসেট করা আছে।
যখন আপনার অ্যাপটি DeveloperBillingOptionParams প্রদান করে launchBillingFlow() কল করে, তখন Google Play বিলিং সিস্টেম নিম্নলিখিত পরীক্ষাটি সম্পাদন করে:
- সিস্টেমটি পরীক্ষা করে যে ব্যবহারকারীর গুগল প্লে দেশটি এমন একটি দেশ কিনা যা বহিরাগত অর্থপ্রদান সমর্থন করে (অর্থাৎ একটি সমর্থিত দেশ)। যদি ব্যবহারকারীর গুগল প্লে দেশটি সমর্থিত হয়, তাহলে গুগল প্লে বিলিংক্লায়েন্টের কনফিগারেশনের উপর ভিত্তি করে বহিরাগত অর্থপ্রদান সক্ষম কিনা এবং
DeveloperBillingOptionParamsসরবরাহ করা হয়েছে কিনা তা পরীক্ষা করে।- যদি বহিরাগত অর্থপ্রদান সক্ষম করা থাকে, তাহলে ক্রয় প্রবাহ ব্যবহারকারীর পছন্দের UX দেখায়।
- যদি বহিরাগত অর্থপ্রদান সক্ষম না করা থাকে, তাহলে ক্রয় প্রবাহ ব্যবহারকারীর পছন্দ ছাড়াই স্ট্যান্ডার্ড Google Play বিলিং সিস্টেম UX দেখায়।
- যদি ব্যবহারকারীর Google Play দেশটি সমর্থিত দেশ না হয়, তাহলে ক্রয় প্রবাহ ব্যবহারকারীর পছন্দ ছাড়াই স্ট্যান্ডার্ড Google Play বিলিং সিস্টেম UX দেখায়।
ব্যবহারকারীর খেলার দেশটি একটি সমর্থিত দেশ | ব্যবহারকারীর খেলার দেশটি সমর্থিত দেশ নয় | |
বহিরাগত পেমেন্ট সক্ষম করা হয়েছে ( বিলিংক্লায়েন্ট সেটআপ এবং বিলিংফ্লো চালু করুন ) | ব্যবহারকারী ব্যবহারকারীর পছন্দের UX দেখেন | ব্যবহারকারী স্ট্যান্ডার্ড গুগল প্লে বিলিং সিস্টেম ইউএক্স দেখেন |
বহিরাগত পেমেন্ট সক্ষম করা হয়নি (হয় বিলিংক্লায়েন্ট সেটআপের সময় সক্ষম করা হয়নি অথবা লঞ্চবিলিংফ্লোতে ডেভেলপারবিলিংঅপশনপ্যারাম সরবরাহ করা হয়নি) | ব্যবহারকারী স্ট্যান্ডার্ড গুগল প্লে বিলিং সিস্টেম ইউএক্স দেখেন | ব্যবহারকারী স্ট্যান্ডার্ড গুগল প্লে বিলিং সিস্টেম ইউএক্স দেখেন |
নিম্নলিখিত স্নিপেটটি DeveloperBillingOptionParams কীভাবে তৈরি করতে হয় তা দেখায়:
কোটলিন
val developerBillingOptionParams =
DeveloperBillingOptionParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
.setLinkUri("https://www.example.com/external/purchase")
.setLaunchMode(
DeveloperBillingOptionParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
.build()
জাভা
DeveloperBillingOptionParams developerBillingOptionParams =
DeveloperBillingOptionParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
.setLinkUri("https://www.example.com/external/purchase")
.setLaunchMode(
DeveloperBillingOptionParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
.build();
ব্যবহারকারী নির্বাচন পরিচালনা করুন
আপনি বাকি ক্রয় প্রবাহ কীভাবে পরিচালনা করবেন তা ব্যবহারকারী Google Play এর বিলিং সিস্টেম নির্বাচন করেছেন নাকি আপনার ওয়েবসাইটে অর্থ প্রদান করবেন তার উপর নির্ভর করে।
যখন ব্যবহারকারী আপনার ওয়েবসাইটে বা পেমেন্ট অ্যাপে পেমেন্ট করার সিদ্ধান্ত নেন
যদি ব্যবহারকারী আপনার ওয়েবসাইটে অর্থ প্রদান করতে চান, তাহলে Google Play DeveloperProvidedBillingListener কল করে অ্যাপটিকে অবহিত করে যে ব্যবহারকারী আপনার ওয়েবসাইটে বা কোনও পেমেন্ট অ্যাপে অর্থ প্রদান করতে বেছে নিয়েছেন। বিশেষ করে, onUserSelectedDeveloperBilling() পদ্ধতিটি বলা হয়।
যদি আপনার অ্যাপটি launchMode LAUNCH_IN_EXTERNAL_BROWSER_OR_APP এ সেট করে, তাহলে Google Play লিঙ্কটি চালু করবে। যদি launchMode CALLER_WILL_LAUNCH_LINK এ সেট করা থাকে, তাহলে আপনার অ্যাপটি লিঙ্কটি চালু করার জন্য দায়ী। ব্যবহারকারীদের একটি পেমেন্ট অ্যাপের সাথে লিঙ্ক করার সময়, ব্যবহারকারীর ডিভাইসে পেমেন্ট অ্যাপটি ইতিমধ্যেই ইনস্টল করা আছে কিনা তা পরীক্ষা করার জন্য আপনার দায়িত্ব।
ব্যাকএন্ড ইন্টিগ্রেশন গাইডে বর্ণিত এই পছন্দের ফলে যেকোনো লেনদেনের রিপোর্ট করতে এই টোকেনটি ব্যবহার করুন।
যখন ব্যবহারকারী Google Play এর বিলিং সিস্টেম নির্বাচন করেন
ব্যবহারকারী যদি গুগল প্লে-এর বিলিং সিস্টেম বেছে নেন, তাহলে তারা গুগল প্লে-এর মাধ্যমে কেনাকাটা চালিয়ে যাবেন।
- গুগল প্লে-এর বিলিং সিস্টেমের মাধ্যমে নতুন অ্যাপ-মধ্যস্থ কেনাকাটা কীভাবে পরিচালনা করবেন সে সম্পর্কে আরও তথ্যের জন্য লাইব্রেরি ইন্টিগ্রেশন গাইডে কেনাকাটা প্রক্রিয়াকরণ দেখুন।
- সাবস্ক্রিপশন ক্রয়ের জন্য অতিরিক্ত নির্দেশিকা পেতে সাবস্ক্রিপশন ব্যবস্থাপনা নির্দেশিকাতে নতুন সাবস্ক্রিপশন দেখুন।
সাবস্ক্রিপশনের পরিবর্তনগুলি পরিচালনা করুন
বহিরাগত অর্থপ্রদান ব্যবহারকারী ডেভেলপারদের জন্য, ব্যবহারকারীর পছন্দের উপর নির্ভর করে Google Play এর বিলিং সিস্টেমের মাধ্যমে ক্রয় প্রক্রিয়াকরণ করতে হবে অথবা একটি externalTransactionId দিয়ে রিপোর্ট করতে হবে। ডেভেলপারের ওয়েবসাইটের মাধ্যমে প্রক্রিয়াকৃত বিদ্যমান সাবস্ক্রিপশনগুলিতে পরিবর্তনগুলি মেয়াদ শেষ না হওয়া পর্যন্ত একই বিলিং সিস্টেমের মাধ্যমে করা যেতে পারে।
এই বিভাগে কিছু সাধারণ সাবস্ক্রিপশন পরিবর্তনের পরিস্থিতি কীভাবে পরিচালনা করতে হয় তা বর্ণনা করা হয়েছে।
আপগ্রেড এবং ডাউনগ্রেড প্রবাহ
সাবস্ক্রিপশন প্ল্যানের পরিবর্তন, যার মধ্যে আপগ্রেড এবং ডাউনগ্রেড ফ্লো অন্তর্ভুক্ত, তা ভিন্নভাবে পরিচালনা করা উচিত, সাবস্ক্রিপশনটি মূলত গুগল প্লে-এর বিলিং সিস্টেমের মাধ্যমে কেনা হয়েছিল নাকি ডেভেলপারের ওয়েবসাইটের মাধ্যমে কেনা হয়েছিল তার উপর নির্ভর করে।
যেসব অ্যাড-অন বিদ্যমান সাবস্ক্রিপশনের উপর নির্ভর করে, একই পেমেন্ট পদ্ধতি শেয়ার করে এবং পুনরাবৃত্ত চার্জ সারিবদ্ধ করে, সেগুলো আপগ্রেড হিসেবে পরিচালিত হয়। অন্যান্য অ্যাড-অনের জন্য, ব্যবহারকারীরা কোন বিলিং সিস্টেম ব্যবহার করতে চান তা বেছে নিতে সক্ষম হবেন। launchBillingFlow() ব্যবহার করে একটি নতুন ক্রয়ের অভিজ্ঞতা শুরু করুন, যেমনটি বহিরাগত পেমেন্ট প্রবাহ চালু করার ক্ষেত্রে বর্ণিত হয়েছে।
ডেভেলপারের ওয়েবসাইট বা পেমেন্ট অ্যাপের মাধ্যমে কেনা সাবস্ক্রিপশন
ব্যবহারকারীর পছন্দের পরে ডেভেলপারের ওয়েবসাইট বা পেমেন্ট অ্যাপের মাধ্যমে মূলত কেনা সাবস্ক্রিপশনের জন্য, আপগ্রেড বা ডাউনগ্রেডের অনুরোধকারী ব্যবহারকারীদের আবার ব্যবহারকারীর পছন্দের অভিজ্ঞতা না নিয়ে ডেভেলপারের ওয়েবসাইট বা পেমেন্ট অ্যাপের মাধ্যমে এগিয়ে যেতে হবে।
এটি করার জন্য, ব্যবহারকারী যখন আপগ্রেড বা ডাউনগ্রেডের অনুরোধ করেন তখন launchBillingFlow() কল করুন। SubscriptionUpdateParams অবজেক্টের অধীনে অন্যান্য প্যারামিটার নির্দিষ্ট করার পরিবর্তে, setOriginalExternalTransactionId() ব্যবহার করুন, যা মূল ক্রয়ের জন্য বহিরাগত লেনদেন আইডি প্রদান করে।
এই কলে DeveloperBillingOptionParams অবশ্যই প্রদান করতে হবে। এটি ব্যবহারকারীর পছন্দের স্ক্রিনটি প্রদর্শন করবে না, কারণ মূল ক্রয়ের জন্য ব্যবহারকারীর পছন্দ আপগ্রেড এবং ডাউনগ্রেডের জন্য সংরক্ষিত থাকবে। এখানে বর্ণিত এই লেনদেনের জন্য আপনাকে একটি নতুন বহিরাগত লেনদেন টোকেন তৈরি করতে হবে।
যখন ডেভেলপারের ওয়েবসাইট বা পেমেন্ট অ্যাপ ব্যবহার করে আপগ্রেড বা ডাউনগ্রেড সম্পন্ন হয়, তখন আপনাকে নতুন সাবস্ক্রিপশন ক্রয়ের জন্য পূর্ববর্তী কলের মাধ্যমে প্রাপ্ত বহিরাগত লেনদেন টোকেন ব্যবহার করে একটি নতুন লেনদেনের প্রতিবেদন করতে হবে।
Google Play এর বিলিং সিস্টেমের মাধ্যমে কেনা সাবস্ক্রিপশন
একইভাবে, ব্যবহারকারীদের পছন্দের পরে যারা Google Play এর বিলিং সিস্টেমের মাধ্যমে তাদের বর্তমান সাবস্ক্রিপশন কিনেছেন তাদের স্ট্যান্ডার্ড Google Play বিলিং ফ্লো এর মধ্য দিয়ে যেতে দেখাতে হবে। launchBillingFlow কলে DeveloperBillingOptionParams সেট করা উচিত নয়।
সাবস্ক্রিপশন বাতিলকরণ এবং পুনরুদ্ধার
ব্যবহারকারীরা যেকোনো সময় তাদের সাবস্ক্রিপশন বাতিল করতে পারবেন। যখন একজন ব্যবহারকারী সাবস্ক্রিপশন বাতিল করেন, তখন প্রদত্ত সময়কাল শেষ না হওয়া পর্যন্ত এনটাইটেলমেন্টের অবসান স্থগিত করা যেতে পারে। উদাহরণস্বরূপ, যদি একজন ব্যবহারকারী মাসের মাঝামাঝি সময়ে একটি মাসিক সাবস্ক্রিপশন বাতিল করেন, তাহলে তাদের অ্যাক্সেস অপসারণ না করা পর্যন্ত বাকি ~2 সপ্তাহের জন্য তারা পরিষেবাটি অ্যাক্সেস করতে পারবেন। এই সময়ের মধ্যে, সাবস্ক্রিপশনটি এখনও প্রযুক্তিগতভাবে সক্রিয় থাকে, তাই ব্যবহারকারী পরিষেবাটি ব্যবহার করতে পারবেন।
এই সক্রিয় সময়ের মধ্যে ব্যবহারকারীরা বাতিলকরণ বাতিল করার সিদ্ধান্ত নেন এমনটা অস্বাভাবিক কিছু নয়। এই নির্দেশিকায়, এটিকে পুনরুদ্ধার বলা হয়। নিম্নলিখিত বিভাগগুলিতে আপনার বহিরাগত পেমেন্ট API ইন্টিগ্রেশনে পুনরুদ্ধারের পরিস্থিতি কীভাবে পরিচালনা করবেন তা বর্ণনা করা হয়েছে।
ডেভেলপারের ওয়েবসাইটের মাধ্যমে কেনা সাবস্ক্রিপশন
যদি আপনার বাতিল করা সাবস্ক্রিপশনের জন্য একটি বহিরাগত লেনদেন আইডি থাকে, তাহলে সাবস্ক্রিপশন পুনরুদ্ধার করার জন্য launchBillingFlow() কল করার প্রয়োজন নেই, তাই এই ধরণের সক্রিয়করণের জন্য এটি ব্যবহার করা উচিত নয়। যদি কোনও ব্যবহারকারী বাতিল করা সাবস্ক্রিপশনের সক্রিয় সময়কালে তাদের সাবস্ক্রিপশন পুনরুদ্ধার করেন, তবে সেই সময়ে কোনও লেনদেন হয় না; বর্তমান চক্রের মেয়াদ শেষ হয়ে গেলে এবং পরবর্তী পুনর্নবীকরণ ঘটলে আপনি কেবল পুনর্নবীকরণের প্রতিবেদন চালিয়ে যেতে পারেন। এর মধ্যে এমন ঘটনাও অন্তর্ভুক্ত যেখানে ব্যবহারকারী পুনরুদ্ধারের অংশ হিসাবে একটি ক্রেডিট বা বিশেষ পুনর্নবীকরণ মূল্য পান (উদাহরণস্বরূপ, ব্যবহারকারীকে তাদের সাবস্ক্রিপশন চালিয়ে যেতে উৎসাহিত করার জন্য একটি প্রচার)।
Google Play এর বিলিং সিস্টেমের মাধ্যমে কেনা সাবস্ক্রিপশন
সাধারণত, ব্যবহারকারীরা Google Play-এর বিলিং সিস্টেমে সাবস্ক্রিপশন পুনরুদ্ধার করতে পারেন। Google Play-এর বিলিং সিস্টেমে মূলত কেনা বাতিল করা সাবস্ক্রিপশনের ক্ষেত্রে, ব্যবহারকারী Google Play-এর পুনঃসাবস্ক্রাইব বৈশিষ্ট্যের মাধ্যমে সাবস্ক্রিপশন সক্রিয় থাকাকালীন বাতিলকরণ পূর্বাবস্থায় ফেরাতে পারেন। সেক্ষেত্রে, আপনি আপনার ব্যাকএন্ডে একটি SUBSCRIPTION_RESTARTED রিয়েল টাইম ডেভেলপার বিজ্ঞপ্তি পাবেন এবং একটি নতুন ক্রয় টোকেন জারি করা হবে না—সদস্যতা চালিয়ে যাওয়ার জন্য মূল টোকেনটি ব্যবহার করা হবে। Google Play-এর বিলিং সিস্টেমে পুনরুদ্ধার কীভাবে পরিচালনা করবেন তা জানতে, সাবস্ক্রিপশন পরিচালনা নির্দেশিকাতে পুনরুদ্ধারগুলি দেখুন।
আপনি launchBillingFlow() এ কল করে অ্যাপ থেকে Google Play এর বিলিং সিস্টেমে পুনরুদ্ধার শুরু করতে পারেন। এটি কীভাবে করবেন তার ব্যাখ্যার জন্য সাবস্ক্রিপশনের মেয়াদ শেষ হওয়ার আগে - ইন-অ্যাপ দেখুন। মূল ক্রয়ের জন্য ব্যবহারকারীর পছন্দ প্রবাহের মধ্য দিয়ে যাওয়া ব্যবহারকারীদের ক্ষেত্রে (যা বাতিল করা হয়েছিল কিন্তু এখনও সক্রিয়), সিস্টেমটি স্বয়ংক্রিয়ভাবে তাদের পছন্দ সনাক্ত করে এবং এই ক্রয়গুলি পুনরুদ্ধার করার জন্য ব্যবহারকারী ইন্টারফেস প্রদর্শন করে। তাদের Google Play এর মাধ্যমে সাবস্ক্রিপশন পুনঃক্রয় নিশ্চিত করতে বলা হয়, তবে তাদের আবার ব্যবহারকারীর পছন্দ প্রবাহের মধ্য দিয়ে যেতে হবে না। এই ক্ষেত্রে ব্যবহারকারীর জন্য একটি নতুন ক্রয় টোকেন জারি করা হয়। আপনার ব্যাকএন্ড একটি SUBSCRIPTION_PURCHASED রিয়েল টাইম ডেভেলপার বিজ্ঞপ্তি পায় এবং নতুন ক্রয়ের স্থিতির জন্য লিঙ্কডPurchaseToken মান আপগ্রেড বা ডাউনগ্রেডের ক্ষেত্রে সেট করা হয়, বাতিল করা সাবস্ক্রিপশনের জন্য পুরানো ক্রয় টোকেন সহ।
পুনঃসদস্যতা
যদি কোনও সাবস্ক্রিপশন সম্পূর্ণরূপে শেষ হয়ে যায়, তা বাতিলকরণের কারণে হোক বা পুনরুদ্ধার ছাড়াই অর্থপ্রদান প্রত্যাখ্যানের কারণে হোক (একটি মেয়াদোত্তীর্ণ অ্যাকাউন্ট হোল্ড), তাহলে ব্যবহারকারীকে এনটাইটেলমেন্ট পুনরায় চালু করতে চাইলে পুনরায় সাবস্ক্রাইব করতে হবে।
অ্যাপের মাধ্যমে একটি স্ট্যান্ডার্ড সাইনআপের মতো প্রক্রিয়াকরণ করে পুনরায় সাবস্ক্রাইব করাও সম্ভব। ব্যবহারকারীরা কোন বিলিং সিস্টেম ব্যবহার করতে চান তা বেছে নিতে সক্ষম হবেন। এই ক্ষেত্রে launchBillingFlow() বলা যেতে পারে, যেমনটি বহিরাগত পেমেন্ট প্রবাহ চালু করার ক্ষেত্রে বর্ণনা করা হয়েছে।
প্রতিক্রিয়া পরিচালনা
যখন কোনও ত্রুটি দেখা দেয়, তখন পদ্ধতিগুলি isBillingProgramAvailableAsync() , createBillingProgramReportingDetailsAsync() , launchBillingFlow() BillingResponseCode.OK ব্যতীত অন্য কোনও BillingResponseCode প্রদান করতে পারে। এই প্রতিক্রিয়া কোডগুলি নিম্নরূপ পরিচালনা করার কথা বিবেচনা করুন:
-
BillingResponseCode.ERROR: এটি একটি অভ্যন্তরীণ ত্রুটি। লেনদেন বা বহিরাগত ওয়েবসাইট খোলার সাথে এগিয়ে যাবেন না। আবার API কল করে পুনরায় চেষ্টা করুন। -
BillingResponseCode.FEATURE_NOT_SUPPORTED: বর্তমান ডিভাইসে প্লে স্টোরে বহিরাগত পেমেন্ট API গুলি সমর্থিত নয়। লেনদেন বা বহিরাগত ওয়েবসাইট খোলার সাথে এগিয়ে যাবেন না। -
BillingResponseCode.DEVELOPER_ERROR: অনুরোধটিতে একটি ত্রুটি রয়েছে। এগিয়ে যাওয়ার আগে ত্রুটিটি সনাক্ত করতে এবং সংশোধন করতে ডিবাগ বার্তাটি ব্যবহার করুন। -
BillingResponseCode.USER_CANCELED: বাইরের ওয়েবসাইট বা অ্যাপ খোলার সাথে সাথে এগোবেন না। পরের বার যখন আপনি ব্যবহারকারীকে অ্যাপের বাইরে নিয়ে যাওয়ার চেষ্টা করবেন তখন ব্যবহারকারীকে তথ্য ডায়ালগটি প্রদর্শন করতে আবারlaunchBillingFlow()এ কল করুন। -
BillingResponseCode.BILLING_UNAVAILABLE: লেনদেনটি বহিরাগত অর্থপ্রদানের জন্য যোগ্য নয় এবং তাই এই প্রোগ্রামের অধীনে ডেভেলপার বিলিং উপলব্ধ হবে না। এর কারণ হতে পারে ব্যবহারকারী এই প্রোগ্রামের জন্য যোগ্য দেশে নেই অথবা আপনার অ্যাকাউন্টটি প্রোগ্রামে সফলভাবে নথিভুক্ত করা হয়নি। যদি এটি পরবর্তী হয়, তাহলে Play Developer Console-এ আপনার নথিভুক্তির স্থিতি পরীক্ষা করুন। -
BillingResponseCode.NETWORK_ERROR,BillingResponseCode.SERVICE_DISCONNECTED,BillingResponseCode.SERVICE_UNAVAILABLE: এগুলি ক্ষণস্থায়ী ত্রুটি যা একটি উপযুক্ত পুনঃচেষ্টা নীতির মাধ্যমে সমাধান করা উচিত।SERVICE_DISCONNECTEDএর ক্ষেত্রে, পুনঃচেষ্টা করার আগে Google Play এর সাথে একটি সংযোগ পুনরায় স্থাপন করুন।
বাহ্যিক পেমেন্ট লিঙ্ক পরীক্ষা করুন
আপনার বহিরাগত পেমেন্ট ইন্টিগ্রেশন পরীক্ষা করার জন্য লাইসেন্স টেস্টার ব্যবহার করা উচিত। লাইসেন্স টেস্টার অ্যাকাউন্ট দ্বারা শুরু করা লেনদেনের জন্য আপনাকে ইনভয়েস করা হবে না। লাইসেন্স টেস্টার কনফিগার করার বিষয়ে আরও তথ্যের জন্য অ্যাপ্লিকেশন লাইসেন্সিং সহ টেস্ট ইন-অ্যাপ বিলিং দেখুন।
পরবর্তী পদক্ষেপ
ইন-অ্যাপ ইন্টিগ্রেশন শেষ করার পরে, আপনি আপনার ব্যাকএন্ড ইন্টিগ্রেট করার জন্য প্রস্তুত।