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

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

نسخه ۷.۱.۱ کتابخانه صورت‌حساب Google Play (03-10-2024)

نسخه 7.1.1 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

رفع اشکال

کتابخانه صورت‌حساب Google Play نسخه ۷.۱.۰ (۱۹/۰۹/۲۰۲۴)

نسخه 7.1.0 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

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

کتابخانه صورت‌حساب Google Play نسخه ۷.۰.۰ (۱۴-۰۵-۲۰۲۴)

نسخه 7.0.0 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

کتابخانه صورت‌حساب Google Play نسخه 6.2.1 انتشار (16-04-2024)

نسخه 6.2.1 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

کتابخانه صورت‌حساب Google Play نسخه 6.2.0 (06-03-2024)

نسخه 6.2.0 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

کتابخانه صورت‌حساب Google Play نسخه 6.1.0 (14-11-2023)

نسخه 6.1.0 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

Google Play Billing Library نسخه 6.0.1 انتشار (22/06/2023)

نسخه 6.0.1 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

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

Google Play Billing Library نسخه 6.0 (10-05-2023)

نسخه 6.0.0 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

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

    لطفاً توجه داشته باشید که ProrationMode به دلایل سازگاری با گذشته همچنان در دسترس است.

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

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

  • روش‌های queryPurchases و launchPriceConfirmationFlow حذف شدند.

    روش‌های queryPurchases و launchPriceConfirmationFlow که قبلاً به‌عنوان منسوخ علامت‌گذاری شده بودند، اکنون در Play Billing Library نسخه 6.0.0 حذف شده‌اند. توسعه دهندگان باید به جای queryPurchases از queryPurchasesAsync استفاده کنند. برای گزینه های launchPriceConfirmationFlow ، تغییرات قیمت را ببینید.

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

    کد پاسخ به خطای شبکه جدید، NETWORK_ERROR ، با شروع نسخه 6.0.0 PBL اضافه شده است. این کد زمانی که خطایی به دلیل مشکل اتصال شبکه رخ می دهد، برگردانده می شود. این خطاهای اتصال شبکه قبلاً به عنوان SERVICE_UNAVAILABLE گزارش شده بود.

  • SERVICE_UNAVAILABLE و SERVICE_TIMEOUT به روز شد.

    با شروع نسخه 6.0.0 PBL، خطاهای ناشی از مهلت زمانی در پردازش به جای SERVICE_TIMEOUT فعلی به عنوان SERVICE_UNAVAILABLE برگردانده می شود.

    رفتار در نسخه های قبلی PBL تغییر نمی کند.

  • SERVICE_TIMEOUT حذف شد.

    با شروع نسخه 6.0.0 PBL، SERVICE_TIMEOUT دیگر برگردانده نخواهد شد. نسخه های قبلی PBL همچنان این کد را برمی گرداند.

  • ورود به سیستم اضافی اضافه شده است.

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

کتابخانه صورت‌حساب Google Play نسخه 5.2.1 انتشار (22/06/2023)

نسخه 5.2.1 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

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

نسخه 5.2 کتابخانه صورت‌حساب Google Play (06-04-2023)

نسخه 5.2.0 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

نسخه 5.1 کتابخانه صورت‌حساب Google Play (31-10-2022)

نسخه 5.1.0 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

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

نسخه 5.0 کتابخانه صورت‌حساب Google Play (11-05-2022)

