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

يحتوي هذا المستند على ملاحظات الإصدار الخاصة بمكتبة Google Play Billing Library.

إصدار Google Play Billing Library 9.1.0‏ (‎18-06-2026)

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

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

إصدار Google Play Billing Library 9.0.0 (‎19-05-2026)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

إصدار Google Play Billing Library 8.1.0‏ (‎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.

إصدار Google Play Billing Library 8.0.0‏ (‎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() الجديدة للمطوّرين الموافقة على إعادة الاتصال التلقائي بالخدمة، ما يسهّل إدارة الاتصال من خلال التعامل مع عمليات إعادة الاتصال بـ "خدمة الفوترة في 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 Billing Library 7.1.1 ‏ (03/10/2024)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

إصدار Google Play Billing Library 6.0.1‏ (‎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. على المطوّرين استخدام queryPurchasesAsync بدلاً من queryPurchases. للاطّلاع على بدائل launchPriceConfirmationFlow، يُرجى الرجوع إلى تغييرات الأسعار.

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

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

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

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

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

  • تمت إزالة SERVICE_TIMEOUT.

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

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

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

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

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

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

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

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

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

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

إصدار Google Play Billing Library 5.1 ‏ (‎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. بعد إزالة طريقة الدفع هذه، سيُكمل المستخدمون عملية الشراء من خلال مسار الشراء العادي.

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

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

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

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

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

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

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

  • تمت إضافة BillingClient.queryPurchasesAsync() لاستبدال BillingClient.queryPurchases() التي ستتم إزالتها في إصدار مستقبلي.

  • تمت إضافة وضع جديد لاستبدال الاشتراك IMMEDIATE_AND_CHARGE_FULL_PRICE.

  • تمت إضافة طريقة BillingClient.getConnectionState() لاسترداد حالة الاتصال في Play Billing Library.

  • تم تعديل 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 Billing Library 3.0.3 (‫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 وظهور مربّع حوار الفوترة قبل تعليقه.

إصدار Google Play Billing Library 3.0.2 ‏ (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.
  • تم إصلاح الخطأ الذي كان يؤدي إلى التعامل مع مسار الفوترة على أنّه يتضمّن مَعلمات إضافية، حتى إذا لم يتم ضبط أي مَعلمات إضافية.

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

يتوفّر الآن الإصدار 2.2.1 من مكتبة الفوترة في Google Play.

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

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

إصدار Google Play Billing Library 2.2.0 وإتاحة استخدامها في Unity (‫23/03/2020)

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

‫الفوترة في Google Play Billing Library 2 for Unity

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

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

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

إصدار Google Play Billing Library 2.1.0 وإصدار إضافة Kotlin 2.1.0 (‫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)، وذلك لتجنُّب الغموض عند امتلاك عدة حسابات على الجهاز لمعرّف التخزين التعريفي نفسه.

إصدار 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 في بعض الحالات.
  • تم إصلاح مشكلة محتملة في تسرب الذاكرة.

إصدار الإصدار 2.0 من "مكتبة الفوترة في Google Play" (‎2019-05-07)

يتوفّر الآن الإصدار 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 طريقتَين جديدتَين لاسترداد سعر رمز التخزين التعريفي الأصلي:

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

في الإصدار 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 العديد من التغييرات في واجهة برمجة التطبيقات بهدف توفير ميزات جديدة وتوضيح الوظائف الحالية.

consumeAsync

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

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

queryPurchaseHistoryAsync

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

قيم الإرجاع BillingResult

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

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

إصدار Google Play Billing Library 1.2.2 (‫07-03-2019)

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

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

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

تغييرات أخرى

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

إصدار Play Billing Library 1.2.1 (‫04-03-2019)

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

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

تغييرات أخرى

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

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

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

إصدار Google Play Billing Library 1.2 (‫18-10-2018)

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

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

  • أصبح ترخيص "مكتبة الفوترة في Google Play" الآن بموجب اتفاقية ترخيص حزمة تطوير البرامج لنظام 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. يعدّل هذا الوضع اشتراك المستخدم عند تجديده في المرة التالية. لمزيد من المعلومات حول كيفية ضبط وضع التناسب هذا، يُرجى الاطّلاع على ضبط وضع التناسب.

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

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

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

تم إيقاف الطريقة setSku() نهائيًا في فئة BillingFlowParams Builder. بدلاً من ذلك، استخدِم طريقة 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();
}

إصدار Play Billing Library 1.1 (‫07-05-2018)

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

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

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

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

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

يمكن للمطوّرين ضبط 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() الآن إلى تشغيل دالة ردّ لعمليات الردّ التي تعذّر إكمالها

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

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

  • الخروج بشكل صحيح في وقت مبكر من الطرق غير المتزامنة عند قطع الاتصال بالخدمة
  • لم يعُد يتم تغيير الكائنات المضمّنة في كائنات المعلمات Builder.
  • المشكلة 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 تغييرات السلوك التالية.

فئة 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() في نمط Builder:

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. توفّر المكتبة أيضًا طبقة تجريد فوق خدمة &quot;لغة تعريف واجهة Android&quot; (AIDL)، ما يسهّل على المطوّرين تحديد الواجهة بين التطبيق وGoogle Play Billing API.