این سند نحوه ادغام کردن «میاناهای برنامهسازی کاربردی کتابخانه خدمات صورتحساب Play» را برای ارائه پیوندهای محتوای برونسازمانی در برنامههای واجدشرایط شرح میدهد. این شامل امکان پیوند دادن کاربران ساکن ایالات متحده در خارج از برنامه Play شما برای ارائه پیشنهادهای ویژه به کاربران برای محتوای دیجیتال درونبرنامه و بارگیری برنامه میشود. برای کسب اطلاعات بیشتر درباره این برنامه، به الزامات برنامه مراجعه کنید.
راهاندازی «کتابخانه خدمات صورتحساب Play»
وابستگی «کتابخانه خدمات صورتحساب Play» را به برنامه Android خود اضافه کنید. برای استفاده از میاناهای برنامهسازی کاربردی پیوندهای خارجی باید از نسخه ۸.۲.۱ یا بالاتر استفاده کنید. اگر نیاز دارید از نسخه قبلی انتقال دهید، قبلاز افزودن پیوندهای محتوای خارجی، دستورالعملهای موجود در راهنمای انتقال را دنبال کنید.
راهاندازی کارخواه صورتحساب
برای مقداردهی اولیه کردن مشتری صورتحساب، همان مراحل شرحدادهشده در
مقداردهی اولیه کردن BillingClient را با اصلاحات زیر دنبال کنید:
PurchasesUpdatedListenerرا فعال نکنید - این شنونده برای پیوندهای محتوای خارجی لازم نیست.- با
BillingProgram.EXTERNAL_CONTENT_LINKباenableBillingProgram()تماس بگیرید تا نشان دهید که برنامهتان از پیوندهای محتوای خارجی استفاده میکند.
مثال زیر مقداردهی اولیه BillingClient را با این
اصلاحات نشان میدهد:
کاتلین
val billingClient = BillingClient.newBuilder(context) .enableBillingProgram( EnableBillingProgramParams.newBuilder() .setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK) .build() ) .build()
جاوا
private BillingClient billingClient = BillingClient.newBuilder(context)
.enableBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.build();
اتصال به Google Play
پساز مقداردهی اولیه BillingClient، همانطور که در
اتصال به Google Play توضیح داده شده است به Google Play متصل شوید.
بررسی واجدشرایط بودن کاربر
پساز اتصال به Google Play، باید با فراخواندن روش isBillingProgramAvailableAsync() بررسی کنید که آیا کاربر برای برنامه پیوند محتوای خارجی واجدشرایط است یا نه. این روش درصورتی
BillingResponseCode.OK برمیگرداند که کاربر برای برنامه پیوند محتوای برونسازمانی
واجدشرایط باشد. نمونه زیر نحوه بررسی واجدشرایط بودن کاربر برای پیوندهای محتوای خارجی را نشان میدهد:
کاتلین
billingClient.isBillingProgramAvailableAsync( BillingProgram.EXTERNAL_CONTENT_LINK, object : BillingProgramAvailabilityListener { override fun onBillingProgramAvailabilityResponse( billingResult: BillingResult, billingProgramAvailabilityDetails: BillingProgramAvailabilityDetails ) { 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.
}
});
برای جزئیات مربوط به نحوه پاسخ برنامه شما به کدهای پاسخ دیگر، بخش مدیریت پاسخ را ببینید. اگر از افزونههای Kotlin استفاده میکنید، میتوانید از روالهای مشترک Kotlin استفاده کنید تا مجبور نباشید شنونده جداگانهای تعریف کنید.
آماده کردن کد تراکنش خارجی
سپس باید یک کد تراکنش خارجی از «کتابخانه خدمات صورتحساب Play» تولید کنید. هر بار که کاربر ازطریق API پیوندهای خارجی از وبسایت خارجی بازدید میکند، باید
یک کد تراکنش خارجی جدید تولید شود. این کار را میتوان با
فراخوانی کردن میانای برنامهسازی کاربردی 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.
}
});
اگر از افزونههای Kotlin استفاده میکنید، میتوانید از روالهای مشترک Kotlin استفاده کنید تا مجبور نباشید شنونده جداگانهای تعریف کنید.
راهاندازی پیوند خارجی
پساز آماده شدن کد دریافت تراکنش خارجی، کاربر میتواند با فراخوانی روش launchExternalLink به پیشنهاد محتوای دیجیتال یا بارگیری برنامه در خارج از برنامه پیوند داده شود. وقتی این API را فراخوانی میکنید، Google Play ممکن است براساس تنظیمات کاربر،
کادرهای گفتگوی اطلاعات اضافی را به کاربر ارائه کند.
هنگام فراخوانی روش launchExternalLink، جزئیات پیوند خارجی باید ازطریق LaunchExternalLinkParams ارائه شود. این کلاس شامل
پارامترهای زیر است:
- نشانی وب پیوند - پیوند به وبسایت خارجی که در آن محتوای دیجیتال یا بارگیری برنامه ارائه میشود. برای بارگیریهای برنامه، این پیوند باید در «کنسول توسعهدهنده Play» ثبت و تأیید شود.
- نوع پیوند - نوع محتوایی که به کاربر پیشنهاد میشود.
- حالت راهاندازی - مشخص میکند که پیوند چگونه راهاندازی شود. برای بارگیریهای برنامه، باید این تنظیم را روی
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 دیگری
بهجز BillingResponseCode.OK ارائه دهند. این کدهای پاسخ را بهصورت زیر مدیریت کنید:
-
ERROR: این خطای داخلی است. تراکنش یا باز کردن وبسایت خارجی را ادامه ندهید. با فراخوانی مجدد API یا با فراخوانیlaunchExternalLink()در تلاش بعدیتان برای هدایت کاربر به خارج از برنامه، دوباره امتحان کنید. FEATURE_NOT_SUPPORTED: در دستگاه فعلی، «میاناهای برنامهسازی کاربردی پیوند محتوای خارجی» در «فروشگاه Play» پشتیبانی نمیشود. تراکنش یا باز کردن وبسایت خارجی را ادامه ندهید.-
USER_CANCELED: باز کردن وبسایت خارجی ادامه پیدا نمیکند. دفعه بعد که سعی کردید کاربر را به خارج از برنامه هدایت کنید، دوباره باlaunchExternalLink()تماس بگیرید. BILLING_UNAVAILABLE: تراکنش برای پیوندهای محتوای خارجی واجدشرایط نیست و بنابراین تحت این برنامه انجام نمیشود. این امر یا به این دلیل است که کاربر در کشور واجدشرایط برای این برنامه نیست یا حساب شما باموفقیت در این برنامه ثبت نشده است. اگر مورد دوم است، وضعیت ثبتنام خود را در Play Developer Console بررسی کنید.-
DEVELOPER_ERROR: خطایی در درخواست وجود دارد. قبلاز ادامه دادن، از پیام اشکالزدایی برای شناسایی و اصلاح خطا استفاده کنید. -
NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: این خطاها گذرا هستند و باید با خطمشی مناسبی برای تلاش مجدد مدیریت شوند. در موردSERVICE_DISCONNECTED، قبلاز تلاش مجدد، اتصال با Google Play را دوباره برقرار کنید.
آزمایش پیوندهای محتوای خارجی
از آزمونگران پروانه باید برای آزمایش یکپارچگی پیشنهادهای خارجی استفاده شود. برای تراکنشهایی که توسط حسابهای آزمایشکننده پروانه آغاز شدهاند، صورتحساب دریافت نخواهید کرد. برای اطلاعات بیشتر درباره پیکربندی آزمونگران پروانه، آزمایش خدمات صورتحساب درونبرنامه با پروانه برنامه را ببینید.
مراحل بعدی
پساز تکمیل ادغام درونبرنامهای، آماده ادغام زیرینه خود هستید.