این سند حاوی یادداشتهای انتشار برای «کتابخانه خدمات صورتحساب Google Play» است.
مهارتهای Android
مشاهده در GitHubارتقا دادن «کتابخانه خدمات صورتحساب Play»
android skills add play-billing-library-version-upgradeHelp me upgrade my Play Billing Library implementation.انتشار نسخه ۹.۱.۰ از «کتابخانه صورتحساب Google Play» (۲۰۲۶/۰۶/۱۸)
نسخه ۹.۱.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
- میاناهای برنامهسازی کاربردی جدید برای انتخاب صورتحساب:
BillingClient.getBillingChoiceInfoAsync()اضافه شد تا اطلاعات مربوط به انتخابهای صورتحساب دردسترس کاربر بازیابی شود.- کلاس
BillingChoiceInfoاضافه شد که حاوی جزئیات پاسخ، ازجمله نشانیهای وب تصویر و اطلاعات وفاداری است. -
GetBillingChoiceInfoParamsبرای پیکربندی درخواست اضافه شد. -
BillingChoiceInfoResponseListenerبرای دریافت تماس برگشتی اضافه شد. - تابع تعلیق
BillingClient.getBillingChoiceInfo()افزونه Kotlin اضافه شد. BillingClient.showBillingProgramInformationDialog()برای نمایش کادر گفتگوی اطلاعات برای برنامه صدور صورتحساب اضافه شد.BillingProgramInformationDialogParamsبرای پیکربندی کادر گفتگو اضافه شد.-
BillingProgramInformationDialogListenerبرای دریافت تماس برگشتی اضافه شد. BillingProgramAvailabilityDetails.BillingChoiceAvailabilityDetailsاضافه شد تا جزئیاتی درباره دردسترس بودن انتخاب صورتحساب ارائه شود.ChoiceScreenTypeبرای مشخص کردن نوع صفحه انتخاب اضافه شد.
انتشار نسخه ۹.۰.۰ از «کتابخانه صورتحساب Google Play» (۲۰۲۶/۰۵/۱۹)
نسخه ۹.۰.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است. اگر میخواهید از نسخههای قبلی «کتابخانه خدمات صورتحساب Play» (PBL) مهاجرت کنید، راهنمای مهاجرت PBL 9 را ببینید.
خلاصه تغییرات
کدهای خطای بهروزشده برای فعالیت مسدودشده «فروشگاه Play»: کدهای خطا برای برنامههای مسدودشده «فروشگاه Play» بهروز شدهاند. در مواردی که برنامه «فروشگاه Play» توسط سیستم مسدود شده است (برای مثال، در حالت کودک سفارشیسازیشده OEM)، کد پاسخ از
ERRORبهBILLING_UNAVAILABLEتغییر کرده است. علاوهبراین،BillingResultبرای چنین مواردی اکنون پیام اشکالزدایی فروشگاه Play مسدود شده است را ارائه میدهد.بهروزرسانی Nullability برای صورتحساب ارائهشده توسط توسعهدهنده: روش
DeveloperProvidedBillingDetails.getLinkUri()بهروز شده است تا@Nullableباشد. این تغییر از سناریوهایی پشتیبانی میکند که در آن URI پیوند مستقیم برای پرداختهای خارجی درطول مرحله انتخاب پرداخت دردسترس نیست.برای مدیریت ایمن این تغییر، مطمئن شوید کد ادغام شما هم مقدار
nullو هم مقدار رشته خالی ("") را از روشDeveloperProvidedBillingDetails.getLinkUri()قبلاز تجزیه یا راهاندازی هدفهای مرورگر مدیریت میکند.
targetSdkVersionبه ۳۵ بهروز شد.اکنون میتوانید از پیامرسانی درونبرنامه برای مطلع کردن کاربران از افزایش قیمت با الزام به توافق با کاربر در آینده استفاده کنید. این کار به کاربران اجازه میدهد افزایش قیمت را بدون خروج از برنامه تأیید کنند. پیام مربوط به افزایش قیمت با الزام به توافق با کاربر از اولین روزی که کاربر میتواند افزایش قیمت را بپذیرد نشان داده میشود و این پیام حداکثر هر ۷ روز یکبار نشان داده میشود.
انتشار نسخه ۸.۳.۰ از «کتابخانه صورتحساب Google Play» (۲۰۲۵/۱۲/۲۳)
نسخه ۸.۳.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
میاناهای برنامهسازی کاربردی جدید برای پرداختهای خارجی:
- کلاسهای اضافهشده برای پشتیبانی از جریان پرداختهای خارجی:
enableBillingProgram(EnableBillingProgramParams)را برای فعال کردن پرداختهای خارجی اضافه کردیم.BillingFlowParams.Builder.enableDeveloperBillingOptionرا برای راهاندازی جریان پرداختهای خارجی اضافه کردید.
دستهبندی بهبودیافته خطا برای ریزش جریان پرداخت خارجی:
- اگر کاربر از جریان خرید خارج شود تا پرداخت را در برنامه خارجی (مثل کیف پول الکترونیکی) تکمیل کند و تراکنش را بدون بازگشت رها کند، کد پاسخ برگرداندهشده به مشتری اکنون
BillingResponseCode.USER_CANCELED(۱) با پیام اشکالزداییBILLING_ACTIVITY_PAUSEDاست (قبلاً بهطور پیشفرضBillingResponseCode.ERROR(۶) بود).
- اگر کاربر از جریان خرید خارج شود تا پرداخت را در برنامه خارجی (مثل کیف پول الکترونیکی) تکمیل کند و تراکنش را بدون بازگشت رها کند، کد پاسخ برگرداندهشده به مشتری اکنون
انتشار نسخه ۸.۲.۱ از «کتابخانه صورتحساب Google Play» (۲۰۲۵/۱۲/۱۵)
نسخه ۸.۲.۱ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
رفع اشکالها
- اشکالی در
isBillingProgramAvailableAsyncوcreateBillingProgramReportingDetailsAsyncبرطرف شد. برای استفاده از این میاناهای برنامهسازی کاربردی که در نسخه ۸.۲.۰ معرفی شدهاند، به نسخه ۸.۲.۱ بهروزرسانی کنید.
انتشار نسخه ۸.۲.۰ از «کتابخانه صورتحساب Google Play» (۲۰۲۵/۱۲/۰۹)
نسخه ۸.۲.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
میاناهای برنامهسازی کاربردی جدید برای پیوندهای محتوای خارجی و پیشنهادهای ویژه خارجی:
enableBillingProgramبرای راهاندازیBillingClientبرای این برنامهها اضافه شد.isBillingProgramAvailableAsyncاضافه شد تا واجدشرایط بودن کاربر تعیین شود.createBillingProgramReportingDetailsAsyncبرای ایجاد کردن ژتون تراکنش خارجی که باید برای گزارشدهی استفاده شود اضافه شد.launchExternalLinkاضافه شد تا پیوند خارجی به پیشنهاد محتوای دیجیتال یا بارگیری برنامه را آغاز کند.
تغییرات در برنامه پیشنهادهای خارجی:
- خطمشیهای برنامه پیشنهادهای خارجی تغییر کرده است. برای جزئیات، تغییرات برنامه را ببینید. برای آشنایی با نحوه راهاندازی جریانهای پیشنهاد خارجی با میاناهای برنامهسازی کاربردی جدید، راهنمای ادغام را ببینید.
BillingClient.Builder.enableExternalOfferAPI منسوخ شده است.isExternalOfferAvailableAsyncAPI منسوخ شده است.createExternalOfferReportingDetailsAsyncAPI منسوخ شده است.showExternalOfferInformationDialogAPI منسوخ شده است.
انتشار نسخه ۸.۱.۰ از «کتابخانه صورتحساب Google Play» (۲۰۲۵/۱۱/۰۶)
نسخه ۸.۱.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
اشتراکهای تعلیقشده
پارامتر جدیدی به روش
BillingClient.queryPurchasesAsync()اضافه شده است تا اشتراکهای تعلیقشده را هنگام پرسمان برای اشتراکها دربرگیرد. اشتراکهای تعلیقشده همچنان به کاربر نسبت داده میشوند، اما فعال نیستند، یا به این دلیل که کاربر اشتراک را موقتاً متوقف کرده است یا روش پرداخت تمدید او رد شده است.شیء
Purchaseبرگرداندهشده در شنونده،isSuspended() = trueرا برای هر اشتراک تعلیقشده برمیگرداند. در این حالت، نباید به اشتراک خریداریشده دسترسی اعطا کنید، و درعوض باید کاربر را به مرکز اشتراکها هدایت کنید تا کاربر بتواند روشهای پرداخت خود را مدیریت کند یا وضعیت توقف موقت را برای فعال کردن مجدد اشتراک خود تغییر دهد.بهروزرسانیهای اشتراکها:
شیء
BillingFlowParams.ProductDetailsParamsاکنون دارای روشsetSubscriptionProductReplacementParams()است که در آن میتوانید اطلاعات جایگزینی سطح محصول را مشخص کنید.شیء
SubscriptionProductReplacementParamsدو روش تنظیمکننده دارد:setOldProductId: محصول قدیمی که باید با محصول موجود درProductDetailsفعلی جایگزین شود.-
setReplacementMode: این حالت جایگزینی سطح مورد است. این حالتها اساساً همان SubscriptionUpdateParams هستند، اما نگاشت مقدار بهروز شده است. حالت جایگزینی جدیدKEEP_EXISTINGمعرفی شده است که به شما امکان میدهد برنامه زمانی پرداخت موجود را برای یک مورد بدون تغییر نگه دارید.
SubscriptionUpdateParams setSubscriptionReplacementMode منسوخ خواهد شد. باید درعوض از
SubscriptionProductReplacementParams.setReplacementModeاستفاده کنید.
minSdkVersionبه ۲۳ بهروز شد.میاناهای برنامهسازی کاربردی پیشسفارش برای محصولات یکباره را فعال کردیم
ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails()API که جزئیات پیشسفارش را دریافت میکند اکنون برای استفاده دردسترس است.«کتابخانه خدمات صورتحساب Google Play» اکنون از Kotlin نسخه ۲.۲.۰ پشتیبانی میکند.
انتشار نسخه ۸.۰.۰ از «کتابخانه صورتحساب Google Play» (۲۰۲۵/۰۶/۳۰)
نسخه ۸.۰.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
محصولات درونبرنامه ازاینپس محصولات یکباره نامیده میشوند.
چندین گزینه خرید و پیشنهاد ویژه برای محصولات یکباره.
اکنون میتوانید چند گزینه خرید و پیشنهاد ویژه برای محصولات یکباره خود داشته باشید. این کار به شما انعطافپذیری در نحوه فروش محصولاتتان میدهد و پیچیدگی مدیریت آنها را کاهش میدهد.
روش
queryProductDetailsAsync()بهبود یافت.قبلاز PBL 8.0.0، روش
queryProductDetailsAsync()محصولاتی را که نمیتوانست واکشی کند برنمیگرداند. این امر ممکن است بهدلایلی مثل پیدا نشدن محصول یا دردسترس نبودن پیشنهاد ویژه برای کاربر باشد. با PBL نسخه 8.0.0، محصولات واکشینشده با کد وضعیت جدیدی در سطح محصول برگردانده میشوند که اطلاعاتی درباره محصولات واکشینشده ارائه میدهد. توجه داشته باشید که امضایProductDetailsResponseListener.onProductDetailsResponse()تغییر کرده است و باید تغییراتی در برنامهتان ایجاد کنید. برای اطلاعات بیشتر، به پردازش نتیجه مراجعه کنید.اتصال مجدد خودکار سرویس.
پارامتر جدید سازنده
BillingClient.Builder.enableAutoServiceReconnection()به توسعهدهندگان اجازه میدهد تا اتصال مجدد خودکار سرویس را انتخاب کنند، که مدیریت اتصال را با مدیریت اتصال مجدد به سرویس صورتحساب Play بهطور خودکار ساده میکند و نیاز به تماس دستی باstartConnection()درصورت قطع اتصال سرویس را ازبین میبرد. برای اطلاعات بیشتر، برقراری مجدد اتصال بهطور خودکار را ببینید.کدهای پاسخ فرعی برای روش
launchBillingFlow().BillingResult برگرداندهشده از
launchBillingFlow()اکنون شامل فیلد کد زیرپاسخ خواهد بود. این فیلد فقط در برخی موارد پر میشود تا دلیل مشخصتری برای ناموفق بودن ارائه دهد. فیلد زیرپاسخ میتواند مقادیر زیر را داشته باشد:PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS- زمانی برگردانده میشود که موجودی کاربر کمتر از قیمت محصولی باشد که میخواهد بخرد.USER_INELIGIBLE- زمانی برگردانده میشود که کاربر الزامات واجدشرایط بودن پیکربندیشده را برای پیشنهاد ویژه اشتراک نداشته باشد.NO_APPLICABLE_SUB_RESPONSE_CODE- مقدار پیشفرض، زمانی برگردانده میشود که هیچ کد زیرپاسخ دیگری قابلاعمال نباشد.
روش
queryPurchaseHistory()برداشته شد.روش
queryPurchaseHistory()که قبلاً بهعنوان منسوخشده علامتگذاری شده بود اکنون برداشته شده است. برای جزئیات مربوط به اینکه بهجای آن از چه میاناهای برنامهسازی کاربردی جایگزینی استفاده کنید، پرسوجوی سابقه خرید را ببینید.روش
querySkuDetailsAsync()برداشته شد.روش
querySkuDetailsAsync()که قبلاً بهعنوان منسوخشده علامتگذاری شده بود اکنون برداشته شده است. باید بهجای آن از queryProductDetailsAsync استفاده کنید.روش
BillingClient.Builder.enablePendingPurchases()برداشته شد.روش
enablePendingPurchases()بدون پارامتر که قبلاً بهعنوان منسوخشده علامتگذاری شده بود اکنون برداشته شده است. باید ازenablePendingPurchases(PendingPurchaseParams params)استفاده کنید. توجه داشته باشید کهenablePendingPurchases()منسوخشده ازنظر عملکردی معادلenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())است.روش
queryPurchasesAsync()سربارگذاریشده که skuType را میگیرد برداشته شد.روش
queryPurchasesAsync(String skuType, PurchasesResponseListener listener)که قبلاً بهعنوان منسوخشده علامتگذاری شده بود اکنون برداشته شده است. یا ازqueryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener)استفاده کنید.
انتشار نسخه ۷.۱.۱ از «کتابخانه صورتحساب Google Play» (۲۰۲۴/۱۰/۰۳)
نسخه ۷.۱.۱ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
رفع اشکالها
- اشکالی در «کتابخانه خدمات صورتحساب Play» نسخه ۷.۱.۰ مربوط به آزمایش
BillingResultکدهای پاسخ برطرف شد.
انتشار نسخه ۷.۱.۰ از «کتابخانه خدمات صورتحساب Google Play» (۲۰۲۴/۰۹/۱۹)
نسخه ۷.۱.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
- ایمنی رشته بهبودیافته مربوط به وضعیت اتصال و مدیریت.
- تغییرات جزئی برای آزمایش کدهای پاسخ
BillingResultمعرفی شد که بهطور کامل در «کتابخانه خدمات صورتحساب Play» نسخه ۷.۱.۱ منتشر شده است. برای آزمایش کردن ادغام بااستفاده از این ویژگی، باید به «کتابخانه خدمات صورتحساب Play» نسخه ۷.۱.۱ ارتقا دهید. اشکالی وجود دارد که فقط بر برنامههایی تأثیر میگذارد که آزمایش لغو صورتحساب در آنها فعال است و بر استفاده معمولی تأثیری ندارد. برای اطلاعات بیشتر، به آزمایش کدهای پاسخBillingResultمراجعه کنید.
انتشار نسخه ۷.۰.۰ از «کتابخانه صورتحساب Google Play» (۲۰۲۴/۰۵/۱۴)
نسخه ۷.۰.۰ «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
میاناهای برنامهسازی کاربردی برای پشتیبانی از اشتراکهای قسطی اضافه شد.
ProductDetails.InstallmentPlanDetailsبرای طرحهای پایه قسطی که کاربران واجدشرایط خرید آنها هستند اضافه شد. این میانای برنامهسازی کاربردی به برنامه شما کمک میکند طرح اقساطی و راهاندازی تعهد آن را شناسایی کند تا اطلاعات مربوطه را به کاربر ارائه دهد. برای کسب اطلاعات بیشتر، راهنمای اقساط اشتراک ما را ببینید.
PendingPurchasesParamsوBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)برای جایگزینیBillingClient.Builder.enablePendingPurchases()اضافه شده است که در این نسخه پخش منسوخ شده است.enablePendingPurchases()منسوخشده ازنظر عملکردی معادلenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())است.
میاناهای برنامهسازی کاربردی برای پشتیبانی از تراکنشهای معلق برای طرحهای پیشپرداخت اشتراک اضافه شد:
- از
PendingPurchasesParams.Builder.enablePrepaidPlans()همراه باBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)استفاده کنید تا تراکنشهای معلق را برای طرحهای پیشپرداخت اشتراک فعال کنید. هنگام افزودن پشتیبانی، مطمئن شوید که برنامهتان چرخههای حیات اشتراک را نیز بهدرستی مدیریت میکند. برای کسب اطلاعات بیشتر، راهنمای خریدهای معلقه ما را ببینید. Purchase.PendingPurchaseUpdateوPurchase.getPendingPurchaseUpdate()برای بازیابی افزایش موجودی معلق یا ارتقا یا تنزل اشتراک موجود اضافه شد.
- از
BillingClient.Builder.enableAlternativeBilling()،AlternativeBillingListener، وAlternativeChoiceDetailsبرداشته شدند.- توسعهدهندگان باید بهجای آن از
BillingClient.Builder.enableUserChoiceBilling()باUserChoiceBillingListenerوUserChoiceDetailsدر فراخوانی برگشتی شنونده استفاده کنند.
- توسعهدهندگان باید بهجای آن از
BillingFlowParams.ProrationMode،BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()، وBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()برداشته شدند.- توسعهدهندگان باید درعوض از
BillingFlowParams.SubscriptionUpdateParams.ReplacementModeباBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)استفاده کنند.
- توسعهدهندگان باید درعوض از
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken()برداشته شد.- توسعهدهندگان باید درعوض از
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String)استفاده کنند.
- توسعهدهندگان باید درعوض از
BillingClient.queryPurchaseHistoryAsync()منسوخ شده است و در نسخهٔ پخش آتی برداشته خواهد شد. توسعهدهندگان باید از جایگزینهای زیر استفاده کنند:- خریدهای تأییدشده و معلقه: از
BillingClient.queryPurchasesAsync()برای واکشی خریدهای فعال استفاده کنید. - خریدهای مصرفشده: توسعهدهندگان باید خریدهای مصرفشده را در سرورهای خودشان پیگیری کنند.
- خریدهای لغوشده: از میانای برنامهسازی کاربردی توسعهدهنده voided-purchases استفاده کنید.
- برای جزئیات بیشتر، پرسوجو کردن سابقه خرید را ببینید
- خریدهای تأییدشده و معلقه: از
BillingFlowParams.ProductDetailsParams.setOfferToken()اکنون وقتی توسعهدهندگانofferTokenخالی را مشخص میکنند، استثنا قائل میشود.
minSdkVersionبه ۲۱ وtargetSdkVersionبه ۳۴ بهروز شد.
انتشار نسخه ۶.۲.۱ از «کتابخانه صورتحساب Google Play» (۲۰۲۴/۰۴/۱۶)
نسخه ۶.۲.۱ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
- اشکالی در
BillingClient.showAlternativeBillingOnlyInformationDialog()برطرف شد که در آن ممکن بودAlternativeBillingOnlyInformationDialogListenerدر موارد خاصی که کادر گفتگو تکمیل میشود فراخوانی نشود.
انتشار نسخه ۶.۲.۰ از «کتابخانه صورتحساب Google Play» (۲۰۲۴/۰۳/۰۶)
نسخه ۶.۲.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
- میاناهای برنامهسازی کاربردی برای پشتیبانی از پیشنهادهای خارجی اضافه شد
BillingClient.Builder.enableExternalOffer()را اضافه کردیم تا امکان ارائه پیشنهادهای ویژه خارجی فراهم شود.BillingClient.isExternalOfferAvailableAsync()اضافه شد تا دردسترس بودن عملکرد ارائه پیشنهادهای ویژه خارجی بررسی شود.BillingClient.showExternalOfferInformationDialog()را اضافه کردیم تا قبلاز هدایت کاربران به خارج از برنامه، کادر گفتگوی اطلاعاتی به آنها نشان داده شود.BillingClient.createExternalOfferReportingDetailsAsync()اضافه شد تا بار داده موردنیاز برای گزارش تراکنشهای انجامشده ازطریق پیشنهادهای خارجی ایجاد شود.
انتشار نسخه ۶.۱.۰ از «کتابخانه صورتحساب Google Play» (۲۰۲۳/۱۱/۱۴)
نسخه ۶.۱.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
- میاناهای برنامهسازی کاربردی برای پشتیبانی از فقط صورتحساب جایگزین (یعنی بدون انتخاب کاربر) اضافه شد
BillingClient.Builder.enableAlternativeBillingOnly()اضافه شد تا امکان ارائه فقط صورتحساب جایگزین بهطور کاربردی فعال شود.BillingClient.isAlternativeBillingOnlyAvailableAsync()اضافه شد تا امکان ارائه فقط صورتحساب جایگزین بررسی شود.BillingClient.showAlternativeBillingOnlyInformationDialog()اضافه شد تا کادر گفتگوی اطلاعاتی برای اطلاعرسانی به کاربران در زمانی که فقط از صورتحساب جایگزین استفاده میشود نشان داده شود.BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()را برای ایجاد بار داده موردنیاز برای گزارش تراکنشهای انجامشده فقط ازطریق صورتحساب جایگزین اضافه کردیم.
- میاناهای برنامهسازی کاربردی صدور صورتحساب بهانتخاب کاربر بهروزرسانی شد
UserChoiceBillingListenerاضافه شد تا جایگزین AlternativeBillingListener شود که بهعنوان منسوخ علامتگذاری شده است.-
UserChoiceDetailsاضافه شد تا جایگزینAlternativeChoiceDetailsشود که بهعنوان منسوخ علامتگذاری شده است. BillingClient.Builder.enableUserChoiceBilling()اضافه شد تا جایگزینBillingClient.Builder.enableAlternativeBilling()شود که بهعنوان منسوخ علامتگذاری شده است.
BillingClient.getBillingConfigAsync()برای بازیابی کشور Google Play اضافه شد.
انتشار نسخه ۶.۰.۱ «کتابخانه صورتحساب Google Play» (۲۰۲۳/۰۶/۲۲)
نسخه ۶.۰.۱ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
«کتابخانه خدمات صورتحساب Play» را بهروز کنید تا با Android نسخه ۱۴ سازگار شود.
انتشار نسخه ۶.۰ «کتابخانه خدمات صورتحساب Google Play» (۲۰۲۳/۰۵/۱۰)
نسخه ۶.۰.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
ReplacementModeenum جدیدی برای جایگزینیProrationModeاضافه شد.توجه داشته باشید که
ProrationModeهنوز برای سازگاری با نسخههای قدیمی دردسترس است.شناسه سفارش برای
PENDINGخرید برداشته شد.قبلاً، شناسه سفارش همیشه ایجاد میشد حتی اگر خرید درانتظار بود. از نسخه ۶.۰.۰ به بعد، شناسه سفارش برای خریدهای معلقه ایجاد نخواهد شد و برای این خریدها، شناسه سفارش پساز انتقال خرید به وضعیت
PURCHASEDتکمیل خواهد شد.روشهای
queryPurchasesوlaunchPriceConfirmationFlowبرداشته شد.روشهای
queryPurchasesوlaunchPriceConfirmationFlowکه قبلاً بهعنوان منسوخشده علامتگذاری شده بودند اکنون در «کتابخانه خدمات صورتحساب Play» نسخه ۶.۰.۰ برداشته شدهاند. توسعهدهندگان باید بهجایqueryPurchasesازqueryPurchasesAsyncاستفاده کنند. برای جایگزینهایlaunchPriceConfirmationFlow، تغییرات قیمت را ببینید.کد پاسخ خطای شبکه جدید اضافه شد.
کد پاسخ خطای شبکه جدیدی،
NETWORK_ERROR، از نسخه ۶.۰.۰ «کتابخانه خدمات صورتحساب Play» اضافه شده است. این کد زمانی برگردانده میشود که خطایی بهدلیل مشکل اتصال شبکه رخ دهد. این خطاهای اتصال شبکه قبلاً بهصورتSERVICE_UNAVAILABLEگزارش شدهاند.
SERVICE_UNAVAILABLEوSERVICE_TIMEOUTبهروز شد.از نسخه ۶.۰.۰ «کتابخانه صورتحساب Play» بهبعد، خطاهای ناشی از اتمام مهلت در پردازش بهجای
SERVICE_TIMEOUTفعلی، بهصورتSERVICE_UNAVAILABLEبرگردانده خواهد شد.این رفتار در نسخههای قبلی «کتابخانه خدمات صورتحساب Play» تغییر نمیکند.
SERVICE_TIMEOUTبرداشته شد.از نسخه ۶.۰.۰ «کتابخانه خدمات صورتحساب Play»،
SERVICE_TIMEOUTدیگر برگردانده نخواهد شد. نسخههای قبلی PBL همچنان این کد را برمیگردانند.ثبت گزارش اضافی اضافه شد.
نسخه «کتابخانه خدمات صورتحساب Play» ۶ شامل گزارشگیری اضافی است که اطلاعاتی درباره استفاده از میانای برنامهسازی کاربردی (مانند موفقیت و شکست) و مشکلات اتصال سرویس ارائه میدهد. از این اطلاعات برای بهبود عملکرد «کتابخانه صورتحساب Play» و ارائه پشتیبانی بهتر برای خطاها استفاده خواهد شد.
انتشار نسخه ۵.۲.۱ «کتابخانه صورتحساب Google Play» (۲۰۲۳/۰۶/۲۲)
نسخه ۵.۲.۱ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
«کتابخانه خدمات صورتحساب Play» را بهروز کنید تا با Android نسخه ۱۴ سازگار شود.
انتشار نسخه ۵.۲ «کتابخانه صورتحساب Google Play» (۲۰۲۳/۰۴/۰۶)
نسخه ۵.۲.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
- کلاسهایی برای پشتیبانی از جریانهای صورتحساب جایگزین در تلفن همراه/رایانه لوحی برای کاربران ساکن کره جنوبی اضافه شده است:
- روش
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()برای مشخص کردن شناسه تراکنش خارجی اشتراک مبدأ اضافه شد. - روش
BillingClient.Builder.enableAlternativeBilling()اضافه شد تا به کاربران ساکن کره جنوبی اجازه دهد گزینه صورتحساب جایگزین را انتخاب کنند.
نسخه ۵.۱ «کتابخانه صورتحساب Google Play» (۲۰۲۲/۱۰/۳۱)
نسخه ۵.۱.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
این نسخه حاوی تغییرات زیر است.
خلاصه تغییرات
- روش
ProductDetails.SubscriptionOfferDetails.getOfferId()برای بازیابی شناسه پیشنهاد ویژه اضافه شد. - روش
ProductDetails.SubscriptionOfferDetails.getBasePlanId()برای بازیابی شناسه طرح پایه اضافه شد. -
targetSdkVersionبه ۳۱ بهروز شد.
انتشار Google Play Billing Library نسخه ۵.۰ (۲۰۲۲/۰۵/۱۱)
نسخه ۵.۰.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
این نسخه حاوی تغییرات زیر است.
خلاصه تغییرات
- مدل جدیدی برای اشتراکها معرفی کردیم، ازجمله نهادهای جدیدی که به شما امکان میدهند چند پیشنهاد ویژه برای یک محصول اشتراکی ایجاد کنید. برای اطلاعات بیشتر، راهنمای انتقال را ببینید.
BillingClient.queryProductDetailsAsync()برای جایگزینیBillingClient.querySkuDetailsAsync()اضافه شد.- روش
setIsOfferPersonalized()برای الزامات شفافسازی قیمتگذاری شخصیسازیشده در اتحادیه اروپا اضافه شد. برای کسب اطلاعات بیشتر درباره نحوه استفاده از این روش، به نشان دادن قیمت شخصیسازیشده مراجعه کنید. -
queryPurchases()که قبلاً منسوخ شده بود و queryPurchasesAsync معرفیشده در «کتابخانه خدمات صورتحساب Google Play» نسخه ۴.۰.۰ جایگزین آن شده بود برداشته شد. -
launchPriceChangeFlowمنسوخ شده است و در نسخه پخش آتی برداشته خواهد شد. برای کسب اطلاعات بیشتر درباره گزینههای جایگزین، راهاندازی جریان تأیید تغییر قیمت را ببینید. setVrPurchaseFlow()برداشته شد، که قبلاً هنگام نمونهسازی جریان خرید استفاده میشد. در نسخههای قبلی، این روش کاربر را هدایت میکرد تا خرید را در دستگاه Android خود تکمیل کند. وقتی این روش را بردارید، کاربران خرید را ازطریق جریان خرید استاندارد تکمیل خواهند کرد.
انتشار نسخه ۴.۱ «کتابخانه صورتحساب Google Play» (۲۰۲۲/۰۲/۲۳)
نسخه ۴.۱.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
این نسخه حاوی تغییرات زیر است.
خلاصه تغییرات
BillingClient.showInAppMessages()اضافه شد تا به مدیریت رد شدن پرداخت اشتراک کمک کند. برای کسب اطلاعات بیشتر درباره نحوه استفاده از پیامرسانی درونبرنامه برای رسیدگی به رد شدن پرداخت اشتراک، به رسیدگی به رد شدن پرداخت مراجعه کنید.
انتشار نسخه ۴.۰ «کتابخانه صورتحساب Google Play» (۲۰۲۱/۰۵/۱۸)
نسخه ۴.۰.۰ از «کتابخانه خدمات صورتحساب Google Play» و افزونههای Kotlin اکنون دردسترس است.
خلاصه تغییرات
BillingClient.queryPurchasesAsync()اضافه شد تا جایگزینBillingClient.queryPurchases()شود که در نسخه پخش آتی برداشته خواهد شد.حالت جایگزینی اشتراک جدید اضافه شد
IMMEDIATE_AND_CHARGE_FULL_PRICE.روش
BillingClient.getConnectionState()برای بازیابی وضعیت اتصال «کتابخانه خدمات صورتحساب Play» اضافه شد.Javadoc و پیادهسازی بهروز شد تا نشان دهد کدام رشته را میتوان در یک روش فراخوانی کرد و نتایج کدام رشته پست میشود.
BillingFlowParams.Builder.setSubscriptionUpdateParams()بهعنوان روشی جدید برای شروع بهروزرسانیهای اشتراک اضافه شد. این جایگزینBillingFlowParams#getReplaceSkusProrationMode،BillingFlowParams#getOldSkuPurchaseToken،BillingFlowParams#getOldSku،BillingFlowParams.Builder#setReplaceSkusProrationMode،BillingFlowParams.Builder#setOldSkuمیشود که برداشته شدهاند.
Purchase.getQuantity()وPurchaseHistoryRecord.getQuantity()اضافه شد.
Purchase#getSkus()وPurchaseHistoryRecord#getSkus()اضافه شد. اینها جایگزینPurchase#getSkuوPurchaseHistoryRecord#getSkuمیشوند که برداشته شدهاند.
BillingFlowParams#getSku،BillingFlowParams#getSkuDetails، وBillingFlowParams#getSkuTypeبرداشته شد.
انتشار نسخه ۳.۰.۳ از «کتابخانه صورتحساب Google Play» (۲۰۲۱/۰۳/۱۲)
نسخه ۳.۰.۳ از «کتابخانه خدمات صورتحساب Google Play»، افزونه Kotlin، و افزونه Unity اکنون دردسترس است.
رفع اشکالهای Java و Kotlin
- رفع نشت حافظه هنگام فراخوانی
endConnection(). - رفع مشکل زمانی که «کتابخانه خدمات صورتحساب Google Play» توسط برنامههایی استفاده میشود که از
حالت راهاندازی تکتکلیفی استفاده میکنند. وقتی برنامهای از راهانداز Android ازسر گرفته شود و کادر گفتگوی صورتحساب قبلاز تعلیق شدن نمایان باشد،
فراخوانی برگشتی
onPurchasesUpdated()راهاندازی خواهد شد.
رفع اشکالهای Unity
- برای رفع نشت حافظه و حل مشکلی که مانع از خرید میشود، به نسخه ۳.۰.۳ Java بهروزرسانی کنید. این مشکل زمانی رخ میدهد که برنامه از راهانداز Android ازسر گرفته میشود و کادر گفتگوی صورتحساب قبلاز تعلیق قابلمشاهده بوده است.
انتشار نسخه ۳.۰.۲ از «کتابخانه خدمات صورتحساب Google Play» (۲۰۲۰/۱۱/۲۴)
نسخه ۳.۰.۲ از «کتابخانه خدمات صورتحساب Google Play» و افزونه Kotlin اکنون دردسترس است.
رفع اشکالها
- اشکالی در افزونه Kotlin برطرف شد که در آن کوروتین با خطای «قبلاً ازسر گرفته شده است» ناموفق بود.
- مشکل ارجاعهای حلنشده هنگام استفاده از افزونه Kotlin با نسخه ۱.۴+ کتابخانه kotlinx.coroutines برطرف شد.
انتشار نسخه ۳.۰.۱ از «کتابخانه خدمات صورتحساب Google Play» (۲۰۲۰/۰۹/۳۰)
نسخه ۳.۰.۱ از «کتابخانه خدمات صورتحساب Google Play» و افزونه Kotlin اکنون دردسترس است.
رفع اشکالها
- اشکالی برطرف شد که در آن اگر برنامه درطول جریان صورتحساب بسته و بازیابی میشد،
ممکن بود
PurchasesUpdatedListenerبا نتیجه خرید فراخوانی نشود.
انتشار نسخه ۳.۰ «کتابخانه خدمات صورتحساب Google Play» (۲۰۲۰/۰۶/۰۸)
نسخه ۳.۰.۰ از «کتابخانه خدمات صورتحساب Google Play»، افزونه Kotlin، و افزونه Unity اکنون دردسترس است.
خلاصه تغییرات
- پشتیبانی SKU پاداشدار برداشته شد.
- پارامترهای
ChildDirectedوUnderAgeOfConsentبرداشته شد. - روشهای محموله توسعهدهنده منسوخشده برداشته شد.
- روشهای منسوخشده
BillingFlowParams.setAccountId()وBillingFlowParams.setDeveloperId()برداشته شد. - روشهای منسوخشده
BillingFlowParams.setOldSkus(String oldSku)وBillingFlowParams.addOldSku(String oldSku)برداشته شد. - گزارمانهای تهیپذیری اضافه شد.
رفع اشکالها
SkuDetails.getIntroductoryPriceCycles()اکنون بهجایString،intرا برمیگرداند.- اشکالی برطرف شد که در آن جریان صورتحساب بهگونهای درنظر گرفته میشد که گویی پارامترهای اضافی دارد، حتی اگر هیچ پارامتر اضافیای تنظیم نشده بود.
انتشار نسخه ۲.۲.۱ «کتابخانه خدمات صورتحساب Google Play» (۲۰۲۰/۰۵/۲۰)
نسخه ۲.۲.۱ کتابخانه خدمات صورتحساب Google Play اکنون دردسترس است.
رفع اشکالها
- نسخه پیشفرض کتابخانه «خدمات صورتحساب Java Play» که افزونه Kotlin به آن وابسته است بهروزرسانی شد.
انتشار «کتابخانه خدمات صورتحساب Google Play» نسخه ۲.۲.۰ و پشتیبانی Unity (۲۰۲۰/۰۳/۲۳)
نسخه ۲.۲.۰ «خدمات صورتحساب Google Play» عملکردی را ارائه میدهد که به توسعهدهندگان کمک میکند مطمئن شوند خریدها به کاربر صحیح نسبت داده میشود. این تغییرات جایگزین نیاز به ساختن راهحلهای سفارشی براساس بار داده توسعهدهنده میشود. بهعنوان بخشی از این بهروزرسانی، عملکرد محموله توسعهدهنده منسوخ شده است و در نسخه پخش آتی برداشته خواهد شد. برای اطلاعات بیشتر، ازجمله جایگزینهای توصیهشده، محموله توسعهدهنده را ببینید.
کتابخانه خدمات صورتحساب Google Play نسخه ۲ برای Unity
علاوهبر نسخههای کنونی Java و Kotlin از «کتابخانه خدمات صورتحساب Google Play» نسخه ۲، نسخهای از این کتابخانه را برای استفاده با Unity منتشر کردیم. توسعهدهندگان بازی که از Unity in-app purchase API استفاده میکنند اکنون میتوانند برای بهرهمندی از همه ویژگیهای «کتابخانه خدمات صورتحساب Google Play» نسخه ۲ و آسانتر کردن ارتقاهای بعدی به نسخههای آینده «کتابخانه خدمات صورتحساب Google Play» ارتقا دهند.
برای کسب اطلاعات بیشتر، به استفاده از «خدمات صورتحساب Google Play» با Unity مراجعه کنید.
خلاصه تغییرات
- Java Google Play Billing Library
- در
AcknowledgePurchaseParams، روشهایsetDeveloperPayload()وgetDeveloperPayload()منسوخ شده است. - در
ConsumeParams، روشهایsetDeveloperPayload()وgetDeveloperPayload()منسوخ شده است. - در
BillingFlowParams،setAccountId()بهsetObfuscatedAccountId()تغییر نام دادیم، و محدودیت طول ۶۴ نویسه و محدودیت غیرمجاز بودن «اطلاعات شناساننده شخصی» (PII) در این فیلد را مستند کردیم.setAccountId()بهعنوان منسوخشده علامتگذاری شده است و در نسخه کتابخانه آینده برداشته خواهد شد. - در
BillingFlowParams،setObfuscatedProfileId()اضافه شد که عملکردی مشابهsetObfuscatedAccountId()دارد. برای اطلاعات بیشتر، بهروزرسانیها و جایگزینهای بار داده توسعهدهنده را ببینید. - در
Purchase، روشgetAccountIdentifiers()را برای برگرداندن شناسههای حساب مبهمشده تنظیمشده درBillingFlowParamsاضافه کردیم. - در
BillingClient، روشloadRewardedSku()بهعنوان بخشی از منسوخ کردن SKU پاداشدار، منسوخشده علامتگذاری شده است.
- در
انتشار «کتابخانه خدمات صورتحساب Google Play» نسخه ۲.۱.۰ و انتشار «افزونه Kotlin» نسخه ۲.۱.۰ (۲۰۱۹/۱۲/۱۰)
نسخه ۲.۱.۰ کتابخانه «خدمات صورتحساب Google Play» و افزونه جدید Kotlin اکنون دردسترس است. افزونه Kotlin در «کتابخانه خدمات صورتحساب Play» جایگزینهای اصطلاحی میانای برنامهسازی کاربردی را برای مصرف Kotlin ارائه میدهد که ایمنی تهی و روالهای همزمان بهتری دارد. برای نمونههای کد، به استفاده از کتابخانه خدمات صورتحساب Google Play مراجعه کنید.
این نسخه حاوی تغییرات زیر است.
خلاصه تغییرات
- در
BillingFlowParams،setOldSku(String oldSku)منسوخ شده و باsetOldSku(String oldSku, String purchaseToken)جایگزین شده است تا وقتی چند حساب در دستگاه مالک یک شناسه کالا هستند، ابهامزدایی شود.
انتشار نسخه ۲.۰.۳ «کتابخانه خدمات صورتحساب Google Play» (۲۰۱۹/۰۸/۰۵)
نسخه ۲.۰.۳ کتابخانه «خدمات صورتحساب Google Play» اکنون دردسترس است.
رفع اشکالها
- اشکالی برطرف شد که در آن
querySkuDetailsAsync()گاهی بهجای برگرداندن نتیجه موفق، با کدDEVELOPER_ERRORناموفق میشد.
انتشار نسخه ۲.۰.۲ «کتابخانه خدمات صورتحساب Google Play» (۲۰۱۹/۰۷/۰۸)
نسخه ۲.۰.۲ کتابخانه «خدمات صورتحساب Google Play» اکنون دردسترس است. این نسخه حاوی بهروزرسانیهایی برای اسناد مرجع است و عملکرد کتابخانه را تغییر نمیدهد.
انتشار «کتابخانه خدمات صورتحساب Google Play» نسخه ۲.۰.۱ (۲۰۱۹/۰۶/۰۶)
نسخه ۲.۰.۱ از کتابخانه خدمات صورتحساب Google Play اکنون دردسترس است. این نسخه شامل تغییرات زیر است.
رفع اشکالها
- اشکالی که باعث میشد پیامهای اشکالزدایی در برخی موارد بهصورت
nullبرگردانده شوند برطرف شد. - مشکل احتمالی نشت حافظه برطرف شد.
انتشار نسخه ۲.۰ «کتابخانه خدمات صورتحساب Google Play» (۲۰۱۹/۰۵/۰۷)
نسخه ۲.۰ کتابخانه خدمات صورتحساب Google Play اکنون دردسترس است. این نسخه شامل تغییرات زیر است.
خریدها باید ظرف سه روز تأیید شوند
Google Play از خرید محصولات از داخل برنامه (درونبرنامه) یا
خارج از برنامه (برونبرنامه) پشتیبانی میکند. برای اینکه Google Play بتواند تجربه خرید ثابتی را صرفنظر از اینکه کاربر محصول شما را از کجا خریداری میکند تضمین کند، باید در اسرع وقت پساز اعطای حق استفاده به کاربر، همه خریدهای دریافتی ازطریق «کتابخانه خدمات صورتحساب Google Play» را تأیید کنید. اگر
خرید را ظرف سه روز تأیید نکنید، کاربر بهطور خودکار
مبلغ را مسترد میکند و Google Play خرید را لغو میکند. برای تراکنشهای
درانتظار (جدید در نسخه ۲.۰)، پنجره سهروزه زمانی شروع میشود
که خرید به وضعیت PURCHASED منتقل شده باشد و زمانیکه خرید در وضعیت PENDING است
اعمال نمیشود.
برای اشتراکها، باید هر خریدی را که دارای یک کد خرید جدید است تأیید کنید. یعنی همه خریدهای اولیه، تغییرات طرح، و ثبتنامهای مجدد باید تأیید شوند، اما لازم نیست تمدیدهای بعدی را تأیید کنید. برای تعیین اینکه آیا خرید نیاز به تأیید دارد یا نه، میتوانید فیلد تأیید را در خرید بررسی کنید.
شیء Purchase اکنون شامل یک
روش isAcknowledged()
است که نشان میدهد خرید تأیید شده است یا نه. علاوهبراین،
Google Play Developer API شامل مقادیر بولی تأیید برای هر دو
Purchases.products
و
Purchases.subscriptions است.
قبلاز تأیید خرید، حتماً از این روشها استفاده کنید تا مشخص شود که آیا خرید قبلاً تأیید شده است یا نه.
بااستفاده از یکی از روشهای زیر میتوانید خرید را تأیید کنید:
- برای محصولات مصرفی، از
consumeAsync()استفاده کنید که در میانای برنامهسازی کاربردی کارخواه موجود است. - برای محصولاتی که مصرف نمیشوند، از
acknowledgePurchase()استفاده کنید که در میانای برنامهسازی کاربردی کارخواه قرار دارد. - روش
acknowledge()جدیدی نیز در Server API دردسترس است.
BillingFlowParams.setSku() برداشته شده است
روش BillingFlowParams#setSku() که قبلاً منسوخ شده بود در این نسخه برداشته شده است. قبلاز ارائه محصولات در جریان خرید، اکنون باید
BillingClient.querySkuDetailsAsync() را فراخوانی کنید،
و شیء
SkuDetails حاصل را به
BillingFlowParams.Builder.setSkuDetails() ارسال کنید.
برای نمونههای کد، استفاده از کتابخانه خدمات صورتحساب Google Play را ببینید.
بار داده توسعهدهنده پشتیبانی میشود
نسخه ۲.۰ کتابخانه «خدمات صورتحساب Google Play» پشتیبانی از بار داده توسعهدهنده را اضافه میکند—رشتههای دلخواهی که میتوانند به خریدها پیوست شوند. میتوانید پارامتر محموله توسعهدهنده را به خرید پیوست کنید، اما فقط زمانیکه خرید تأیید یا مصرف شده باشد. این با محموله توسعهدهنده در AIDL متفاوت است که در آن محموله را میتوان هنگام راهاندازی جریان خرید مشخص کرد. چون اکنون میتوان خریدها را از خارج از برنامه شروع کرد، این تغییر تضمین میکند که همیشه فرصت دارید تا بار داده به خریدها اضافه کنید.
برای دسترسی به بار در کتابخانه جدید، اشیاء Purchase اکنون شامل یک
روش getDeveloperPayload()
هستند.
پیشنهادهای ویژه سازگار
وقتی SKU تخفیفخوردهای ارائه میدهید، Google Play اکنون قیمت اصلی SKU را برمیگرداند تا بتوانید به کاربران نشان دهید که تخفیف دریافت میکنند.
SkuDetails حاوی دو
روش جدید برای بازیابی قیمت اصلی SKU است:
getOriginalPriceAmountMicros()- قیمت اصلی قالببندینشده SKU را قبلاز تخفیف برمیگرداند.
getOriginalPrice()- قیمت اصلی را با قالببندی واحد پول اضافی برمیگرداند.
تراکنشهای معلق
با نسخه ۲.۰ کتابخانه «خدمات صورتحساب Google Play»، باید از خریدهایی که قبلاز اعطای حق استفاده به اقدام اضافی نیاز دارند پشتیبانی کنید. برای مثال، کاربر ممکن است انتخاب کند که محصول درونبرنامهای شما را در فروشگاهی فیزیکی بااستفاده از پول نقد خریداری کند. این یعنی تراکنش در خارج از برنامه شما تکمیل میشود. در این سناریو، فقط پساز اینکه کاربر تراکنش را تکمیل کرد باید حق استفاده را اعطا کنید.
برای فعال کردن خریدهای معلقه،
enablePendingPurchases()
را بهعنوان بخشی از مقداردهی اولیه برنامهتان فراخوانی کنید.
از
Purchase.getPurchaseState()
استفاده کنید تا مشخص کنید وضعیت خرید PURCHASED است یا PENDING. توجه داشته باشید که
فقط زمانی باید حق استفاده را اعطا کنید که وضعیت PURCHASED باشد. باید
با انجام کارهای زیر، بهروزرسانیهای وضعیت Purchase را بررسی کنید:
- هنگام راهاندازی برنامه،
BillingClient.queryPurchases()را فراخوانی کنید تا فهرست محصولات مصرفنشده مرتبط با کاربر را بازیابی کنید. -
Purchase.getPurchaseState()را در هر شیءPurchaseبرگرداندهشده فراخوانی کنید. - روش
onPurchasesUpdated()را برای پاسخ دادن به تغییرات در اشیایPurchaseپیادهسازی کنید.
علاوهبراین، Google Play Developer API شامل وضعیت PENDING برای
Purchases.products است.
تراکنشهای معلق برای اشتراکها پشتیبانی نمیشود.
این نسخه همچنین نوع جدیدی از اعلان بیدرنگ توسعهدهنده را معرفی میکند،
OneTimeProductNotification. این نوع اعلان حاوی یک پیام است
که مقدار آن ONE_TIME_PRODUCT_PURCHASED یا
ONE_TIME_PRODUCT_CANCELED است. این نوع اعلان فقط برای خریدهای
مرتبط با روشهای پرداخت با تأخیر، مانند پول نقد، ارسال میشود.
هنگام تأیید خریدهای معلقه، حتماً فقط زمانی تأیید کنید که وضعیت خرید PURCHASED باشد و نه PENDING.
تغییرات میانای برنامهسازی کاربردی
نسخه ۲.۰ کتابخانه خدمات صورتحساب Google Play حاوی چندین تغییر در میانای برنامهسازی کاربردی است تا از ویژگیهای جدید پشتیبانی کند و عملکرد موجود را شفافسازی کند.
consumeAsync
consumeAsync()
اکنون بهجای purchaseToken،
شیء ConsumeParams
میگیرد. ConsumeParams حاوی purchaseToken و همچنین بار داده اختیاری توسعهدهنده است.
نسخه قبلی consumeAsync() در این نسخهٔ پخش برداشته شده است.
queryPurchaseHistoryAsync
برای بهحداقل رساندن سردرگمی،
queryPurchaseHistoryAsync()
اکنون بهجای شیء Purchase،
شیء PurchaseHistoryRecord
برمیگرداند. شیء PurchaseHistoryRecord همانند شیء Purchase است، با این تفاوت که فقط مقادیر برگرداندهشده توسط queryPurchaseHistoryAsync() را منعکس میکند و فیلدهای autoRenewing، orderId، و packageName را ندارد. توجه داشته باشید که هیچچیز در دادههای برگرداندهشده تغییر نکرده است—queryPurchaseHistoryAsync() همان دادههای قبلی را برمیگرداند.
مقادیر برگشتی BillingResult
میاناهای برنامهسازی کاربردی که قبلاً مقدار عدد صحیح BillingResponse را برمیگرداندند، اکنون شیء
BillingResult
را برمیگردانند. BillingResult حاوی عدد صحیح BillingResponse و همچنین
رشته اشکالزدایی است که میتوانید از آن برای تشخیص خطاها استفاده کنید. رشته اشکالزدایی از منطقه زبانی en-US استفاده میکند و برای نمایش به کاربران نهایی درنظر گرفته نشده است.
رفع اشکالها
SkuDetails.getIntroductoryPriceAmountMicros()اکنون بهجایString،longرا برمیگرداند.
انتشار نسخه ۱.۲.۲ «کتابخانه خدمات صورتحساب Google Play» (۲۰۱۹/۰۳/۰۷)
نسخه ۱.۲.۲ کتابخانه خدمات صورتحساب Google Play اکنون دردسترس است. این نسخه شامل تغییرات زیر است.
رفع اشکالها
- مشکل رشتهای که در نسخه ۱.۲.۱ ایجاد شده بود برطرف شد. تماسهای پسزمینه دیگر رشته اصلی را مسدود نمیکنند.
تغییرات دیگر
- اگرچه هنوز استفاده از رشته اصلی توصیه میشود، اکنون میتوانید «کتابخانه خدمات صورتحساب Google Play» را از رشته پسزمینه نمونهسازی کنید.
- نمونهسازی بهطور کامل به رشته پسزمینه منتقل شده است تا احتمال ایجاد خطاهای ANR کاهش یابد.
انتشار نسخه ۱.۲.۱ «کتابخانه خدمات صورتحساب Play» (۲۰۱۹/۰۳/۰۴)
نسخه ۱.۲.۱ کتابخانه خدمات صورتحساب Google Play اکنون دردسترس است. این نسخه شامل تغییرات زیر است.
تغییرات عمده
- پشتیبانی از محصولات پاداشدار اضافه شد. برای اطلاعات بیشتر درباره گزینههای درآمدزایی، افزودن ویژگیهای مختص محصول پاداشدار را ببینید.
تغییرات دیگر
- سازندههای عمومی برای
PurchasesResultوSkuDetailsResultاضافه شد تا آزمایش کردن آسانتر شود. -
SkuDetailsشیء میتوانند از روش جدیدی استفاده کنند،getOriginalJson(). - اکنون همه فراخوانیهای سرویس AIDL توسط رشتههای پسزمینه انجام میشود.
رفع اشکالها
- شنوندگان فراخوانی برگشتی تهی دیگر به میاناهای برنامهسازی کاربردی عمومی منتقل نمیشوند.
انتشار نسخه ۱.۲ «کتابخانه خدمات صورتحساب Google Play» (۲۰۱۸/۱۰/۱۸)
نسخه ۱.۲ کتابخانه خدمات صورتحساب Google Play اکنون دردسترس است. این نسخه شامل تغییرات زیر است.
خلاصه تغییرات
- «کتابخانه خدمات صورتحساب Google Play» اکنون تحت قرارداد صدور پروانه کیت توسعه نرمافزار Android پروانه دارد.
-
launchPriceChangeConfirmationFlowAPI اضافه شد که از کاربران میخواهد تغییر معلقه در قیمت اشتراک را مرور کنند. - پشتیبانی از حالت تناسبی جدید،
DEFERRED، هنگام ارتقا یا تنزل اشتراک کاربر اضافه شد. - در کلاس
BillingFlowParams،setSku()باsetSkuDetails()جایگزین شد. - رفع اشکالات جزئی و بهینهسازی کد.
تأیید تغییر قیمت
اکنون میتوانید قیمت اشتراک را در «کنسول Google Play» تغییر دهید و از کاربران بخواهید هنگام ورود به برنامهتان، قیمت جدید را مرور و قبول کنند.
برای استفاده از این API، بااستفاده از
skuDetails محصول اشتراکی، شیء PriceChangeFlowParams ایجاد کنید و سپس
launchPriceChangeConfirmationFlow() را فراخوانی کنید. PriceChangeConfirmationListener را پیادهسازی کنید تا وقتی جریان تأیید تغییر قیمت تمام میشود، نتیجه را مدیریت کند، همانطور که در تکهکد زیر نشان داده شده است:
کاتلین
val priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build() billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, object : PriceChangeConfirmationListener() { override fun onPriceChangeConfirmationResult(responseCode: Int) { // Handle the result. } })
جاوا
PriceChangeFlowParams priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build(); billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, new PriceChangeConfirmationListener() { @Override public void onPriceChangeConfirmationResult(int responseCode) { // Handle the result. } });
جریان تأیید تغییر قیمت کادر گفتگویی حاوی اطلاعات قیمتگذاری جدید را نمایش میدهد و از کاربران میخواهد قیمت جدید را بپذیرند. این جریان کد پاسخی از نوع
BillingClient.BillingResponse
برمیگرداند.
حالت سرشکن کردن جدید
هنگام ارتقا یا تنزل اشتراک کاربر، میتوانید از حالت تناسبی جدیدی
بهنام DEFERRED استفاده کنید. این حالت اشتراک کاربر را در تمدید بعدی بهروز میکند.
برای کسب اطلاعات بیشتر درباره نحوه تنظیم این حالت سرشکن کردن، به تنظیم حالت سرشکن کردن مراجعه کنید.
روش جدید برای تنظیم جزئیات «واحد نگهداری موجودی»
در کلاس BillingFlowParams، روش setSku() منسوخ شده است.
این تغییر برای بهینهسازی جریان «خدمات صورتحساب Google Play» است.
هنگام ساختن نمونه جدیدی از BillingFlowParams در کارخواه خدمات صورتحساب درونبرنامه، توصیه میکنیم که بهجای آن مستقیماً با شیء JSON بااستفاده از setSkuDetails() کار کنید، همانطور که در تکهکد زیر نشان داده شده است:
در کلاس BillingFlowParams Builder، روش setSku() منسوخ شده است. بهجای آن، از روش setSkuDetails() استفاده کنید، همانطور که در تکهکد زیر نشان داده شده است. شیء منتقلشده به شیء setSkuDetails() از روش
querySkuDetailsAsync()
میآید.
کاتلین
private lateinit var mBillingClient: BillingClient private val mSkuDetailsMap = HashMap<String, SkuDetails>() private fun querySkuDetails() { val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder() mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build() ) { responseCode, skuDetailsList -> if (responseCode == 0) { for (skuDetails in skuDetailsList) { mSkuDetailsMap[skuDetails.sku] = skuDetails } } } } private fun startPurchase(skuId: String) { val billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap[skuId]) .build() }
جاوا
private BillingClient mBillingClient; private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>(); private void querySkuDetails() { SkuDetailsParams.Builder skuDetailsParamsBuilder = SkuDetailsParams.newBuilder(); mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(), new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) { if (responseCode == 0) { for (SkuDetails skuDetails : skuDetailsList) { mSkuDetailsMap.put(skuDetails.getSku(), skuDetails); } } } }); } private void startPurchase(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); }
انتشار نسخه ۱.۱ «کتابخانه خدمات صورتحساب Play» (۲۰۱۸/۰۵/۰۷)
نسخه ۱.۱ کتابخانه خدمات صورتحساب Google Play اکنون دردسترس است. این نسخه شامل تغییرات زیر است.
خلاصه تغییرات
- پشتیبانی برای مشخص کردن حالت سرشکن کردن در
BillingFlowParamsهنگام ارتقا/تنزل اشتراک موجود اضافه شد. - پرچم بولی
replaceSkusProrationدرBillingFlowParamsدیگر پشتیبانی نمیشود. درعوض ازreplaceSkusProrationModeاستفاده کنید. launchBillingFlow()اکنون برای پاسخهای ناموفق فراخوانی برگشتی راهاندازی میکند.
تغییرات رفتاری
نسخه ۱.۱ کتابخانه «خدمات صورتحساب Google Play» حاوی تغییرات رفتاری زیر است.
توسعهدهندگان میتوانند replaceSkusProrationMode را در کلاس BillingFlowParams تنظیم کنند
ProrationMode جزئیات بیشتری درباره نوع تناسب هنگام ارتقا یا تنزل اشتراک کاربر ارائه میدهد.
کاتلین
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build()
جاوا
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build();
Google Play از حالتهای تناسبی زیر پشتیبانی میکند:
IMMEDIATE_WITH_TIME_PRORATION |
جایگزینی بلافاصله اعمال میشود و زمان انقضای جدید بهصورت سرشکنشده محاسبه میشود و به حساب کاربر واریز یا از آن کسر میشود. این رفتار پیشفرض فعلی است. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
جایگزینی بلافاصله اعمال میشود و چرخه صورتحساب بدون تغییر باقی میماند. قیمت دوره باقیمانده کسر خواهد شد.
توجه: این گزینه فقط برای ارتقای اشتراک دردسترس است. |
IMMEDIATE_WITHOUT_PRORATION |
جایگزینی فوراً اعمال میشود و قیمت جدید در زمان تکرار بعدی کسر خواهد شد. چرخه صورتحساب ثابت میماند. |
replaceSkusProration دیگر در کلاس BillingFlowParams پشتیبانی نمیشود
توسعهدهندگان قبلاً میتوانستند پرچم بولی را برای کسر مبلغ سرشکنشده برای درخواست ارتقای اشتراک تنظیم کنند. با توجه به اینکه از ProrationMode پشتیبانی میکنیم،
که حاوی دستورالعمل تناسبی دقیقتری است، این پرچم بولی دیگر
پشتیبانی نمیشود.
launchBillingFlow() اکنون برای پاسخهای ناموفق، بازگشت تماس را راهاندازی میکند
«کتابخانه خدمات صورتحساب» همیشه
PurhcasesUpdatedListener
فراخوانی برگشتی را راهاندازی میکند و
BillingResponse
را بهصورت ناهمگام برمیگرداند. مقدار برگشتی همگام
BillingResponse
نیز حفظ میشود.
رفع اشکالها
- وقتی سرویس قطع میشود، بهدرستی از روشهای ناهمگام خارج میشود.
Builderاشیاء param دیگر اشیاء ساختهشده را تغییر نمیدهند.- مشکل ۶۸۰۸۷۱۴۱:
launchBillingFlow()اکنون برای پاسخهای ناموفق، فراخوانی را راهاندازی میکند.
انتشار نسخه ۱.۰ کتابخانه خدمات صورتحساب Google Play (۲۰۱۷/۰۹/۱۹، اعلامیه)
نسخه ۱.۰ کتابخانه خدمات صورتحساب Google Play اکنون دردسترس است. این نسخه شامل تغییرات زیر است.
تغییرات مهم
- اجازه صورتحساب جاسازیشده در مانیفست کتابخانه. دیگر لازم نیست
اجازه
com.android.vending.BILLINGرا در مانیفست Android اضافه کنید. - سازنده جدیدی به کلاس
BillingClient.Builderاضافه شد. - الگوی سازنده برای کلاس
SkuDetailsParamsمعرفی شد تا در روشهای پُرسمان واحدهای نگهداری کالا استفاده شود. - چند روش API برای سازگاری بهروزرسانی شد (نامها و ترتیب آرگومانهای برگشتی یکسان).
تغییرات رفتاری
نسخه ۱.۰ از کتابخانه «خدمات صورتحساب Google Play» حاوی تغییرات رفتاری زیر است.
کلاس BillingClient.Builder
BillingClient.Builder
اکنون ازطریق الگوی newBuilder مقداردهی اولیه میشود:
کاتلین
billingClient = BillingClient.newBuilder(context).setListener(this).build()
جاوا
billingClient = BillingClient.newBuilder(context).setListener(this).build();
روش launchBillingFlow اکنون بااستفاده از کلاس BillingFlowParams فراخوانی میشود
برای شروع جریان صورتحساب برای خرید یا اشتراک،
روش launchBillingFlow() یک نمونه
BillingFlowParams
را که با پارامترهای خاص درخواست مقداردهی اولیه شده است دریافت میکند:
کاتلین
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build() // Then, use the BillingFlowParams to start the purchase flow val responseCode = billingClient.launchBillingFlow(builder.build())
جاوا
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build(); // Then, use the BillingFlowParams to start the purchase flow int responseCode = billingClient.launchBillingFlow(builder.build());
روش جدید برای جستجوی محصولات دردسترس
متغیرهای مستقل برای
روشهای queryPurchaseHistoryAsync() و
querySkuDetailsAsync() در الگوی Builder
گنجانده شدهاند:
کاتلین
val params = SkuDetailsParams.newBuilder() params.setSkusList(skuList) .setType(itemType) billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() { ... })
جاوا
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); params.setSkusList(skuList) .setType(itemType); billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})
اکنون نتیجه ازطریق کد نتیجه و فهرستی از اشیای
SkuDetails
برگردانده میشود، نه کلاس پوشاننده قبلی، تا کارتان راحتتر شود و
در سراسر میانای برنامهسازی کاربردی ما سازگاری وجود داشته باشد:
کاتلین
fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)
جاوا
public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)
ترتیب پارامترها در روش onConsumeResponse() تغییر کرد
ترتیب متغیرهای مستقل برای
onConsumeResponse از
میانای ConsumeResponseListener
تغییر کرده است تا در سراسر میانای برنامهسازی کاربردی ما سازگار باشد:
کاتلین
fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)
جاوا
public void onConsumeResponse(@BillingResponse int responseCode, String outToken)
شیء PurchaseResult بازشده
PurchaseResult
برای سازگاری در سراسر میانای برنامهسازی کاربردی ما باز شده است:
کاتلین
fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)
جاوا
void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)
رفع اشکالها
- کد پاسخ در PURCHASES_UPDATED Bundle وجود ندارد
- رفع مشکلات ProxyBillingActivity و PurchasesUpdatedListener درطول چرخش دستگاه
انتشار پیشنمای توسعهدهندگان نرمافزار ۱ (۲۰۱۷/۰۶/۱۲، اعلامیه)
پیشنمای توسعهدهندگان نرمافزار راهاندازی شد، با هدف سادهسازی فرایند توسعه در زمینه صورتحساب، به توسعهدهندگان اجازه میدهد تلاشهای خود را بر پیادهسازی منطق خاص برنامه Android، مانند معماری برنامه و ساختار پیمایش، متمرکز کنند.
این کتابخانه شامل چندین کلاس و ویژگی مناسب برای استفاده شما هنگام ادغام برنامههای Android با Google Play Billing API است. این کتابخانه همچنین یک لایه انتزاعی روی سرویس «زبان تعریف میانای Android» (AIDL) ارائه میدهد که تعریف کردن میانای بین برنامه و Google Play Billing API را برای توسعهدهندگان آسانتر میکند.