ملاحظات إصدار 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. راجِع دليل نقل البيانات إلى الإصدار 9 من PBL إذا كنت تريد نقل البيانات من الإصدارات السابقة من PBL.

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

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

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

    للتعامل مع هذا التغيير بأمان، تأكَّد من أنّ رمز الدمج يتعامل مع القيمتَين 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 الآن مع الإصدار 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 Billing Library. هناك خطأ سيؤثّر فقط في التطبيقات التي تم تفعيل اختبار عمليات إلغاء الفوترة فيها، ولن يؤثّر في الاستخدام العادي. لمزيد من المعلومات، يُرجى الاطّلاع على اختبار رموز الاستجابة 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 لكي تتوافق مع الإصدار 14 من نظام التشغيل Android

إصدار الإصدار 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، بدءًا من الإصدار 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. ستستمر الإصدارات السابقة من مكتبة الفوترة في 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 لكي تتوافق مع الإصدار 14 من نظام التشغيل Android

إصدار 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.

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

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

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

إصدار الإصدار 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 مع نتيجة الشراء في حال إيقاف التطبيق وإعادة تشغيله أثناء عملية الفوترة.

إصدار الإصدار 3.0 من Google Play Billing Library (‫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 Billing Library.

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

  • تم تعديل الإصدار التلقائي من مكتبة 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 Billing Library وتسهيل عمليات الترقية اللاحقة إلى الإصدارات المستقبلية من Google Play Billing Library.

لمزيد من المعلومات، يُرجى الاطّلاع على استخدام خدمة "الفوترة في 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 بدائل لواجهة برمجة التطبيقات بلغة 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 Billing Library.

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

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

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

إصدار Google Play Billing Library 2.0 (‎07-05-2019)

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

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

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

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 Billing Library. يتضمّن هذا الإصدار التغييرات التالية.

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

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

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

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

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

إصدار Google Play Billing Library 1.0 ‏ (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)

Unwrapped PurchaseResult object

تمت إزالة التغليف عن 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.