এই ডকুমেন্টটিতে বর্ণনা করা হয়েছে কীভাবে যোগ্য অ্যাপগুলিতে বাহ্যিক কন্টেন্টের লিঙ্ক দেওয়ার জন্য প্লে বিলিং লাইব্রেরি এপিআই (Play Billing Library APIs) ইন্টিগ্রেট করতে হয়। এর মধ্যে আপনার প্লে অ্যাপের বাইরে মার্কিন যুক্তরাষ্ট্রের ব্যবহারকারীদের লিঙ্ক করার ক্ষমতাও অন্তর্ভুক্ত, যার মাধ্যমে তাদের ইন-অ্যাপ ডিজিটাল কন্টেন্ট এবং অ্যাপ ডাউনলোডের অফার দেওয়া যায়। এই প্রোগ্রামটি সম্পর্কে আরও জানতে, প্রোগ্রামের প্রয়োজনীয়তাগুলি দেখুন।
প্লে বিলিং লাইব্রেরি সেটআপ
আপনার অ্যান্ড্রয়েড অ্যাপে প্লে বিলিং লাইব্রেরি ডিপেন্ডেন্সি যোগ করুন । এক্সটার্নাল লিঙ্ক এপিআই ব্যবহার করার জন্য আপনাকে ভার্সন ৮.২.১ বা তার উচ্চতর সংস্করণ ব্যবহার করতে হবে। যদি আপনাকে পূর্ববর্তী কোনো সংস্করণ থেকে মাইগ্রেট করতে হয়, তবে এক্সটার্নাল কন্টেন্ট লিঙ্ক যোগ করার আগে মাইগ্রেশন গাইডের নির্দেশাবলী অনুসরণ করুন।
বিলিং ক্লায়েন্ট শুরু করুন
বিলিং ক্লায়েন্ট ইনিশিয়ালাইজ করতে, "একটি BillingClient ইনিশিয়ালাইজ করুন" অংশে বর্ণিত একই ধাপগুলো অনুসরণ করুন, তবে নিম্নলিখিত পরিবর্তনগুলো করতে হবে:
-
PurchasesUpdatedListenerসক্রিয় করবেন না - বাহ্যিক কন্টেন্ট লিঙ্কের জন্য এই লিসেনারটির প্রয়োজন নেই। - আপনার অ্যাপটি যে এক্সটার্নাল কন্টেন্ট লিঙ্ক ব্যবহার করে, তা বোঝাতে
BillingProgram.EXTERNAL_CONTENT_LINKসহenableBillingProgram()কল করুন।
নিম্নলিখিত উদাহরণটি এই পরিবর্তনগুলি সহ একটি BillingClient ইনিশিয়ালাইজ করা দেখাচ্ছে:
কোটলিন
val billingClient = BillingClient.newBuilder(context)
.enableBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.build()
জাভা
private BillingClient billingClient = BillingClient.newBuilder(context)
.enableBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.build();
Google Play-এর সাথে সংযোগ করুন
BillingClient চালু করার পর, "Connect to Google Play" অংশে বর্ণিত পদ্ধতি অনুযায়ী Google Play-এর সাথে সংযোগ করুন।
ব্যবহারকারীর যোগ্যতা যাচাই করুন
Google Play-তে সংযোগ করার পরে, আপনাকে অবশ্যই isBillingProgramAvailableAsync() মেথডটি কল করে যাচাই করতে হবে যে ব্যবহারকারী এক্সটার্নাল কন্টেন্ট লিঙ্কস প্রোগ্রামের জন্য যোগ্য কিনা। ব্যবহারকারী এক্সটার্নাল কন্টেন্ট লিঙ্কস প্রোগ্রামের জন্য যোগ্য হলে এই মেথডটি BillingResponseCode.OK রিটার্ন করে। নিচের নমুনাটিতে দেখানো হয়েছে কীভাবে এক্সটার্নাল কন্টেন্ট লিঙ্কসের জন্য ব্যবহারকারীর যোগ্যতা যাচাই করতে হয়:
কোটলিন
billingClient.isBillingProgramAvailableAsync(
BillingProgram.EXTERNAL_CONTENT_LINK,
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 content links unavailable, etc.
return
}
// External content links are available. Prepare an external
// transaction token.
}
})
জাভা
billingClient.isBillingProgramAvailableAsync(
BillingProgram.EXTERNAL_CONTENT_LINK,
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 content links unavailable, etc.
return;
}
// External content links are available. Prepare an external
// transaction token.
}
});
আপনার অ্যাপ অন্যান্য রেসপন্স কোডগুলিতে কীভাবে সাড়া দেবে, সে সম্পর্কে বিস্তারিত জানতে রেসপন্স হ্যান্ডলিং বিভাগটি দেখুন। আপনি যদি কোটলিন এক্সটেনশন ব্যবহার করেন , তাহলে কোটলিন কো-রুটিন ব্যবহার করতে পারেন, ফলে আপনাকে আলাদা লিসেনার সংজ্ঞায়িত করতে হবে না।
একটি বাহ্যিক লেনদেন টোকেন প্রস্তুত করুন
এরপর, আপনাকে প্লে বিলিং লাইব্রেরি থেকে একটি এক্সটার্নাল ট্রানজ্যাকশন টোকেন তৈরি করতে হবে। ব্যবহারকারী যখনই এক্সটার্নাল লিঙ্কস এপিআই-এর মাধ্যমে কোনো বাহ্যিক ওয়েবসাইটে যান, তখন প্রতিবার একটি নতুন এক্সটার্নাল ট্রানজ্যাকশন টোকেন তৈরি করতে হবে। এটি createBillingProgramReportingDetailsAsync এপিআই কল করার মাধ্যমে করা যেতে পারে। ব্যবহারকারীকে লিঙ্ক আউট করার ঠিক আগে টোকেনটি তৈরি করা উচিত।
দ্রষ্টব্য : এক্সটার্নাল ট্রানজ্যাকশন টোকেন কখনোই ক্যাশ করা উচিত নয় এবং প্রতিবার ব্যবহারকারীকে লিঙ্ক আউট করার সময় একটি নতুন টোকেন তৈরি করতে হবে।
কোটলিন
val params =
BillingProgramReportingDetailsParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.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 when launchExternalLink is called.
}
})
জাভা
BillingProgramReportingDetailsParams params =
BillingProgramReportingDetailsParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.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 when launchExternalLink is called.
}
});
আপনি যদি কোটলিন এক্সটেনশন ব্যবহার করেন , তাহলে কোটলিন কো-রুটিন ব্যবহার করতে পারেন, ফলে আপনাকে আলাদা লিসেনার সংজ্ঞায়িত করতে হবে না।
বাহ্যিক লিঙ্কটি চালু করুন
এক্সটার্নাল ট্রানজ্যাকশন টোকেন প্রস্তুত হয়ে গেলে, ব্যবহারকারী launchExternalLink মেথডটি কল করার মাধ্যমে অ্যাপের বাইরে কোনো ডিজিটাল কন্টেন্ট অফার বা অ্যাপ ডাউনলোডের সাথে যুক্ত হতে পারেন। আপনি যখন এই API-টি কল করবেন, তখন ব্যবহারকারীর সেটিংসের উপর নির্ভর করে গুগল প্লে তাকে অতিরিক্ত তথ্যমূলক ডায়ালগ দেখাতে পারে।
launchExternalLink মেথডটি কল করার সময়, LaunchExternalLinkParams এর মাধ্যমে এক্সটার্নাল লিঙ্কের বিবরণ অবশ্যই প্রদান করতে হবে। এই ক্লাসে নিম্নলিখিত প্যারামিটারগুলো রয়েছে:
- লিঙ্ক ইউআরআই - বাহ্যিক ওয়েবসাইটের লিঙ্ক, যেখান থেকে ডিজিটাল কন্টেন্ট বা অ্যাপ ডাউনলোডের সুযোগ দেওয়া হয়। অ্যাপ ডাউনলোডের ক্ষেত্রে, এই লিঙ্কটি প্লে ডেভেলপার কনসোলে অবশ্যই নিবন্ধিত এবং অনুমোদিত হতে হবে।
- লিঙ্কের ধরণ - ব্যবহারকারীকে যে ধরনের বিষয়বস্তু প্রদান করা হচ্ছে।
- লঞ্চ মোড - লিঙ্কটি কীভাবে চালু হবে তা নির্দিষ্ট করে। অ্যাপ ডাউনলোডের জন্য, আপনাকে এটি অবশ্যই
LAUNCH_IN_EXTERNAL_BROWSER_OR_APPএ সেট করতে হবে। বিলিং প্রোগ্রাম - এটিকে
BillingProgram.EXTERNAL_CONTENT_LINKএ সেট করুন।
কোটলিন
val params =
LaunchExternalLinkParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.setLinkUri(Uri.parse("https://www.myapprovedsite.com"))
.setLinkType(LaunchExternalLinkParams.LinkType.LINK_TO_APP_DOWNLOAD)
.setLaunchMode(
LaunchExternalLinkParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
.build()
val listener : LaunchExternalLinkResponseListener =
object : LaunchExternalLinkResponseListener {
override fun onLaunchExternalLinkResponse(
billingResult: BillingResult) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return
}
// If Launch Mode was set to LAUNCH_IN_EXTERNAL_BROWSER_OR_APP, the
// user was directed outside of the app by Play. This does not give
// any information on the user's actions during the link out, such
// as if a transaction was completed.
// If Launch Mode was set to CALLER_WILL_LAUNCH_LINK, then your app
// may proceed to direct the user to the external website.
}
}
billingClient.launchExternalLink(activity, params, listener)
জাভা
LaunchExternalLinkParams params =
LaunchExternalLinkParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.setLinkUri(Uri.parse("https://www.myapprovedsite.com"))
.setLinkType(LaunchExternalLinkParams.LinkType.LINK_TO_APP_DOWNLOAD)
.setLaunchMode(
LaunchExternalLinkParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
.build()
LaunchExternalLinkResponseListener listener =
new LaunchExternalLinkResponseListener() {
@Override
public void onLaunchExternalLinkResponse(BillingResult billingResult) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return;
}
// If Launch Mode was set to LAUNCH_IN_EXTERNAL_BROWSER_OR_APP, the
// user was directed outside of the app by Play. This does not give
// any information on the user's actions during the link out, such
// as if a transaction was completed.
// If Launch Mode was set to CALLER_WILL_LAUNCH_LINK, then your app
// may proceed to direct the user to the external website.
}
}
billingClient.launchExternalLink(activity, params, listener);
প্রতিক্রিয়া পরিচালনা
যখন কোনো ত্রুটি ঘটে, তখন isBillingProgramAvailableAsync() , createBillingProgramReportingDetailsAsync() , এবং onLaunchExternalLinkResponse() মেথডগুলো BillingResponseCode.OK ছাড়া অন্য কোনো BillingResponseCode প্রদান করতে পারে। এই রেসপন্স কোডগুলো নিম্নোক্তভাবে হ্যান্ডেল করার কথা বিবেচনা করুন:
-
ERROR: এটি একটি অভ্যন্তরীণ ত্রুটি। লেনদেনটি সম্পন্ন করবেন না বা বাহ্যিক ওয়েবসাইটটি খুলবেন না। এপিআই (API) পুনরায় কল করে অথবা পরবর্তীবার ব্যবহারকারীকে অ্যাপের বাইরে পাঠানোর চেষ্টার সময়launchExternalLink()কল করে আবার চেষ্টা করুন। -
FEATURE_NOT_SUPPORTED: বর্তমান ডিভাইসের প্লে স্টোর এক্সটার্নাল কন্টেন্ট লিঙ্ক এপিআই সমর্থন করে না। লেনদেনটি সম্পন্ন করবেন না বা এক্সটার্নাল ওয়েবসাইটটি খুলবেন না। -
USER_CANCELED: বাহ্যিক ওয়েবসাইটটি খোলার প্রক্রিয়া চালিয়ে যাবেন না। পরবর্তী বার যখন ব্যবহারকারীকে অ্যাপের বাইরে নিয়ে যাওয়ার চেষ্টা করবেন, তখন আবারlaunchExternalLink()কল করুন। -
BILLING_UNAVAILABLE: লেনদেনটি বাহ্যিক কন্টেন্ট লিঙ্কের জন্য যোগ্য নয় এবং তাই এই প্রোগ্রামের অধীনে অগ্রসর হবেন না। এর কারণ হলো, হয় ব্যবহারকারী এই প্রোগ্রামের জন্য যোগ্য কোনো দেশে নেই অথবা আপনার অ্যাকাউন্টটি প্রোগ্রামে সফলভাবে নথিভুক্ত করা হয়নি। যদি দ্বিতীয় কারণটি সত্যি হয়, তাহলে প্লে ডেভেলপার কনসোলে আপনার নথিভুক্তির অবস্থা পরীক্ষা করুন। -
DEVELOPER_ERROR: অনুরোধে একটি ত্রুটি রয়েছে। এগিয়ে যাওয়ার আগে ত্রুটিটি শনাক্ত ও সংশোধন করতে ডিবাগ বার্তাটি ব্যবহার করুন। -
NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: এগুলো ক্ষণস্থায়ী ত্রুটি, যা একটি উপযুক্ত পুনঃপ্রচেষ্টা নীতির মাধ্যমে সমাধান করা উচিত।SERVICE_DISCONNECTEDএর ক্ষেত্রে, পুনরায় চেষ্টা করার আগে Google Play-এর সাথে সংযোগ পুনঃস্থাপন করুন।
বাহ্যিক বিষয়বস্তুর লিঙ্কগুলি পরীক্ষা করুন
আপনার এক্সটার্নাল অফার ইন্টিগ্রেশন পরীক্ষা করার জন্য লাইসেন্স টেস্টার ব্যবহার করা উচিত। লাইসেন্স টেস্টার অ্যাকাউন্ট দ্বারা শুরু করা লেনদেনের জন্য আপনাকে কোনো ইনভয়েস পাঠানো হবে না। লাইসেন্স টেস্টার কনফিগার করার বিষয়ে আরও তথ্যের জন্য ‘অ্যাপ্লিকেশন লাইসেন্সিংয়ের মাধ্যমে ইন-অ্যাপ বিলিং পরীক্ষা করুন’ দেখুন।
পরবর্তী পদক্ষেপ
ইন-অ্যাপ ইন্টিগ্রেশন শেষ করার পর, আপনি আপনার ব্যাকএন্ড ইন্টিগ্রেট করার জন্য প্রস্তুত।