ملاحظات إصدار Google Play Billing Library

يتضمّن هذا المستند ملاحظات الإصدار الخاصة بـ Google Play Billing Library.

الإصدار 9.1.0 من Google Play Billing Library‏ (‎18/06/2026)

يتوفّر الآن الإصدار 9.1.0 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

الإصدار 9.0.0 من Google Play Billing Library‏ (‎19/05/2026)

يتوفّر الآن الإصدار 9.0.0 من Google Play Billing Library وإضافات Kotlin. يُرجى الاطّلاع على دليل نقل البيانات إلى الإصدار 9 من PBL إذا أردت نقل البيانات من الإصدارات السابقة من PBL.

ملخص التغييرات

  • رموز الخطأ المعدَّلة للأنشطة المحظورة على "متجر Google Play": تم تعديل رموز الخطأ للتطبيقات المحظورة على "متجر Google Play". في الحالات التي يحظر فيها النظام تطبيق "متجر Google Play" (على سبيل المثال، في وضع الأطفال المخصّص من قِبل المصنّع الأصلي للجهاز)، تم تغيير رمز الاستجابة من ERROR إلى BILLING_UNAVAILABLE. بالإضافة إلى ذلك، يوفّر BillingResult في مثل هذه الحالات الآن رسالة تصحيح أخطاء تم حظر "متجر Google Play".

  • تعديل على إمكانية قبول القيمة الفارغة في الفوترة التي يوفّرها المطوّر: تم تعديل طريقة DeveloperProvidedBillingDetails.getLinkUri() لتصبح @Nullable. يتيح هذا التغيير التعامل مع الحالات التي لا يتوفّر فيها معرّف الموارد المنتظم (URI) للرابط المباشر لعمليات الدفع الخارجية أثناء مرحلة اختيار طريقة الدفع.

    للتعامل مع هذا التغيير بأمان، تأكَّد من أنّ رمز الدمج يتعامل مع كل من قيمتَي null والسلسلة الفارغة ("") من طريقة DeveloperProvidedBillingDetails.getLinkUri() قبل تحليل أو إطلاق أهداف المتصفّح.

  • تم تعديل targetSdkVersion إلى 35.

  • يمكنك الآن استخدام ميزة المراسلة داخل التطبيق لإعلام المستخدمين بزيادة قادمة في السعر تتطلّب موافقة. يتيح ذلك للمستخدمين تأكيد الزيادة في السعر بدون مغادرة التطبيق. وتظهر رسالة الزيادة في السعر التي تتطلّب موافقة بدءًا من اليوم الأول الذي يمكن للمستخدم فيه قبول الزيادة في السعر، وتظهر الرسالة مرة واحدة كحد أقصى كل 7 أيام.

الإصدار 8.3.0 من Google Play Billing Library‏ (‎23/12/2025)

يتوفّر الآن الإصدار 8.3.0 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

الإصدار 8.2.1 من Google Play Billing Library‏ (‎15/12/2025)

يتوفّر الآن الإصدار 8.2.1 من Google Play Billing Library وإضافات Kotlin.

إصلاح الأخطاء

الإصدار 8.2.0 من Google Play Billing Library‏ (‎09/12/2025)

يتوفّر الآن الإصدار 8.2.0 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

الإصدار 8.1.0 من Google Play Billing Library‏ (‎06/11/2025)

يتوفّر الآن الإصدار 8.1.0 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

  • الاشتراكات المعلّقة

    تمت إضافة مَعلمة جديدة إلى الطريقة BillingClient.queryPurchasesAsync() لتضمين الاشتراكات المعلّقة عند طلب البحث عن الاشتراكات. تظل الاشتراكات المُعلَّقة منسوبة إلى المستخدم، ولكنها غير نشطة، إما لأنّ المستخدم أوقف الاشتراك مؤقتًا أو لأنّ طريقة الدفع لتجديد الاشتراك تم رفضها.

    سيعرض عنصر Purchase الذي تم عرضه في المستمع القيمة isSuspended() = true لأي اشتراكات معلّقة. في هذه الحالة، يجب عدم منح إذن الوصول إلى الاشتراك الذي تم شراؤه، وبدلاً من ذلك، يجب توجيه المستخدم إلى مركز الاشتراكات حيث يمكنه إدارة طُرق الدفع أو حالة الإيقاف المؤقت لإعادة تفعيل الاشتراك.

  • التعديلات على الاشتراكات:

    • يحتوي عنصر BillingFlowParams.ProductDetailsParams الآن على طريقة setSubscriptionProductReplacementParams() التي يمكنك من خلالها تحديد معلومات الاستبدال على مستوى المنتج.

    • يحتوي العنصر SubscriptionProductReplacementParams على طريقتَي ضبط:

      • ‫setOldProductId: المنتج القديم الذي يجب استبداله بالمنتج في ProductDetails الحالي.
      • ‫setReplacementMode: هذا هو وضع الاستبدال على مستوى السلعة. تكون الأوضاع في الأساس مماثلة لـ SubscriptionUpdateParams، ولكن تم تعديل ربط القيمة. تم تقديم وضع استبدال جديد KEEP_EXISTING يتيح لك الاحتفاظ بجدول الدفع الحالي بدون تغيير لأحد العناصر.
    • سيتم إيقاف SubscriptionUpdateParams setSubscriptionReplacementMode نهائيًا. يجب استخدام SubscriptionProductReplacementParams.setReplacementMode بدلاً من ذلك.

  • تم تعديل minSdkVersion إلى 23.

  • تفعيل واجهات برمجة التطبيقات للطلب المُسبَق للمنتجات المدفوعة لمرة واحدة

    أصبحت واجهة برمجة التطبيقات ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails() التي تحصل على تفاصيل الطلب المُسبَق متاحة الآن للاستخدام.

  • تتيح Google Play Billing Library الآن استخدام الإصدار 2.2.0 من Kotlin.

