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

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

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

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

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

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

نسخه ۹.۰.۰ «کتابخانه خدمات صورت‌حساب Google Play» و افزونه‌های Kotlin اکنون دردسترس است. اگر می‌خواهید از نسخه‌های قبلی «کتابخانه خدمات صورت‌حساب Play» انتقال دهید، راهنمای انتقال PBL 9 را ببینید.

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

  • کدهای خطای به‌روزشده برای فعالیت مسدودشده «فروشگاه Play»: کدهای خطا برای برنامه‌های مسدودشده «فروشگاه Play» به‌روز شده است. برای مواردی که برنامه «فروشگاه Play» توسط سیستم مسدود شده است (برای مثال، در حالت کودک سفارشی‌سازی‌شده توسط سازنده تجهیزات اصلی)، کد پاسخ از ERROR به BILLING_UNAVAILABLE تغییر کرده است. علاوه‌براین، BillingResult برای چنین مواردی اکنون پیام اشکال‌زدایی فروشگاه Play مسدود است ارائه می‌دهد.

  • به‌روزرسانی قابلیت تهی بودن برای صورت‌حساب ارائه‌شده توسط توسعه‌دهنده: روش DeveloperProvidedBillingDetails.getLinkUri() به‌روزرسانی شده است تا @Nullable باشد. این تغییر از سناریوهایی پشتیبانی می‌کند که در آن‌ها نشانی وب پیوند مستقیم برای پرداخت‌های خارجی در مرحله انتخاب پرداخت دردسترس نیست.

    برای مدیریت ایمن این تغییر، مطمئن شوید کد یکپارچه‌سازی شما مقادیر 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 نسخه ۸.۰.۰، روش 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 14 سازگار باشد.

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

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

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

  • ‫enum جدید ReplacementMode برای جایگزینی ProrationMode اضافه شد.

    توجه داشته باشید که ProrationMode همچنان برای سازگاری با نسخه‌های قدیمی دردسترس است.

  • شناسه سفارش برای PENDING خرید برداشته شد.

    قبلاً، شناسه سفارش همیشه ایجاد می‌شد حتی اگر خرید در حالت معلقه بود. از نسخه ۶.۰.۰، شناسه سفارش برای خریدهای معلقه ایجاد نخواهد شد و برای این خریدها، شناسه سفارش پس‌از انتقال خرید به وضعیت PURCHASED تکمیل خواهد شد.

  • ‫queryPurchases و launchPriceConfirmationFlow روش برداشته شد.

    روش‌های queryPurchases و launchPriceConfirmationFlow که قبلاً به‌عنوان منسوخ علامت‌گذاری شده بودند اکنون در «کتابخانه خدمات پرداخت Play» نسخه ۶.۰.۰ برداشته شده‌اند. توسعه‌دهندگان باید به‌جای queryPurchases از queryPurchasesAsync استفاده کنند. برای launchPriceConfirmationFlow جایگزین، به تغییرات قیمت مراجعه کنید.

  • کد پاسخ خطای شبکه جدید اضافه شد.

    کد پاسخ خطای شبکه جدیدی، NETWORK_ERROR، از نسخه ۶.۰.۰ «کتابخانه خدمات صورت‌حساب Play» اضافه شده است. این کد زمانی برگردانده می‌شود که خطایی به‌دلیل مشکل اتصال شبکه رخ دهد. این خطاهای اتصال شبکه قبلاً به‌عنوان SERVICE_UNAVAILABLE گزارش شده است.

  • به‌روزرسانی‌شده در SERVICE_UNAVAILABLE و SERVICE_TIMEOUT.

    از نسخه ۶.۰.۰ «کتابخانه تبلیغات پلاتفرم» (PBL) شروع می‌شود، خطاهای ناشی از اتمام زمان پردازش به‌صورت SERVICE_UNAVAILABLE به‌جای SERVICE_TIMEOUT فعلی برگردانده می‌شود.

    این رفتار در نسخه‌های قبلی «کتابخانه خدمات صورت‌حساب Play» تغییر نمی‌کند.

  • برداشته شد SERVICE_TIMEOUT.

    از نسخه ۶.۰.۰ «کتابخانه خدمات صورت‌حساب Play»، SERVICE_TIMEOUT دیگر برگردانده نخواهد شد. نسخه‌های قبلی «کتابخانه خدمات صورت‌حساب Play» همچنان این کد را برمی‌گردانند.

  • گزارش‌گیری اضافی اضافه شد.

    نسخه ۶ «کتابخانه خدمات صورت‌حساب Play» شامل گزارش‌گیری اضافی است که اطلاعات آماری درباره استفاده از API (مثل موفقیت و شکست) و مشکلات اتصال سرویس ارائه می‌دهد. از این اطلاعات برای بهبود عملکرد «کتابخانه خدمات صورت‌حساب Play» و ارائه پشتیبانی بهتر برای خطاها استفاده خواهد شد.

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

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

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

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

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

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

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

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

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