نسخه 5.0.0 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

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

  • یک مدل جدید برای اشتراک‌ها، از جمله موجودیت‌های جدیدی که شما را قادر می‌سازد چند پیشنهاد برای یک محصول اشتراک ایجاد کنید، معرفی کرد. برای اطلاعات بیشتر، راهنمای مهاجرت را ببینید.
  • BillingClient.queryProductDetailsAsync() اضافه شد تا جایگزین BillingClient.querySkuDetailsAsync() شود.
  • روش setIsOfferPersonalized() برای الزامات افشای قیمت شخصی اتحادیه اروپا اضافه شد. برای کسب اطلاعات بیشتر در مورد نحوه استفاده از این روش، به نشان دادن قیمت شخصی مراجعه کنید.
  • queryPurchases() حذف کرد که قبلاً منسوخ شده بود و با queryPurchasesAsync که در کتابخانه صورت‌حساب Google Play نسخه 4.0.0 معرفی شده بود جایگزین شد.
  • launchPriceChangeFlow منسوخ شده است و در نسخه بعدی حذف خواهد شد. برای کسب اطلاعات بیشتر درباره گزینه‌های جایگزین، به راه‌اندازی جریان تأیید تغییر قیمت مراجعه کنید.
  • setVrPurchaseFlow() حذف کرد، که قبلاً برای نمونه سازی جریان خرید استفاده می شد. در نسخه‌های قبلی، این روش کاربر را برای تکمیل خرید در دستگاه اندرویدی خود هدایت می‌کرد. پس از حذف این روش، کاربران خرید را از طریق جریان خرید استاندارد تکمیل خواهند کرد.

نسخه 4.1 کتابخانه صورت‌حساب Google Play (23/02/2022)

نسخه 4.1.0 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

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

  • BillingClient.showInAppMessages() اضافه شد تا به مدیریت رد پرداخت اشتراک کمک کند. برای آشنایی بیشتر با نحوه استفاده از پیام‌رسانی درون‌برنامه برای رسیدگی به رد پرداخت اشتراک‌ها، به مدیریت رد پرداخت مراجعه کنید.

نسخه 4.0 کتابخانه صورت‌حساب Google Play (18-05-2021)

نسخه 4.0.0 کتابخانه صورت‌حساب Google Play و افزونه‌های Kotlin اکنون در دسترس هستند.

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

Google Play Billing Library نسخه 3.0.3 انتشار (12-03-2021)

نسخه 3.0.3 کتابخانه صورت‌حساب Google Play، افزونه Kotlin و افزونه Unity اکنون در دسترس هستند.

رفع اشکال جاوا و کاتلین

  • هنگام فراخوانی endConnection() نشت حافظه را برطرف کنید.
  • مشکل زمانی که کتابخانه صورت‌حساب Google Play توسط برنامه‌هایی که از حالت راه‌اندازی تک کار استفاده می‌کنند، استفاده می‌شود، برطرف کنید. هنگامی که یک برنامه از راه‌انداز Android از سر گرفته شود و گفتگوی صورت‌حساب قبل از تعلیق قابل مشاهده باشد، یک تماس پاسخ onPurchasesUpdated() فعال می‌شود.

رفع اشکال Unity

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

Google Play Billing Library نسخه 3.0.2 انتشار (24-11-2020)

نسخه 3.0.2 کتابخانه صورت‌حساب Google Play و افزونه Kotlin اکنون در دسترس هستند.

رفع اشکال

  • رفع یک اشکال در برنامه افزودنی Kotlin که در آن Coroutine با خطای "Already Resumed" از کار می افتد.
  • هنگامی که پسوند Kotlin با کتابخانه kotlinx.coroutines نسخه 1.4+ استفاده می شود، مراجع حل نشده رفع شد.

Google Play Billing Library نسخه 3.0.1 انتشار (30-09-2020)

نسخه 3.0.1 کتابخانه صورت‌حساب Google Play و افزونه Kotlin اکنون در دسترس هستند.

رفع اشکال

  • رفع اشکالی که در آن اگر برنامه در طول جریان صورت‌حساب حذف و بازیابی شود، ممکن است PurchasesUpdatedListener با نتیجه خرید فراخوانی نشود.

Google Play Billing Library نسخه 3.0 (08-06-2020)