الإصدار 8.0.0 من Google Play Billing Library‏ (‎30/06/2025)

يتوفّر الآن الإصدار 8.0.0 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

  • سيُشار الآن إلى المنتجات داخل التطبيق باسم المنتجات المدفوعة لمرة واحدة.

  • خيارات شراء وعروض متعدّدة للمنتجات المدفوعة لمرة واحدة

    يمكنك الآن توفير خيارات شراء وعروض ترويجية متعددة لمنتجاتك التي يتم تحصيل سعرها مرة واحدة. يمنحك ذلك مرونة في طريقة بيع منتجاتك ويقلّل من تعقيد إدارتها.

  • تم تحسين طريقة queryProductDetailsAsync().

    قبل الإصدار 8.0.0 من PBL، لم تكن الطريقة queryProductDetailsAsync() تعرض المنتجات التي تعذّر جلبها. قد يرجع ذلك إلى أسباب مثل عدم العثور على المنتج أو عدم توفّر عروض للمستخدم. في الإصدار 8.0.0 من PBL، يتم عرض المنتجات التي لم يتم جلبها مع رمز حالة جديد على مستوى المنتج يوفّر معلومات عن هذه المنتجات. يُرجى العِلم أنّه تم تغيير توقيع ProductDetailsResponseListener.onProductDetailsResponse()، ما يتطلّب إجراء تغييرات في تطبيقك. لمزيد من المعلومات، يُرجى الاطّلاع على معالجة النتيجة.

  • إعادة الاتصال بالخدمة تلقائيًا

    تتيح مَعلمة أداة الإنشاء الجديدة BillingClient.Builder.enableAutoServiceReconnection() للمطوّرين الموافقة على إعادة الاتصال بالخدمة تلقائيًا، ما يسهّل إدارة الاتصال من خلال إعادة الاتصال بخدمة "الفوترة في Google 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).

الإصدار 7.1.1 من Google Play Billing Library‏ (‎03/10/2024)

يتوفّر الآن الإصدار 7.1.1 من Google Play Billing Library وإضافات Kotlin.

إصلاح الأخطاء

الإصدار 7.1.0 من Google Play Billing Library‏ (‎19/09/2024)

يتوفّر الآن الإصدار 7.1.0 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

  • تم تحسين أمان سلاسل المحادثات في ما يتعلّق بحالة الاتصال وإدارته.
  • تم إدخال تغييرات جزئية لاختبار رموز الاستجابة BillingResult، والتي تم إصدارها بالكامل في الإصدار 7.1.1 من Play Billing Library. لاختبار عملية الدمج باستخدام هذه الميزة، عليك الترقية إلى الإصدار 7.1.1 من Play Billing Library. هناك خطأ سيؤثر فقط في التطبيقات التي تم تفعيل اختبار تجاوز الفوترة فيها، ولا يؤثر في الاستخدام العادي. لمزيد من المعلومات، يُرجى الاطّلاع على اختبار رموز استجابة BillingResult.

الإصدار 7.0.0 من Google Play Billing Library‏ (‎14/05/2024)

يتوفّر الآن الإصدار 7.0.0 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

الإصدار 6.2.1 من Google Play Billing Library‏ (‎16/04/2024)

يتوفّر الآن الإصدار 6.2.1 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

الإصدار 6.2.0 من Google Play Billing Library‏ (‎06/03/2024)

يتوفّر الآن الإصدار 6.2.0 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

الإصدار 6.1.0 من Google Play Billing Library‏ (‎14/11/2023)

يتوفّر الآن الإصدار 6.1.0 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

الإصدار 6.0.1 من Google Play Billing Library‏ (‎22/06/2023)

يتوفّر الآن الإصدار 6.0.1 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

تحديث Play Billing Library لتصبح متوافقة مع Android 14

الإصدار 6.0 من Google Play Billing Library‏ (‎10/05/2023)