این نسخه شامل تغییرات زیر است.

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

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

نسخه ۵.۰.۰ «کتابخانه خدمات صورت‌حساب 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.queryPurchases() که در نسخهٔ پخش بعدی برداشته خواهد شد BillingClient.queryPurchasesAsync() اضافه شد.

  • حالت جایگزینی اشتراک جدید 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

  • برای رفع مشکل نشت حافظه و حل مشکل جلوگیری از خرید وقتی برنامه از راه‌انداز Android ازسر گرفته می‌شود و کادر گفتگوی صورت‌حساب قبل‌از تعلیق قابل مشاهده بوده است، به نسخه ۳.۰.۳ Java به‌روزرسانی کنید.

انتشار «کتابخانه خدمات صورت‌حساب 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 منتشر کردیم. توسعه‌دهندگان بازی که از API خرید درون‌برنامه Unity استفاده می‌کنند می‌توانند اکنون ارتقا دهند تا از همه ویژگی‌های «کتابخانه خدمات صورت‌حساب Google Play 2» بهره‌مند شوند و ارتقاهای بعدی به نسخه‌های آینده «کتابخانه خدمات صورت‌حساب Google Play» را آسان‌تر کنند.

برای کسب اطلاعات بیشتر، استفاده از «خدمات صورت‌حساب Google Play» با Unity را ببینید.

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

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

نسخه ۲.۱.۰ کتابخانه «خدمات صورت‌حساب Google Play» و افزونه جدید Kotlin اکنون دردسترس است. افزونه Kotlin «کتابخانه خدمات صورت‌حساب Play» جایگزین‌های اصطلاحی API برای مصرف Kotlin ارائه می‌دهد که ایمنی بهتر دربرابر تهی بودن و روال‌های هم‌زمان را ارائه می‌دهد. برای نمونه‌های کد، به استفاده از کتابخانه خدمات صورت‌حساب Google Play مراجعه کنید.

این نسخه شامل تغییرات زیر است.

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

  • در BillingFlowParams، setOldSku(String oldSku) منسوخ شده است و با setOldSku(String oldSku, String purchaseToken) جایگزین شده است تا در مواقعی که چندین حساب در دستگاه مالک یک sku یکسان هستند، ابهام‌زدایی شود.

انتشار «کتابخانه خدمات صورت‌حساب 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» شامل مقادیر بولی تأیید برای هر دو Purchases.products و Purchases.subscriptions است. قبل‌از تأیید خرید، حتماً از این روش‌ها برای تعیین اینکه آیا خرید قبلاً تأیید شده است یا خیر استفاده کنید.

می‌توانید خرید را بااستفاده از یکی از روش‌های زیر تأیید کنید:

  • برای محصولات مصرفی، از consumeAsync() که در API کارخواه یافت می‌شود استفاده کنید.
  • برای محصولاتی که مصرف نمی‌شوند، از acknowledgePurchase() که در میانای برنامه‌سازی کاربردی مشتری یافت می‌شود استفاده کنید.
  • روش جدید acknowledge() نیز در «میانای برنامه‌سازی کاربردی سرور» دردسترس است.

‫BillingFlowParams.setSku() برداشته شده است

روش BillingFlowParams#setSku() که قبلاً منسوخ شده بود در این نسخه پخش برداشته شده است. اکنون قبل‌از پرداز کردن محصولات در جریان خرید، باید BillingClient.querySkuDetailsAsync() را فراخوانی کنید و SkuDetails شیء حاصل را به BillingFlowParams.Builder.setSkuDetails() ارسال کنید.

برای نمونه‌های کد، به استفاده از کتابخانه خدمات صورت‌حساب Google Play مراجعه کنید.

از محتوای توسعه‌دهنده پشتیبانی می‌شود

نسخه ۲.۰ کتابخانه «خدمات صورت‌حساب Google Play» از بار توسعه‌دهنده—رشته‌های اختیاری که می‌توانند به خریدها پیوست شوند—پشتیبانی می‌کند. می‌توانید پارامتر داده‌بار توسعه‌دهنده را به خرید پیوست کنید، اما فقط زمانی که خرید تأیید یا مصرف شود. این مورد برخلاف داده‌بار توسعه‌دهنده در AIDL است که در آن داده‌بار می‌تواند هنگام راه‌اندازی جریان خرید مشخص شود. ازآنجایی‌که اکنون می‌توان خریدها را از خارج از برنامه شما شروع کرد، این تغییر تضمین می‌کند که همیشه فرصت اضافه کردن بار به خریدها را داشته باشید.

برای دسترسی به محتوای مفید در کتابخانه جدید، اشیای Purchase اکنون شامل getDeveloperPayload() روش است.

پیشنهادهای ویژه سازگار

