یادداشت‌های انتشار «کتابخانه خدمات صورت‌حساب Google Play»

این سند حاوی یادداشت‌های انتشار برای «کتابخانه خدمات صورت‌حساب Google Play» است.

انتشار نسخه ۹.۱.۰ از «کتابخانه صورت‌حساب Google Play»‏ (‎۲۰۲۶/۰۶/۱۸)

نسخه ۹.۱.۰ از «کتابخانه خدمات صورت‌حساب Google Play» و افزونه‌های Kotlin اکنون دردسترس است.

خلاصه تغییرات

انتشار نسخه ۹.۰.۰ از «کتابخانه صورت‌حساب 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 اکنون دردسترس است.

خلاصه تغییرات

انتشار نسخه ۸.۲.۱ از «کتابخانه صورت‌حساب Google Play»‏ (‎۲۰۲۵/۱۲/۱۵)

نسخه ۸.۲.۱ از «کتابخانه خدمات صورت‌حساب Google Play» و افزونه‌های Kotlin اکنون دردسترس است.

رفع اشکال‌ها

انتشار نسخه ۸.۲.۰ از «کتابخانه صورت‌حساب Google Play»‏ (‎۲۰۲۵/۱۲/۰۹)

نسخه ۸.۲.۰ از «کتابخانه خدمات صورت‌حساب Google Play» و افزونه‌های Kotlin اکنون دردسترس است.

خلاصه تغییرات

انتشار نسخه ۸.۱.۰ از «کتابخانه صورت‌حساب 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 اکنون دردسترس است.

رفع اشکال‌ها

انتشار نسخه ۷.۱.۰ از «کتابخانه خدمات صورت‌حساب Google Play»‏ (۲۰۲۴/۰۹/۱۹)

نسخه ۷.۱.۰ از «کتابخانه خدمات صورت‌حساب Google Play» و افزونه‌های Kotlin اکنون دردسترس است.

خلاصه تغییرات

  • ایمنی رشته بهبودیافته مربوط به وضعیت اتصال و مدیریت.
  • تغییرات جزئی برای آزمایش کدهای پاسخ BillingResult معرفی شد که به‌طور کامل در «کتابخانه خدمات صورت‌حساب Play» نسخه ۷.۱.۱ منتشر شده است. برای آزمایش کردن ادغام بااستفاده از این ویژگی، باید به «کتابخانه خدمات صورت‌حساب Play» نسخه ۷.۱.۱ ارتقا دهید. اشکالی وجود دارد که فقط بر برنامه‌هایی تأثیر می‌گذارد که آزمایش لغو صورت‌حساب در آن‌ها فعال است و بر استفاده معمولی تأثیری ندارد. برای اطلاعات بیشتر، به آزمایش کدهای پاسخ BillingResult مراجعه کنید.

انتشار نسخه ۷.۰.۰ از «کتابخانه صورت‌حساب Google Play»‏ (۲۰۲۴/۰۵/۱۴)

نسخه ۷.۰.۰ «کتابخانه خدمات صورت‌حساب Google Play» و افزونه‌های Kotlin اکنون دردسترس است.

خلاصه تغییرات

انتشار نسخه ۶.۲.۱ از «کتابخانه صورت‌حساب Google Play»‏ (۲۰۲۴/۰۴/۱۶)

نسخه ۶.۲.۱ از «کتابخانه خدمات صورت‌حساب Google Play» و افزونه‌های Kotlin اکنون دردسترس است.

خلاصه تغییرات

انتشار نسخه ۶.۲.۰ از «کتابخانه صورت‌حساب Google Play»‏ (۲۰۲۴/۰۳/۰۶)

نسخه ۶.۲.۰ از «کتابخانه خدمات صورت‌حساب Google Play» و افزونه‌های Kotlin اکنون دردسترس است.

خلاصه تغییرات

انتشار نسخه ۶.۱.۰ از «کتابخانه صورت‌حساب Google Play»‏ (۲۰۲۳/۱۱/۱۴)

نسخه ۶.۱.۰ از «کتابخانه خدمات صورت‌حساب Google Play» و افزونه‌های Kotlin اکنون دردسترس است.

خلاصه تغییرات

انتشار نسخه ۶.۰.۱ «کتابخانه صورت‌حساب Google Play»‏ (۲۰۲۳/۰۶/۲۲)

نسخه ۶.۰.۱ از «کتابخانه خدمات صورت‌حساب Google Play» و افزونه‌های Kotlin اکنون دردسترس است.

خلاصه تغییرات

«کتابخانه خدمات صورت‌حساب Play» را به‌روز کنید تا با Android نسخه ۱۴ سازگار شود.

انتشار نسخه ۶.۰ «کتابخانه خدمات صورت‌حساب Google Play»‏ (۲۰۲۳/۰۵/۱۰)

نسخه ۶.۰.۰ از «کتابخانه خدمات صورت‌حساب Google Play» و افزونه‌های Kotlin اکنون دردسترس است.