يتوفّر الآن الإصدار 6.0.0 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

  • تمت إضافة تعداد ReplacementMode جديد ليحل محل ProrationMode.

    يُرجى العِلم أنّ السمة ProrationMode لا تزال متاحة لأسباب تتعلق بالتوافق مع الأنظمة القديمة.

  • تمت إزالة معرّف الطلب لعمليات الشراء في PENDING.

    في السابق، كان يتم إنشاء معرّف الطلب دائمًا حتى إذا كانت عملية الشراء في انتظار المراجعة. بدءًا من الإصدار 6.0.0، لن يتم إنشاء معرّف طلب لعمليات الشراء المُعلّقة، وسيتم ملء معرّف الطلب لعمليات الشراء هذه بعد نقل عملية الشراء إلى الحالة PURCHASED.

  • تمّت إزالة الدالتين queryPurchases وlaunchPriceConfirmationFlow.

    تمت الآن إزالة الطريقتَين queryPurchases وlaunchPriceConfirmationFlow اللتين تم وضع علامة عليهما سابقًا باعتبارهما متوقفتَين نهائيًا، وذلك في الإصدار 6.0.0 من Play Billing Library. على المطوّرين استخدام queryPurchasesAsync بدلاً من queryPurchases. للاطّلاع على بدائل launchPriceConfirmationFlow، يُرجى مراجعة التغييرات في الأسعار.

  • تمت إضافة رمز استجابة جديد لخطأ في الشبكة.

    تمت إضافة رمز استجابة جديد لخطأ في الشبكة، وهو NETWORK_ERROR، بدءًا من الإصدار 6.0.0 من PBL. يتم عرض هذا الرمز عند حدوث خطأ بسبب مشكلة في الاتصال بالشبكة. تم الإبلاغ عن أخطاء الاتصال بالشبكة هذه سابقًا على أنّها SERVICE_UNAVAILABLE.

  • تم تعديل SERVICE_UNAVAILABLE و SERVICE_TIMEOUT.

    بدءًا من الإصدار 6.0.0 من PBL، سيتم عرض الأخطاء الناتجة عن انتهاء المهلة في المعالجة على النحو التالي: SERVICE_UNAVAILABLE بدلاً من SERVICE_TIMEOUT الحالي.

    لا يتغيّر السلوك في الإصدارات السابقة من PBL.

  • تمت إزالة SERVICE_TIMEOUT.

    اعتبارًا من الإصدار 6.0.0 من PBL، لن يتم عرض SERVICE_TIMEOUT. وستظل الإصدارات السابقة من واجهة PBL تعرض هذا الرمز.

  • تمت إضافة تسجيل إضافي.

    يتضمّن الإصدار 6 من Play Billing Library ميزة تسجيل إضافية توفّر إحصاءات حول استخدام واجهة برمجة التطبيقات (مثل النجاح والفشل) ومشاكل الاتصال بالخدمة. سيتم استخدام هذه المعلومات لتحسين أداء Play Billing Library وتقديم دعم أفضل للأخطاء.

الإصدار 5.2.1 من Google Play Billing Library‏ (‎22/06/2023)

يتوفّر الآن الإصدار 5.2.1 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

تحديث Play Billing Library لتصبح متوافقة مع Android 14

الإصدار 5.2 من Google Play Billing Library‏ (‎06/04/2023)

يتوفّر الآن الإصدار 5.2.0 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

الإصدار 5.1 من Google Play Billing Library‏ (‎31/10/2022)

يتوفّر الآن الإصدار 5.1.0 من Google Play Billing Library وإضافات Kotlin.

يتضمّن هذا الإصدار التغييرات التالية.

ملخص التغييرات

الإصدار 5.0 من Google Play Billing Library‏ (‎11/05/2022)

يتوفّر الآن الإصدار 5.0.0 من Google Play Billing Library وإضافات Kotlin.

يتضمّن هذا الإصدار التغييرات التالية.

ملخص التغييرات

  • تم تقديم نموذج جديد للاشتراكات، بما في ذلك عناصر جديدة تتيح لك إنشاء عروض متعددة لمنتج واحد متوفّر عند الاشتراك. لمزيد من المعلومات، يُرجى الاطّلاع على دليل نقل البيانات.
  • تمت إضافة BillingClient.queryProductDetailsAsync() لاستبدال BillingClient.querySkuDetailsAsync().
  • تمت إضافة طريقة setIsOfferPersonalized() لمتطلبات الإفصاح عن الأسعار المخصّصة في الاتحاد الأوروبي. لمزيد من المعلومات حول كيفية استخدام هذه الطريقة، يُرجى الاطّلاع على الإشارة إلى سعر مخصّص.
  • تمت إزالة queryPurchases()، الذي تم إيقافه نهائيًا في السابق واستبداله بـ queryPurchasesAsync الذي تم تقديمه في الإصدار 4.0.0 من Google Play Billing Library.
  • تم إيقاف launchPriceChangeFlow نهائيًا وستتم إزالتها في إصدار مستقبلي. لمزيد من المعلومات حول البدائل، يُرجى الاطّلاع على إطلاق مسار تأكيد تغيير السعر.
  • تمت إزالة setVrPurchaseFlow()، التي كانت تُستخدم سابقًا عند إنشاء مسار شراء. في الإصدارات السابقة، كانت هذه الطريقة تعيد توجيه المستخدم لإكمال عملية الشراء على جهازه الذي يعمل بنظام التشغيل Android. بعد إزالة هذه الطريقة، سيكمل المستخدمون عملية الشراء من خلال مسار الشراء العادي.

