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

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

الإصدار 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" لتصبح متوافقة مع الإصدار 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 اللذان لهما تم وضع علامة عليها سابقًا على أنّها متوقفة نهائيًا في خدمة "الفوترة في Play" Library 6.0.0. يجب أن يستخدم المطوّرون 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 مكتبة الفوترة وتقديم دعم أفضل للأخطاء.

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

أصبح الإصدار 5.2.1 من Google Play Billing Library وإضافات Kotlin متاحة الآن المتوفرة.

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

يجب تحديث "مكتبة الفوترة في Play" لتصبح متوافقة مع الإصدار 14 من نظام التشغيل Android.

الإصدار 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 متاحة الآن المتوفرة.

يحتوي هذا الإصدار على التغييرات التالية.

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

  • تم تقديم نموذج جديد للاشتراكات، بما في ذلك الكيانات الجديدة يمكنك من إنشاء عروض متعددة منتَج متوفّر عند الاشتراك. لمزيد من المعلومات، يُرجى الاطّلاع على migration guide.
  • تمت الإضافة 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 المتوفرة.

يحتوي هذا الإصدار على التغييرات التالية.

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

الإصدار 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 والإصدارات الأحدث.

الإصدار 3.0.1 من Google Play Billing Library (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.
  • تم إصلاح خطأ التعامل مع تدفق الفوترة على أنه يحتوي على معلَمات إضافية حتى لو لم يتم تعيين معلمات إضافية.

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

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

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

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

الإصدار 2.2.0 من Google Play Billing Library ودعم Unity (23/03/2020)

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

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

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

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

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

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

الإصدار 2.1.0 من مكتبة "الفوترة في Google Play" وإضافة 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".

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

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

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

يتوفّر الآن الإصدار 2.0.2 من مكتبة "الفوترة في Google Play". هذا الإصدار يحتوي على تعديلات على المستندات المرجعية ولا يغيّر المكتبة الأخرى.

الإصدار 2.0.1 من Google Play Billing Library (06/06/2019)

يتوفّر الآن الإصدار 2.0.1 من مكتبة "الفوترة في Google Play". هذا الإصدار على التغييرات التالية.

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

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

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

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

عروض متّسقة

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

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

المعاملات المعلّقة:

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

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

ConumeAsync

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

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

سجلّ الشراء غير متزامن مع طلب البحث

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

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

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

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

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

أصبح الإصدار 1.2.2 من مكتبة "الفوترة في Google Play" متاحًا الآن. هذا الإصدار على التغييرات التالية.

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

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

تغييرات أخرى

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

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

يتوفّر الآن الإصدار 1.2.1 من مكتبة "الفوترة في Google Play". هذا الإصدار على التغييرات التالية.

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

تغييرات أخرى

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

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

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

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

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

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

  • تم ترخيص Google Play Billing Library الآن بموجب اتفاقية ترخيص "حزمة تطوير البرامج لنظام 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()، كما هو موضح في مقتطف الرمز التالي:

في فئة Builder (المنشئ) في BillingFlowParams، تم استخدام الطريقة 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 (07/05/2018)

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

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

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

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

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

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

الإصدار 1.0 من Google Play Billing Library (19-09-2017، إعلان)

يتوفّر الآن الإصدار 1.0 من "مكتبة الفوترة في Google Play". هذا الإصدار على التغييرات التالية.

تغييرات مهمة

  • إذن الفوترة المضمَّن في بيان المكتبة ليس من الضروري إضافة يتوفّر إذن "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();

يُطلق الآن على طريقة launchالفوترةFlow باستخدام فئة 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 Interface Definition Language (AIDL)، ما يسهّل على المطوّرين تحديد الواجهة بين التطبيق وGoogle Play Billing API.