نسخه 3.0.0 کتابخانه صورت‌حساب Google Play، افزونه Kotlin و افزونه Unity اکنون در دسترس هستند.

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

  • پشتیبانی SKU با پاداش حذف شد.
  • پارامترهای ChildDirected و UnderAgeOfConsent حذف شدند.
  • روش‌های بارگذاری منسوخ برنامه‌نویس حذف شد.
  • روش‌های منسوخ BillingFlowParams.setAccountId() و BillingFlowParams.setDeveloperId() حذف شد.
  • روش‌های منسوخ BillingFlowParams.setOldSkus(String oldSku) و BillingFlowParams.addOldSku(String oldSku) حذف شد.
  • حاشیه نویسی پوچ پذیری اضافه شده است.

رفع اشکال

  • اکنون SkuDetails.getIntroductoryPriceCycles() int به جای String برمی گرداند.
  • رفع اشکالی که در آن جریان صورت‌حساب دارای پارامترهای اضافی تلقی می‌شود، حتی اگر هیچ پارامتر اضافی تنظیم نشده باشد.

کتابخانه صورت‌حساب Google Play نسخه 2.2.1 انتشار (2020-05-20)

نسخه 2.2.1 کتابخانه صورت‌حساب Google Play اکنون در دسترس است.

رفع اشکال

  • نسخه پیش‌فرض کتابخانه Java Play Billing را که افزونه Kotlin به آن وابسته است، به‌روزرسانی کرد.

انتشار نسخه 2.2.0 کتابخانه صورت‌حساب Google Play و پشتیبانی Unity (23-03-2020)

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

Google Play Billing Billing Library 2 for Unity

علاوه بر نسخه‌های جاوا و کوتلین فعلی Google Play Billing Library 2، نسخه‌ای از کتابخانه را برای استفاده با Unity منتشر کردیم. توسعه‌دهندگان بازی که از API خرید درون‌برنامه‌ای Unity استفاده می‌کنند، می‌توانند برای استفاده از همه ویژگی‌های Google Play Billing Library 2 و ارتقای بعدی به نسخه‌های بعدی کتابخانه صورت‌حساب Google Play، آن را ارتقا دهند.

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

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

Google Play Billing Library 2.1.0 Release و Kotlin Extension 2.1.0 Release (2019-12-10)

نسخه 2.1.0 کتابخانه صورت‌حساب Google Play و افزونه جدید Kotlin اکنون در دسترس هستند. برنامه افزودنی Play Billing Library Kotlin جایگزین‌های API اصطلاحی را برای مصرف Kotlin ارائه می‌کند که دارای ایمنی تهی و برنامه‌های مشترک بهتری است. برای مثال کد، استفاده از کتابخانه صورت‌حساب Google Play را ببینید.

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

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

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

Google Play Billing Library نسخه 2.0.3 انتشار (05-08-2019)

نسخه 2.0.3 کتابخانه صورت‌حساب Google Play اکنون در دسترس است.

رفع اشکال

  • رفع اشکالی که در آن querySkuDetailsAsync() گهگاه با کد DEVELOPER_ERROR به جای بازگرداندن یک نتیجه موفق، شکست می خورد.

Google Play Billing Library 2.0.2 انتشار (08-07-2019)

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

Google Play Billing Library نسخه 2.0.1 انتشار (06-06-2019)

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

رفع اشکال

  • رفع اشکالی که در آن پیام‌های اشکال‌زدایی در برخی موارد به عنوان null برگردانده می‌شدند.
  • مشکل احتمالی نشت حافظه برطرف شد.

Google Play Billing Library نسخه 2.0 (07-05-2019)

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

خرید باید ظرف سه روز تایید شود