الإصدار 4.1 من Google Play Billing Library‏ (‎23/02/2022)

يتوفّر الآن الإصدار 4.1.0 من Google Play Billing Library وإضافات Kotlin.

يتضمّن هذا الإصدار التغييرات التالية.

ملخص التغييرات

  • تمت إضافة BillingClient.showInAppMessages() للمساعدة في معالجة حالات رفض دفعات الاشتراك. لمزيد من المعلومات حول كيفية استخدام ميزة "المراسلة داخل التطبيق" لمعالجة حالات رفض دفعات الاشتراكات، يُرجى الاطّلاع على معالجة حالات رفض الدفعات.

الإصدار 4.0 من Google Play Billing Library‏ (‎18/05/2021)

يتوفّر الآن الإصدار 4.0.0 من Google Play Billing Library وإضافات Kotlin.

ملخص التغييرات

الإصدار 3.0.3 من Google Play Billing Library‏ (‎12/03/2021)

يتوفّر الآن الإصدار 3.0.3 من Google Play Billing Library وإضافة Kotlin والمكوّن الإضافي Unity.

إصلاح الأخطاء في Java وKotlin

  • تم إصلاح مشكلة تسرّب الذاكرة عند استدعاء endConnection().
  • تم إصلاح المشكلة التي تحدث عند استخدام Google Play Billing Library في التطبيقات التي تستخدم وضع بدء النشاط الفردي. سيتم تشغيل دالة الاستدعاء onPurchasesUpdated() عند استئناف تشغيل التطبيق من مشغّل تطبيقات Android وكان مربّع حوار الفوترة مرئيًا قبل تعليق التطبيق.

إصلاح الأخطاء في Unity

  • يُرجى التحديث إلى الإصدار 3.0.3 من Java لإصلاح مشكلة تسرُّب الذاكرة وحلّ المشكلة التي تمنع عمليات الشراء عند استئناف تشغيل التطبيق من مشغّل Android وكان مربّع حوار الفوترة مرئيًا قبل تعليقه.

الإصدار 3.0.2 من Google Play Billing Library‏ (‎24/11/2020)

يتوفّر الآن الإصدار 3.0.2 من Google Play Billing Library وإضافة Kotlin.

إصلاح الأخطاء

  • تم إصلاح خلل في إضافة Kotlin حيث يتعذّر تنفيذ الكوروتين مع ظهور الخطأ "تم الاستئناف".
  • تم إصلاح المراجع التي لم يتم حلّها عند استخدام إضافة Kotlin مع الإصدار 1.4 من مكتبة kotlinx.coroutines أو الإصدارات الأحدث.

إصدار Google Play Billing Library 3.0.1‏ (‎30/09/2020)

يتوفّر الآن الإصدار 3.0.1 من Google Play Billing Library وإضافة Kotlin.

إصلاح الأخطاء

  • تم إصلاح خطأ يتعلّق بعدم استدعاء PurchasesUpdatedListener مع نتيجة الشراء في حال إيقاف التطبيق واستعادته أثناء مسار الفوترة.

إصدار Google Play Billing Library 3.0‏ (‎08-06-2020)

يتوفّر الآن الإصدار 3.0.0 من Google Play Billing Library وإضافة Kotlin والمكوّن الإضافي Unity.

ملخص التغييرات

  • تمت إزالة إمكانية استخدام رمز التخزين التعريفي للمنتجات التي تضم مكافآت.
  • تمّت إزالة المَعلمتَين ChildDirected وUnderAgeOfConsent.
  • تمت إزالة طرق الحمولة غير الصالحة للمطوّرين.
  • تمّت إزالة الدالتين BillingFlowParams.setAccountId() وBillingFlowParams.setDeveloperId() اللتين تم إيقافهما نهائيًا.
  • تمّت إزالة الدالتين BillingFlowParams.setOldSkus(String oldSku) وBillingFlowParams.addOldSku(String oldSku) اللتين تم إيقافهما نهائيًا.
  • تمت إضافة تعليقات توضيحية حول إمكانية قبول القيم الفارغة.