خلاصه تغییرات

  • ‫ReplacementMode enum جدیدی برای جایگزینی 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 اکنون دردسترس است.

خلاصه تغییرات

نسخه ۵.۱ «کتابخانه صورت‌حساب Google Play»‏ (۲۰۲۲/۱۰/۳۱)

نسخه ۵.۱.۰ از «کتابخانه خدمات صورت‌حساب Google Play» و افزونه‌های Kotlin اکنون دردسترس است.

این نسخه حاوی تغییرات زیر است.

خلاصه تغییرات

انتشار 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 مراجعه کنید.

خلاصه تغییرات

انتشار «کتابخانه خدمات صورت‌حساب 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 را بررسی کنید:

  1. هنگام راه‌اندازی برنامه، BillingClient.queryPurchases() را فراخوانی کنید تا فهرست محصولات مصرف‌نشده مرتبط با کاربر را بازیابی کنید.
  2. ‫Purchase.getPurchaseState() را در هر شیء Purchase برگردانده‌شده فراخوانی کنید.
  3. روش 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 استفاده می‌کند و برای نمایش به کاربران نهایی درنظر گرفته نشده است.

رفع اشکال‌ها

انتشار نسخه ۱.۲.۲ «کتابخانه خدمات صورت‌حساب Google Play»‏ (۲۰۱۹/۰۳/۰۷)

نسخه ۱.۲.۲ کتابخانه خدمات صورت‌حساب Google Play اکنون دردسترس است. این نسخه شامل تغییرات زیر است.

رفع اشکال‌ها

  • مشکل رشته‌ای که در نسخه ۱.۲.۱ ایجاد شده بود برطرف شد. تماس‌های پس‌زمینه دیگر رشته اصلی را مسدود نمی‌کنند.

تغییرات دیگر

  • اگرچه هنوز استفاده از رشته اصلی توصیه می‌شود، اکنون می‌توانید «کتابخانه خدمات صورت‌حساب Google Play» را از رشته پس‌زمینه نمونه‌سازی کنید.
  • نمونه‌سازی به‌طور کامل به رشته پس‌زمینه منتقل شده است تا احتمال ایجاد خطاهای ANR کاهش یابد.

انتشار نسخه ۱.۲.۱ «کتابخانه خدمات صورت‌حساب Play»‏ (۲۰۱۹/۰۳/۰۴)

نسخه ۱.۲.۱ کتابخانه خدمات صورت‌حساب Google Play اکنون دردسترس است. این نسخه شامل تغییرات زیر است.

تغییرات عمده

تغییرات دیگر

  • سازنده‌های عمومی برای PurchasesResult و SkuDetailsResult اضافه شد تا آزمایش کردن آسان‌تر شود.
  • ‫SkuDetails شیء می‌توانند از روش جدیدی استفاده کنند، getOriginalJson().
  • اکنون همه فراخوانی‌های سرویس AIDL توسط رشته‌های پس‌زمینه انجام می‌شود.

رفع اشکال‌ها

  • شنوندگان فراخوانی برگشتی تهی دیگر به میاناهای برنامه‌سازی کاربردی عمومی منتقل نمی‌شوند.

انتشار نسخه ۱.۲ «کتابخانه خدمات صورت‌حساب Google Play»‏ (۲۰۱۸/۱۰/۱۸)

نسخه ۱.۲ کتابخانه خدمات صورت‌حساب Google Play اکنون دردسترس است. این نسخه شامل تغییرات زیر است.

خلاصه تغییرات

  • «کتابخانه خدمات صورت‌حساب Google Play» اکنون تحت قرارداد صدور پروانه کیت توسعه نرم‌افزار Android پروانه دارد.
  • ‫launchPriceChangeConfirmationFlow API اضافه شد که از کاربران می‌خواهد تغییر معلقه در قیمت اشتراک را مرور کنند.
  • پشتیبانی از حالت تناسبی جدید، 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)

رفع اشکال‌ها

انتشار پیش‌نمای توسعه‌دهندگان نرم‌افزار ۱ (۲۰۱۷/۰۶/۱۲، اعلامیه)

پیش‌نمای توسعه‌دهندگان نرم‌افزار راه‌اندازی شد، با هدف ساده‌سازی فرایند توسعه در زمینه صورت‌حساب، به توسعه‌دهندگان اجازه می‌دهد تلاش‌های خود را بر پیاده‌سازی منطق خاص برنامه Android، مانند معماری برنامه و ساختار پیمایش، متمرکز کنند.

این کتابخانه شامل چندین کلاس و ویژگی مناسب برای استفاده شما هنگام ادغام برنامه‌های Android با Google Play Billing API است. این کتابخانه همچنین یک لایه انتزاعی روی سرویس «زبان تعریف میانای Android» (AIDL) ارائه می‌دهد که تعریف کردن میانای بین برنامه و Google Play Billing API را برای توسعه‌دهندگان آسان‌تر می‌کند.