Google Play از خرید محصولات از داخل برنامه شما (داخل برنامه) یا خارج از برنامه شما (خارج از برنامه) پشتیبانی می کند. برای اینکه Google Play بدون توجه به اینکه کاربر محصول شما را از کجا خریداری می‌کند، از تجربه خرید ثابتی مطمئن شود، باید پس از اعطای حق به کاربر، در اسرع وقت تمام خریدهای دریافت شده از طریق کتابخانه صورت‌حساب Google Play را تأیید کنید. اگر ظرف سه روز خریدی را تأیید نکنید، کاربر به طور خودکار بازپرداخت دریافت می‌کند و Google Play خرید را لغو می‌کند. برای تراکنش‌های معلق (جدید در نسخه 2.0)، پنجره سه روزه زمانی شروع می‌شود که خرید به حالت PURCHASED منتقل شده باشد و در زمانی که خرید در حالت PENDING است اعمال نمی‌شود.

برای اشتراک، باید هر خریدی را که دارای نشانه خرید جدید است، تأیید کنید. این بدان معنی است که همه خریدهای اولیه، تغییرات طرح و ثبت نام مجدد باید تایید شوند، اما نیازی به تایید تمدیدهای بعدی ندارید. برای تعیین اینکه آیا یک خرید نیاز به تأیید دارد یا خیر، می توانید قسمت تأیید را در خرید بررسی کنید.

شی Purchase اکنون شامل یک متد isAcknowledged() است که نشان می دهد آیا خرید تایید شده است یا خیر. علاوه بر این، Google Play Developer API شامل مقادیر بولی تایید برای Purchases.products و Purchases.subscriptions است. قبل از تأیید خرید، حتماً از این روش‌ها استفاده کنید تا مشخص کنید آیا خرید قبلاً تأیید شده است یا خیر.

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

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

BillingFlowParams.setSku() حذف شده است

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

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

بار برنامه‌نویس پشتیبانی می‌شود

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

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

پیشنهادات ثابت

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

SkuDetails شامل دو روش جدید برای بازیابی قیمت اصلی SKU است:

معاملات معلق

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

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

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

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

علاوه بر این، Google Play Developer API شامل وضعیت PENDING برای Purchases.products است. تراکنش های معلق برای اشتراک ها پشتیبانی نمی شوند.

این نسخه همچنین یک نوع اعلان برنامه‌نویس بلادرنگ، OneTimeProductNotification را معرفی می‌کند. این نوع اعلان حاوی یک پیام واحد است که مقدار آن ONE_TIME_PRODUCT_PURCHASED یا ONE_TIME_PRODUCT_CANCELED است. این نوع اعلان فقط برای خریدهای مرتبط با اشکال پرداخت با تاخیر ارسال می‌شود، مانند پول نقد.

هنگام تأیید خریدهای معلق، مطمئن شوید که فقط زمانی که وضعیت خرید PURCHASED است و نه PENDING تأیید کنید.

API تغییر می کند

نسخه 2.0 کتابخانه صورت‌حساب Google Play شامل چندین تغییر API برای پشتیبانی از ویژگی‌های جدید و شفاف‌سازی عملکرد موجود است.

ConsumeAsync

consumeAsync() اکنون یک شی ConsumeParams به جای purchaseToken می گیرد. ConsumeParams شامل purchaseToken و همچنین یک بار توسعه دهنده اختیاری است.

نسخه قبلی consumeAsync() در این نسخه حذف شده است.

queryPurchaseHistoryAsync

برای به حداقل رساندن سردرگمی، queryPurchaseHistoryAsync() اکنون یک شی PurchaseHistoryRecord به جای یک شی Purchase برمی گرداند. شیء PurchaseHistoryRecord همان شیء Purchase است، با این تفاوت که فقط مقادیر بازگردانده شده توسط queryPurchaseHistoryAsync() را نشان می دهد و حاوی فیلدهای autoRenewing ، orderId و packageName نیست. توجه داشته باشید که هیچ چیز با داده های برگشتی تغییر نکرده است queryPurchaseHistoryAsync() همان داده های قبلی را برمی گرداند.

BillingResult مقادیر را برمی گرداند