إصلاح الأخطاء

  • تعرض الدالة SkuDetails.getIntroductoryPriceCycles() الآن int بدلاً من String.
  • تم إصلاح خلل كان يؤدي إلى التعامل مع مسار الفوترة على أنّه يتضمّن مَعلمات إضافية حتى في حال عدم ضبط أي مَعلمات إضافية.

الإصدار 2.2.1 من Google Play Billing Library‏ (‎20/05/2020)

يتوفّر الآن الإصدار 2.2.1 من Google Play Billing Library.

إصلاح الأخطاء

  • تم تحديث الإصدار التلقائي من مكتبة Java Play Billing التي تعتمد عليها إضافة Kotlin.

إصدار Google Play Billing Library 2.2.0 والتوافق مع Unity‏ (‎23/03/2020)

يوفّر الإصدار 2.2.0 من الفوترة في Google Play وظائف تساعد المطوّرين في التأكّد من أنّ عمليات الشراء منسوبة إلى المستخدم الصحيح. وتغني هذه التغييرات عن الحاجة إلى إنشاء حلول مخصّصة استنادًا إلى حمولة المطوّر. كجزء من هذا التحديث، تم إيقاف وظيفة الحمولة الصالحة للمطوّر نهائيًا وستتم إزالتها في إصدار مستقبلي. لمزيد من المعلومات، بما في ذلك البدائل المقترَحة، يُرجى الاطّلاع على حمولة المطوّر.

الإصدار 2 من Google Play Billing Library لمنصة Unity

بالإضافة إلى إصدارَي Java وKotlin الحاليين من Google Play Billing Library 2، أصدرنا إصدارًا من المكتبة للاستخدام مع Unity. يمكن لمطوّري الألعاب الذين يستخدمون واجهة برمجة التطبيقات Unity In-App Purchase الترقية الآن للاستفادة من جميع ميزات الإصدار 2 من Google Play Billing Library وتسهيل عمليات الترقية اللاحقة إلى الإصدارات المستقبلية من Google Play Billing Library.

لمزيد من المعلومات، يُرجى الاطّلاع على مقالة استخدام خدمة "الفوترة في Google Play" مع Unity.

ملخص التغييرات

الإصدار 2.1.0 من Google Play Billing Library والإصدار 2.1.0 من إضافة Kotlin ‏ (‎10/12/2019)

يتوفّر الآن الإصدار 2.1.0 من Google Play Billing Library وإضافة Kotlin الجديدة. توفّر إضافة Kotlin في Play Billing Library بدائل لواجهة برمجة التطبيقات الاصطلاحية لاستخدام Kotlin، وتتميّز بتوفير أمان أفضل للقيم الفارغة والوظائف المساعدة. للاطّلاع على أمثلة على الرموز البرمجية، يُرجى مراجعة مقالة استخدام Google Play Billing Library.

يتضمّن هذا الإصدار التغييرات التالية.

ملخص التغييرات

  • في BillingFlowParams، تم إيقاف setOldSku(String oldSku) نهائيًا واستبداله بـ setOldSku(String oldSku, String purchaseToken)، لإزالة الغموض عندما تمتلك حسابات متعددة على الجهاز رمز التخزين التعريفي نفسه.

الإصدار 2.0.3 من Google Play Billing Library‏ (‎05-08-2019)

يتوفّر الآن الإصدار 2.0.3 من Google Play Billing Library.

إصلاح الأخطاء

  • تم إصلاح خلل كان يؤدي أحيانًا إلى تعذُّر تنفيذ querySkuDetailsAsync() مع ظهور الرمز DEVELOPER_ERROR بدلاً من عرض نتيجة ناجحة.

الإصدار 2.0.2 من Google Play Billing Library‏ (‎08/07/2019)

يتوفّر الآن الإصدار 2.0.2 من Google Play Billing Library. يتضمّن هذا الإصدار تعديلات على المستندات المرجعية ولا يغيّر وظائف المكتبة.

إصدار Google Play Billing Library 2.0.1‏ (‎06-06-2019)

يتوفّر الآن الإصدار 2.0.1 من Google Play Billing Library. يتضمّن هذا الإصدار التغييرات التالية.

إصلاح الأخطاء

  • تم إصلاح خطأ كان يؤدي إلى عرض رسائل تصحيح الأخطاء على شكل null في بعض الحالات.
  • تم إصلاح مشكلة محتملة في تسرّب الذاكرة.

الإصدار 2.0 من Google Play Billing Library‏ (‎07/05/2019)

يتوفّر الآن الإصدار 2.0 من Google Play Billing Library. يتضمّن هذا الإصدار التغييرات التالية.

يجب إعلامنا باستلام رسوم الاشتراك خلال ثلاثة أيام