وقتی واحد نگهداری کالای تخفیف‌خورده‌ای ارائه می‌کنید، Google Play اکنون قیمت اصلی واحد نگهداری کالا را برمی‌گرداند تا بتوانید به کاربران نشان دهید که تخفیف دریافت می‌کنند.

‫SkuDetails شامل دو روش جدید برای بازیابی قیمت «واحد نگهداری موجودی» اصلی است:

  • getOriginalPriceAmountMicros()
    • قیمت اصلی قالب‌بندی‌نشده واحد نگهداری کالا را قبل‌از تخفیف برمی‌گرداند.
  • getOriginalPrice()
    • قیمت اصلی را با قالب‌بندی اضافی واحد پول برمی‌گرداند.

تراکنش‌های معلق

با نسخه ۲.۰ کتابخانه «خدمات صورت‌حساب Google Play»، باید از خریدهایی که قبل‌از اعطای حق مالکیت نیاز به اقدام اضافی دارند پشتیبانی کنید. برای مثال، کاربر ممکن است انتخاب کند که محصول درون‌برنامه‌ای شما را در فروشگاه فیزیکی با پول نقد خریداری کند. این یعنی تراکنش خارج از برنامه شما تکمیل می‌شود. در این سناریو، باید حق استفاده را فقط پس‌از تکمیل تراکنش توسط کاربر اعطا کنید.

برای فعال کردن خریدهای معلقه، enablePendingPurchases() را به‌عنوان بخشی از مقداردهی اولیه برنامه خود فراخوانی کنید.

از Purchase.getPurchaseState() برای تعیین اینکه وضعیت خرید PURCHASED یا PENDING است استفاده کنید. توجه داشته باشید که فقط زمانی باید حق مالکیت اعطا کنید که وضعیت PURCHASED باشد. باید با انجام مراحل زیر، به‌روزرسانی‌های وضعیت Purchase را بررسی کنید:

  1. هنگام شروع برنامه، BillingClient.queryPurchases() را فراخوانی کنید تا فهرست محصولات مصرف‌نشده مرتبط با کاربر را بازیابی کنید.
  2. ‫Purchase.getPurchaseState() را روی هر شیء Purchase برگشتی فراخوانی کنید.
  3. برای پاسخ دادن به تغییرات در Purchase شیء، روش onPurchasesUpdated() را پیاده‌سازی کنید.

علاوه‌براین، 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 توسط رشته‌های پس‌زمینه مدیریت می‌شود.

رفع اشکال‌ها

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

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

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

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

  • «کتابخانه خدمات صورت‌حساب Google Play» اکنون تحت قرارداد پروانه «کیت توسعه نرم‌افزار Android» پروانه‌دار شده است.
  • میانای برنامه‌سازی کاربردی launchPriceChangeConfirmationFlow اضافه شد که از کاربران می‌خواهد تغییر معلقه قیمت اشتراک را بررسی کنند.
  • پشتیبانی از حالت سرشکن جدیدی، 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 اشیا پارامتر دیگر اشیا ساخته‌شده را تغییر نمی‌دهد.
  • مسئله ۶۸۰۸۷۱۴۱: launchBillingFlow() اکنون برای پاسخ‌های ناموفق پاسخ‌گویی راه‌اندازی می‌کند.

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

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

تغییرات مهم

  • اجازه صورت‌حساب جاسازی‌شده در مانیفست کتابخانه. دیگر لازم نیست اجازه com.android.vending.BILLING را در مانیفست Android اضافه کنید.
  • سازنده جدیدی به کلاس BillingClient.Builder اضافه شد.
  • الگوی سازنده برای کلاس SkuDetailsParams معرفی شد تا در روش‌های پُرسمان واحدهای SKU استفاده شود.
  • چندین روش «میانای برنامه‌سازی کاربردی» برای یکپارچگی به‌روزرسانی شد (نام‌ها و ترتیب آرگومان برگشتی یکسان).

تغییرات رفتار

نسخه ۱.۰ کتابخانه خدمات صورت‌حساب 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() در الگوی «سازنده» پیچیده شده است:

کاتلین

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 اشیا به‌جای کلاس بسته‌بندی قبلی برای راحتی شما و برای یکسان بودن در سراسر API ما برگردانده می‌شود:

کاتلین

fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)

جاوا

public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)

ترتیب پارامترها در روش onConsumeResponse() تغییر کرد

ترتیب آرگومان‌های onConsumeResponse از ConsumeResponseListener میانای برنامه تغییر کرده است تا در سراسر API ما یکسان باشد:

کاتلین

fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)

جاوا

public void onConsumeResponse(@BillingResponse int responseCode, String outToken)

شیء «نتیجه خرید» بازشده

PurchaseResult برای یکسان بودن در سراسر میانای برنامه‌سازی کاربردی ما، ازپیچیده شده است:

کاتلین

fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)

جاوا

void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)

رفع اشکال‌ها

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

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

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