APIهایی که قبلاً یک مقدار صحیح BillingResponse برمی‌گرداندند، اکنون یک شی BillingResult برمی‌گردانند. BillingResult شامل عدد صحیح BillingResponse و همچنین یک رشته اشکال زدایی است که می توانید از آن برای تشخیص خطاها استفاده کنید. رشته اشکال‌زدایی از محلی en-US استفاده می‌کند و قرار نیست به کاربران نهایی نشان داده شود.

رفع اشکال

کتابخانه صورت‌حساب Google Play نسخه 1.2.2 انتشار (07-03-2019)

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

رفع اشکال

  • رفع مشکل threading معرفی شده در نسخه 1.2.1. تماس‌های پس‌زمینه دیگر رشته اصلی را مسدود نمی‌کنند.

تغییرات دیگر

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

Play Billing Library 1.2.1 انتشار (04-03-2019)

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

تغییرات عمده

تغییرات دیگر

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

رفع اشکال

  • شنوندگان پاسخ به تماس تهی دیگر به APIهای عمومی منتقل نمی شوند.

نسخه 1.2 کتابخانه صورت‌حساب Google Play (18-10-2018)

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

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

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

روش جدید برای تنظیم جزئیات SKU

در کلاس BillingFlowParams ، متد setSku() منسوخ شده است. این تغییر برای بهینه‌سازی جریان صورت‌حساب Google Play است.

هنگام ساختن یک نمونه جدید از BillingFlowParams در سرویس گیرنده صورت‌حساب درون‌برنامه‌ای خود، توصیه می‌کنیم در عوض با استفاده از setSkuDetails() مستقیماً با شی JSON کار کنید، همانطور که در قطعه کد زیر نشان داده شده است:

در کلاس 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 Billing Library نسخه 1.1 (07-05-2018)

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

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

  • پشتیبانی اضافه شده برای مشخص کردن حالت proration در BillingFlowParams هنگام ارتقا/کاهش اشتراک موجود.
  • پرچم بولین replaceSkusProration در BillingFlowParams دیگر پشتیبانی نمی‌شود. به جای آن از replaceSkusProrationMode استفاده کنید.
  • launchBillingFlow() اکنون برای پاسخ‌های ناموفق یک تماس برگشتی ایجاد می‌کند.

تغییر رفتار

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

توسعه دهندگان می توانند replaceSkusProrationMode در کلاس BillingFlowParams تنظیم کنند

یک ProrationMode جزئیات بیشتری در مورد نوع proration در هنگام ارتقا یا کاهش اشتراک کاربر ارائه می دهد.

کاتلین

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 پشتیبانی می کنیم که حاوی دستورالعمل های proration دقیق تری است، این پرچم بولی دیگر پشتیبانی نمی شود.

launchBillingFlow() اکنون برای پاسخ‌های ناموفق یک تماس برگشتی ایجاد می‌کند

کتابخانه صورتحساب همیشه پاسخ تماس PurhcasesUpdatedListener را راه اندازی می کند و BillingResponse به صورت ناهمزمان برمی گرداند. مقدار بازگشتی همزمان BillingResponse نیز حفظ می شود.

رفع اشکال

  • هنگامی که سرویس قطع می شود، به درستی در روش های ناهمگام خارج می شود.
  • Builder param objects دیگر اشیاء ساخته شده را تغییر نمی دهد.
  • شماره 68087141 : launchBillingFlow() اکنون برای پاسخ های ناموفق پاسخ تماس را راه اندازی می کند.

انتشار 1.0 کتابخانه صورت‌حساب Google Play (19-09-2017، اطلاعیه )

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

تغییرات مهم

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

تغییر رفتار

نسخه 1.0 کتابخانه صورت‌حساب 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 به جای کلاس wrapper قبلی برای راحتی شما و برای سازگاری در 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 unwrapped

PurchaseResult برای سازگاری با API ما باز شده است:

کاتلین

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

جاوا

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

رفع اشکال

پیش‌نمایش برنامه‌نویس 1 انتشار (12-06-2017، اطلاعیه )

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

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