يتيح Google Play شراء المنتجات من داخل تطبيقك (داخل التطبيق) أو خارج تطبيقك (خارج التطبيق). لكي يضمن Google Play توفير تجربة شراء متّسقة بغض النظر عن مكان شراء المستخدم لمنتجك، يجب الإقرار بجميع عمليات الشراء التي تتم من خلال Google Play Billing Library في أقرب وقت ممكن بعد منح الإذن للمستخدم. إذا لم يتم الإقرار بإتمام الشراء في غضون ثلاثة أيام، فسيتم ردّ الأموال تلقائيًا إلى المستخدم وسيلغي Google Play عملية الشراء. بالنسبة إلى المعاملات في انتظار المعالجة (ميزة جديدة في الإصدار 2.0)، تبدأ فترة الثلاثة أيام عندما تنتقل عملية الشراء إلى الحالة 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 Billing Library.

توفُّر حمولة المطوّر

يضيف الإصدار 2.0 من Google Play Billing Library ميزة حمولة المطوّر، وهي سلاسل عشوائية يمكن إرفاقها بعمليات الشراء. يمكنك إرفاق مَعلمة حمولة المطوّر بعملية شراء، ولكن فقط عندما يتم تأكيد عملية الشراء أو استهلاكها. ويختلف ذلك عن حمولة المطوّر في AIDL، حيث يمكن تحديد الحمولة عند بدء مسار الشراء. بما أنّه يمكن الآن بدء عمليات الشراء من خارج تطبيقك، يضمن هذا التغيير أن تتاح لك دائمًا فرصة إضافة حمولة إلى عمليات الشراء.

للوصول إلى الحمولة في المكتبة الجديدة، تتضمّن عناصر Purchase الآن طريقة getDeveloperPayload().

العروض المتطابقة

عند تقديم رمز تخزين تعريفي بسعر مخفَّض، يعرض Google Play الآن السعر الأصلي لرمز التخزين التعريفي حتى تتمكّن من إظهار الخصم للمستخدمين.

يحتوي SkuDetails على طريقتَين جديدتَين لاسترداد سعر رمز التخزين التعريفي الأصلي:

  • getOriginalPriceAmountMicros()
    • تعرض السعر الأصلي غير المنسَّق لرمز التخزين التعريفي قبل الخصم.
  • getOriginalPrice()
    • تعرض السعر الأصلي مع تنسيق إضافي للعملة.

المعاملات غير المكتملة

باستخدام الإصدار 2.0 من Google Play Billing Library، يجب إتاحة عمليات الشراء التي تتطلّب اتخاذ إجراء إضافي قبل منح الإذن. على سبيل المثال، قد يختار المستخدم شراء منتج داخل التطبيق من متجر باستخدام النقود. وهذا يعني أنّ المعاملة تكتمل خارج تطبيقك. في هذا السيناريو، يجب منح الإذن فقط بعد أن يكمل المستخدم المعاملة.

لتفعيل عمليات الشراء المُعلّقة، يمكنك استدعاء 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.

التغييرات في واجهة برمجة التطبيقات

يحتوي الإصدار 2.0 من Google Play Billing Library على عدة تغييرات في واجهة برمجة التطبيقات لإتاحة ميزات جديدة وتوضيح الوظائف الحالية.

consumeAsync

تتطلّب السمة consumeAsync() الآن استخدام عنصر ConsumeParams بدلاً من purchaseToken. يحتوي ConsumeParams على purchaseToken بالإضافة إلى حمولة اختيارية للمطوّر.

تمت إزالة الإصدار السابق من "consumeAsync()" في هذا الإصدار.

queryPurchaseHistoryAsync

لتقليل الالتباس، يعرض queryPurchaseHistoryAsync() الآن عنصر PurchaseHistoryRecord بدلاً من عنصر Purchase. يتطابق العنصر PurchaseHistoryRecord مع العنصر Purchase، إلا أنّه يعكس فقط القيم التي تعرضها السمة queryPurchaseHistoryAsync() ولا يحتوي على الحقول autoRenewing وorderId وpackageName. يُرجى العِلم أنّه لم يتم إجراء أي تغييرات على البيانات التي يتم عرضها، إذ تعرض queryPurchaseHistoryAsync() البيانات نفسها كما في السابق.

القيم المعروضة من BillingResult

إنّ واجهات برمجة التطبيقات التي كانت تعرض في السابق قيمة عدد صحيح BillingResponse تعرض الآن عنصر BillingResult. يحتوي BillingResult على العدد الصحيح BillingResponse بالإضافة إلى سلسلة تصحيح الأخطاء التي يمكنك استخدامها لتشخيص الأخطاء. تستخدم سلسلة تصحيح الأخطاء اللغة الإنجليزية (الولايات المتحدة) ولا يُفترض أن تظهر للمستخدمين النهائيين.

إصلاح الأخطاء

الإصدار 1.2.2 من Google Play Billing Library‏ (‎07-03-2019)

يتوفّر الآن الإصدار 1.2.2 من Google Play Billing Library. يتضمّن هذا الإصدار التغييرات التالية.

إصلاح الأخطاء

  • تم إصلاح مشكلة في سلاسل المحادثات ظهرت في الإصدار 1.2.1. لم تعد المكالمات في الخلفية تحظر سلسلة التعليمات الرئيسية.

تغييرات أخرى

  • على الرغم من أنّه لا يزال من المستحسن استخدام سلسلة التعليمات الرئيسية، يمكنك الآن إنشاء مثيل لـ Google Play Billing Library من سلسلة تعليمات في الخلفية.
  • تم نقل عملية إنشاء مثيل بالكامل إلى سلسلة التعليمات في الخلفية لتقليل احتمالية حدوث أخطاء ANR.

الإصدار 1.2.1 من Play Billing Library‏ (‎2019-03-04)

يتوفّر الآن الإصدار 1.2.1 من Google Play Billing Library. يتضمّن هذا الإصدار التغييرات التالية.

التغييرات الرئيسية

تغييرات أخرى

  • تمت إضافة دوال إنشائية عامة لكل من PurchasesResult وSkuDetailsResult لتسهيل عملية الاختبار.
  • يمكن لعناصر SkuDetails استخدام طريقة جديدة، وهي getOriginalJson().
  • تتم الآن معالجة جميع طلبات خدمة AIDL من خلال سلاسل محادثات في الخلفية.

إصلاح الأخطاء

  • لم يعُد يتم تمرير مستمعي عمليات الاستدعاء الفارغة إلى واجهات برمجة التطبيقات العامة.

الإصدار 1.2 من Google Play Billing Library‏ (‎18-10-2018)

يتوفّر الآن الإصدار 1.2 من Google Play Billing Library. يتضمّن هذا الإصدار التغييرات التالية.

ملخص التغييرات

  • أصبحت Google Play Billing Library مرخَّصة الآن بموجب اتفاقية ترخيص حزمة تطوير البرامج (SDK) لنظام التشغيل Android.
  • تمت إضافة واجهة برمجة التطبيقات launchPriceChangeConfirmationFlow التي تطلب من المستخدمين مراجعة تغيير معلَّق في سعر الاشتراك.
  • تمت إضافة وضع جديد للنسبة والتناسب، وهو DEFERRED، عند ترقية اشتراك المستخدم أو الرجوع إلى إصدار سابق.
  • في الفئة BillingFlowParams، تم استبدال setSku() بـ setSkuDetails().
  • تم إصلاح أخطاء بسيطة وتحسين الرموز البرمجية.

تأكيد تغيير السعر

يمكنك الآن تغيير سعر الاشتراك في Google Play Console ومطالبة المستخدمين بمراجعة السعر الجديد وقبوله عند دخولهم إلى تطبيقك.

لاستخدام واجهة برمجة التطبيقات هذه، أنشئ عنصر PriceChangeFlowParams باستخدام skuDetails للمنتج المتوفّر عند الاشتراك، ثم استدعِ launchPriceChangeConfirmationFlow(). نفِّذ PriceChangeConfirmationListener لمعالجة النتيجة عند انتهاء مسار تأكيد تغيير السعر، كما هو موضّح في مقتطف الرمز التالي:

Kotlin

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                // Handle the result.
            }
        })

Java

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. يؤدي هذا الوضع إلى تعديل اشتراك المستخدم عند تجديده في المرة التالية. لمزيد من المعلومات حول كيفية ضبط وضع التناسب هذا، يُرجى الاطّلاع على ضبط وضع التناسب.

طريقة جديدة لضبط تفاصيل رمز التخزين التعريفي

تم إيقاف الطريقة setSku() نهائيًا في الفئة BillingFlowParams. يهدف هذا التغيير إلى تحسين مسار الفوترة في Google Play.

عند إنشاء مثيل جديد من BillingFlowParams في برنامج الفوترة داخل التطبيق، ننصحك بالعمل مع كائن JSON مباشرةً باستخدام setSkuDetails()، كما هو موضّح في مقتطف الرمز التالي:

في فئة BillingFlowParams Builder، تم إيقاف الطريقة setSku() نهائيًا. بدلاً من ذلك، استخدِم طريقة setSkuDetails()، كما هو موضّح في مقتطف الرمز التالي. يأتي العنصر الذي تم تمريره إلى عنصر setSkuDetails() من الإجراء querySkuDetailsAsync().

Kotlin

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()
}

Java

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();
}

الإصدار 1.1 من Play Billing Library‏ (‎2018-05-07)

يتوفّر الآن الإصدار 1.1 من Google Play Billing Library. يتضمّن هذا الإصدار التغييرات التالية.

ملخص التغييرات

  • تمت إضافة ميزة تتيح تحديد وضع التناسب في BillingFlowParams عند ترقية اشتراك حالي أو الرجوع إلى إصدار سابق.
  • لم تعُد العلامة المنطقية replaceSkusProration في BillingFlowParams متاحة. يمكنك استخدام replaceSkusProrationMode كبديل.
  • يؤدي launchBillingFlow() الآن إلى تشغيل معاودة الاتصال للردود التي تعذّر إرسالها.

التغييرات في السلوك

يتضمّن الإصدار 1.1 من Google Play Billing Library التغييرات التالية في السلوك.

يمكن للمطوّرين ضبط replaceSkusProrationMode في فئة BillingFlowParams

يوفّر ProrationMode مزيدًا من التفاصيل حول نوع التناسب عند ترقية اشتراك المستخدم أو الرجوع إلى إصدار سابق.

Kotlin

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build()

Java

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() الآن إلى معاودة الاتصال في حال تعذُّر الردود

ستشغّل Billing Library دائمًا دالة الاستدعاء PurhcasesUpdatedListener وتعرض BillingResponse بشكل غير متزامن. يتم أيضًا الاحتفاظ بالقيمة المعروضة المتزامنة لـ BillingResponse.

إصلاح الأخطاء

  • يتم الخروج بشكل صحيح مبكرًا في الطرق غير المتزامنة عند قطع اتصال الخدمة.
  • Builder لم تعد كائنات param تغيّر الكائنات التي تم إنشاؤها.
  • المشكلة 68087141: يتم الآن تشغيل معاودة الاتصال في launchBillingFlow() للاستجابات التي تعذّر إجراؤها.

الإصدار 1.0 من Google Play Billing Library (تاريخ الإصدار: ‎19/09/2017، إشعار)

يتوفّر الآن الإصدار 1.0 من Google Play Billing Library. يتضمّن هذا الإصدار التغييرات التالية.

تغييرات مهمة

  • إذن الفوترة المضمّن داخل بيان المكتبة لم يعُد من الضروري إضافة إذن com.android.vending.BILLING داخل ملف بيان Android.
  • تمت إضافة أداة إنشاء جديدة إلى الفئة BillingClient.Builder.
  • تم تقديم نمط أداة الإنشاء لفئة SkuDetailsParams ليتم استخدامه في طرق طلب البحث عن رموز التخزين التعريفية.
  • تم تعديل العديد من طُرق واجهة برمجة التطبيقات لتحقيق الاتساق (أسماء وترتيب وسيطات الإرجاع نفسها).

التغييرات في السلوك

يتضمّن الإصدار 1.0 من Google Play Billing Library التغييرات التالية في السلوك.

فئة BillingClient.Builder

BillingClient.Builder يتم الآن إعداده من خلال نمط newBuilder:

Kotlin

billingClient = BillingClient.newBuilder(context).setListener(this).build()

Java

billingClient = BillingClient.newBuilder(context).setListener(this).build();

يتم الآن استدعاء طريقة launchBillingFlow باستخدام فئة BillingFlowParams

لبدء مسار الفوترة لعملية شراء أو اشتراك، تتلقّى الطريقة launchBillingFlow() مثيل BillingFlowParams الذي تم إعداده باستخدام مَعلمات خاصة بالطلب:

Kotlin

BillingFlowParams.newBuilder().setSku(skuId)
        .setType(billingType)
        .setOldSku(oldSku)
        .build()

// Then, use the BillingFlowParams to start the purchase flow
val responseCode = billingClient.launchBillingFlow(builder.build())

Java

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() في نمط "أداة الإنشاء":

Kotlin

val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList)
        .setType(itemType)
billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() {
    ...
})

Java

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList)
        .setType(itemType);
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})

يتم الآن عرض النتيجة من خلال رمز النتيجة وقائمة من عناصر SkuDetails بدلاً من فئة برنامج تضمين السابقة لراحتك ولتحقيق الاتساق في واجهة برمجة التطبيقات:

Kotlin

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

Java

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

تم تغيير ترتيب المَعلمات في طريقة onConsumeResponse()

تم تغيير ترتيب الوسيطات لـ onConsumeResponse من واجهة ConsumeResponseListener لتكون متسقة في جميع واجهات برمجة التطبيقات:

Kotlin

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

Java

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

عنصر PurchaseResult غير مغلَّف

PurchaseResult تم إلغاء التفافها لتكون متسقة في جميع واجهات برمجة التطبيقات:

Kotlin

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

Java

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

إصلاح الأخطاء

الإصدار 1 من معاينة المطوّر (12-06-2017، الإعلان)

تم إطلاق معاينة المطوّر بهدف تبسيط عملية التطوير في ما يتعلق بالفوترة، ما يتيح للمطوّرين تركيز جهودهم على تنفيذ المنطق الخاص بتطبيق Android، مثل بنية التطبيق وبنية التنقّل.

تتضمّن المكتبة العديد من الفئات والميزات المناسبة التي يمكنك استخدامها عند دمج تطبيقات Android مع Google Play Billing API. وتوفّر المكتبة أيضًا طبقة تجريد فوق خدمة لغة تعريف واجهة نظام Android‏ (AIDL)، ما يسهّل على المطوّرين تحديد الواجهة بين التطبيق وواجهة الفوترة في Google Play API.