يحتوي هذا المستند على ملاحظات الإصدار الخاصة بمكتبة Google Play Billing Library.
إصدار 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()الآن حقل رمز الاستجابة الفرعية. لن يتم ملء هذا الحقل إلا في بعض الحالات لتقديم سبب أكثر تحديدًا لتعذُّر إكمال العملية. في الإصدار 8.0.0 من مكتبة Play Billing، يتم عرض الرمز الفرعي PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS في حال كانت أموال المستخدم أقل من سعر المنتج الذي يحاول شراءه.تمت إزالة طريقة
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.
إصلاح الأخطاء
- تم إصلاح خطأ في الإصدار 7.1.0 من Play Billing Library مرتبط برموز الاستجابة الخاصة بالاختبار
BillingResult.
إصدار Google Play Billing Library 7.1.0 (19/09/2024)
يتوفّر الآن الإصدار 7.1.0 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
- تحسين أمان سلاسل التعليمات المتعلّقة بحالة الاتصال وإدارته
- تم طرح تغييرات جزئية لاختبار رموز الاستجابة [
BillingResult][billing-result] التي تم إصدارها بالكامل في الإصدار 7.1.1 من Play Billing Library. لاختبار عملية الدمج باستخدام هذه الميزة، عليك الترقية إلى الإصدار 7.1.1 من مكتبة Play Billing. هناك خطأ سيؤثّر فقط في التطبيقات التي [تم تفعيل اختبار عمليات إلغاء الفوترة فيها][enable-billing-overrides-testing]، ولن يؤثّر في الاستخدام العادي. لمزيد من المعلومات، يُرجى الاطّلاع على اختبارBillingResultرموز الاستجابة. [billing-result]: /reference/com/android/billingclient/api/BillingResult [enable-billing-overrides-testing]: /google/play/billing/test-response-codes#enable-billing-overrides-testing
إصدار Google Play Billing Library 7.0.0 (14/05/2024)
يتوفّر الآن الإصدار 7.0.0 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
تمت إضافة واجهات برمجة تطبيقات لإتاحة الاشتراكات بالتقسيط.
- تمت إضافة [
ProductDetails.InstallmentPlanDetails][installment-details] للخطط الأساسية التي تتيح الدفع بالتقسيط والمؤهَّل المستخدمون لشرائها. تساعد واجهة برمجة التطبيقات هذه تطبيقك في تحديد خطة التقسيط وإعدادات الالتزام بها من أجل تقديم معلومات ذات صلة للمستخدم. لمزيد من المعلومات، يُرجى الاطّلاع على [دليل أقساط الاشتراك][installments]. [installment-details]: /reference/com/android/billingclient/api/ProductDetails.InstallmentPlanDetails [installments]: /google/play/billing/subscriptions#installments
- تمت إضافة [
تمت إضافة
PendingPurchasesParamsوBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)ليحلّا محلBillingClient.Builder.enablePendingPurchases()الذي تم إيقافه نهائيًا في هذا الإصدار.- إنّ الدالة
enablePendingPurchases()المتوقّفة نهائيًا تعادل وظيفيًا الدالةenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).
- إنّ الدالة
تمت إضافة واجهات برمجة تطبيقات لدعم المعاملات المعلّقة لخطط الاشتراك المدفوعة مسبقًا:
- استخدِم
PendingPurchasesParams.Builder.enablePrepaidPlans()معBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)لتفعيل المعاملات في انتظار المعالجة لخطط الدفع المُسبَق للاشتراك. عند إضافة الدعم، تأكَّد من أنّ تطبيقك يدير أيضًا بشكل صحيح دورات حياة الاشتراك. لمزيد من المعلومات، يُرجى الاطّلاع على دليل عمليات الشراء المعلّقة. - تمت إضافة
Purchase.PendingPurchaseUpdateوPurchase.getPendingPurchaseUpdate()لاسترداد عملية التعبئة أو الترقية أو الرجوع إلى إصدار سابق من الاشتراك الحالي.
- استخدِم
تمت إزالة
BillingClient.Builder.enableAlternativeBilling()وAlternativeBillingListenerوAlternativeChoiceDetails.- على المطوّرين استخدام
BillingClient.Builder.enableUserChoiceBilling()معUserChoiceBillingListenerوUserChoiceDetailsفي دالة معاودة الاتصال الخاصة بالمستمع بدلاً من ذلك.
- على المطوّرين استخدام
تمت إزالة
BillingFlowParams.ProrationModeوBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()وBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode(). - على المطوّرين استخدامBillingFlowParams.SubscriptionUpdateParams.ReplacementModeمعBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)بدلاً من ذلك. -BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode(). -BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode().تمت إزالة
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken(). - على المطوّرين استخدامBillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String)بدلاً من ذلك.تم إيقاف
BillingClient.queryPurchaseHistoryAsync()نهائيًا وستتم إزالته في إصدار مستقبلي. على المطوّرين استخدام البدائل التالية بدلاً من ذلك:- عمليات الشراء التي تمّت الموافقة عليها والتي لا تزال في انتظار المراجعة: استخدِم
BillingClient.queryPurchasesAsync()لجلب عمليات الشراء النشطة. - عمليات الشراء التي تم استهلاكها: على المطوّرين تتبُّع عمليات الشراء التي تم استهلاكها على خوادمهم.
- عمليات الشراء الملغاة: استخدِم واجهة برمجة التطبيقات voided-purchases الخاصة بالمطوّرين.
- لمزيد من التفاصيل، يُرجى الاطّلاع على الاستعلام عن سجلّ عمليات الشراء.
- عمليات الشراء التي تمّت الموافقة عليها والتي لا تزال في انتظار المراجعة: استخدِم
يؤدي استخدام
BillingFlowParams.ProductDetailsParams.setOfferToken()الآن إلى ظهور استثناء عندما يحدّد المطوّرون قيمة فارغة لـofferToken.تم تعديل
minSdkVersionإلى 21 وtargetSdkVersionإلى 34.
إصدار Google Play Billing Library 6.2.1 (16/04/2024)
يتوفّر الآن الإصدار 6.2.1 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
- تم إصلاح خطأ في
BillingClient.showAlternativeBillingOnlyInformationDialog()حيث قد لا يتم استدعاءAlternativeBillingOnlyInformationDialogListenerفي حالات معيّنة عند اكتمال مربع الحوار.
إصدار Google Play Billing Library 6.2.0 (06/03/2024)
يتوفّر الآن الإصدار 6.2.0 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
- تمت إضافة واجهات برمجة تطبيقات لدعم العروض الترويجية الخارجية
- تمت إضافة
BillingClient.Builder.enableExternalOffer()لإتاحة إمكانية تقديم عروض ترويجية خارجية. - تمت إضافة
BillingClient.isExternalOfferAvailableAsync()للتحقّق من إمكانية توفير وظيفة العروض الخارجية. - تمت إضافة
BillingClient.showExternalOfferInformationDialog()لعرض مربّع حوار معلومات للمستخدمين قبل توجيههم إلى خارج التطبيق. - تمت إضافة
BillingClient.createExternalOfferReportingDetailsAsync()لإنشاء حمولة مطلوبة لإعداد تقارير عن المعاملات التي تتم من خلال عروض ترويجية خارجية.
- تمت إضافة
إصدار Google Play Billing Library 6.1.0 (14/11/2023)
يتوفّر الآن الإصدار 6.1.0 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
- تمت إضافة واجهات برمجة تطبيقات لإتاحة استخدام نظام الفوترة البديل فقط (أي بدون منح المستخدم حرية الاختيار)
- تمت إضافة
BillingClient.Builder.enableAlternativeBillingOnly()لتفعيل إمكانية توفير نظام فوترة بديل فقط. - تمت إضافة
BillingClient.isAlternativeBillingOnlyAvailableAsync()للتحقّق من إمكانية توفير نظام فوترة بديل فقط. - تمت إضافة
BillingClient.showAlternativeBillingOnlyInformationDialog()لعرض مربّع حوار معلومات لإبلاغ المستخدمين عند استخدام نظام الفوترة البديل فقط. - تمت إضافة
BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()لإنشاء حمولة مطلوبة لإعداد تقارير عن المعاملات التي تتم من خلال نظام الفوترة البديل فقط.
- تمت إضافة
- تعديل واجهات برمجة التطبيقات لميزة "الفوترة حسب اختيار المستخدم"
- تمت إضافة
UserChoiceBillingListenerلاستبدال AlternativeBillingListener الذي تم وضع علامة الإيقاف النهائي عليه. - تمت إضافة
UserChoiceDetailsلاستبدالAlternativeChoiceDetailsالذي تم وضع علامة "متوقّف نهائيًا" عليه. - تمت إضافة
BillingClient.Builder.enableUserChoiceBilling()لاستبدالBillingClient.Builder.enableAlternativeBilling()التي تم وضع علامة "متوقّفة نهائيًا" عليها.
- تمت إضافة
- تمت إضافة
BillingClient.getBillingConfigAsync()لاسترداد البلد على Google Play.
إصدار 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. ستستمر الإصدارات السابقة من PBL في عرض هذا الرمز.تمت إضافة تسجيل إضافي.
يتضمّن الإصدار 6 من Play Billing Library تسجيلًا إضافيًا يقدّم إحصاءات حول استخدام واجهة برمجة التطبيقات (مثل النجاح والفشل) ومشاكل الاتصال بالخدمة. سيتم استخدام هذه المعلومات لتحسين أداء Play Billing Library وتقديم دعم أفضل بشأن الأخطاء.
إصدار 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.
ملخص التغييرات
- تمت إضافة فئات لتوفير مسارات فوترة بديلة على الأجهزة الجوّالة/اللوحية للمستخدمين في كوريا الجنوبية:
- تمت إضافة طريقة
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()لتحديد المعرّف الخارجي للاشتراك الأصلي. - تمت إضافة
BillingClient.Builder.enableAlternativeBilling()طريقة تتيح للمستخدمين في كوريا الجنوبية اختيار نظام فوترة بديل.
إصدار Google Play Billing Library 5.1 (31/10/2022)
يتوفّر الآن الإصدار 5.1.0 من Google Play Billing Library وإضافات Kotlin.
يتضمّن هذا الإصدار التغييرات التالية.
ملخص التغييرات
- تمت إضافة
ProductDetails.SubscriptionOfferDetails.getOfferId()طريقة لاسترداد معرّف العرض الترويجي. - تمت إضافة طريقة
ProductDetails.SubscriptionOfferDetails.getBasePlanId()لاسترداد معرّف الخطة الأساسية. - تم تعديل
targetSdkVersionإلى 31.
إصدار الإصدار 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 (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 Billing Library 2 for Unity
بالإضافة إلى إصدارَي Java وKotlin الحاليَّين من الإصدار 2 من Google Play Billing Library، طرحنا إصدارًا من المكتبة يمكن استخدامه مع Unity. يمكن لمطوّري الألعاب الذين يستخدمون واجهة برمجة التطبيقات الخاصة بعمليات الشراء داخل التطبيق في Unity الترقية الآن للاستفادة من جميع ميزات الإصدار 2 من مكتبة الفوترة في Google Play وتسهيل عمليات الترقية اللاحقة إلى الإصدارات المستقبلية من مكتبة الفوترة في Google Play.
لمزيد من المعلومات، يُرجى الاطّلاع على استخدام خدمة "الفوترة في Google Play" مع Unity.
ملخص التغييرات
- Java Google Play Billing Library
- في الطرق
AcknowledgePurchaseParamsوsetDeveloperPayload()وgetDeveloperPayload()التي تم إيقافها نهائيًا. - في الطرق
ConsumeParamsوsetDeveloperPayload()وgetDeveloperPayload()التي تم إيقافها نهائيًا. - في
BillingFlowParams، تمت إعادة تسميةsetAccountId()إلىsetObfuscatedAccountId()، وتم توثيق قيود الطول البالغة 64 حرفًا والقيود التي لا تسمح بمعلومات تحديد الهوية الشخصية في هذا الحقل. تم وضع علامة علىsetAccountId()باعتبارها متوقفة، وستتم إزالتها في إصدار مستقبلي من المكتبة. - في
BillingFlowParams، تمت إضافةsetObfuscatedProfileId()الذي يعمل بطريقة مشابهةsetObfuscatedAccountId(). لمزيد من المعلومات، اطّلِع على تعديلات حمولة المطوّر وبدائلها. - في
Purchase، تمت إضافة الطريقةgetAccountIdentifiers()لعرض معرّفات الحسابات التي تم تشويشها والمحدّدة فيBillingFlowParams. - في
BillingClient، تم وضع علامة على طريقةloadRewardedSku()بأنّها متوقّفة نهائيًا كجزء من عملية إيقاف رموز التخزين التعريفية للمنتجات التي تتضمّن مكافآت. يمكنك العثور على مزيد من المعلومات حول الإيقاف النهائي في مركز مساعدة Play Console.
- في الطرق
إصدار 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 Billing Library. يتضمّن هذا الإصدار تعديلات على المستندات المرجعية ولا يغيّر وظائف المكتبة.
إصدار Google Play Billing Library 2.0.1 (06-06-2019)
يتوفّر الآن الإصدار 2.0.1 من مكتبة الفوترة في Google Play. يتضمّن هذا الإصدار التغييرات التالية.
إصلاح الأخطاء
- تم إصلاح الخطأ الذي كان يتسبّب في عرض رسائل تصحيح الأخطاء على شكل
nullفي بعض الحالات. - تم إصلاح مشكلة محتملة في تسرب الذاكرة.
إصدار الإصدار 2.0 من Google Play Billing Library (07-05-2019)
يتوفّر الآن الإصدار 2.0 من Google Play Billing Library. يتضمّن هذا الإصدار التغييرات التالية.
يجب تأكيد عمليات الشراء في غضون ثلاثة أيام
يتيح Google Play شراء المنتجات من داخل تطبيقك (داخل التطبيق) أو من خارجه (خارج التطبيق). لكي يضمن Google Play توفير تجربة شراء متسقة بغض النظر عن مكان شراء المستخدم لمنتجك، عليك الإقرار بجميع عمليات الشراء التي تتم من خلال Google Play Billing Library في أقرب وقت ممكن بعد منح المستخدم إذن الوصول إلى المنتج. إذا لم يتم الإقرار بإتمام الشراء في غضون ثلاثة أيام، فسيتم ردّ الأموال تلقائيًا إلى المستخدم وسيلغي Google Play عملية الشراء. بالنسبة إلى المعاملات المعلّقة (ميزة جديدة في الإصدار 2.0)، تبدأ فترة الثلاثة أيام عندما تنتقل عملية الشراء إلى الحالة PURCHASED ولا تنطبق عندما تكون عملية الشراء في الحالة PENDING.
بالنسبة إلى الاشتراكات، يجب إقرار أي عملية شراء تتضمّن رمزًا مميزًا جديدًا للشراء. وهذا يعني أنّه يجب تأكيد جميع عمليات الشراء الأولية وتغييرات الخطط وعمليات إعادة الاشتراك، ولكن ليس عليك تأكيد عمليات التجديد اللاحقة. لتحديد ما إذا كانت عملية الشراء تتطلّب إقرارًا بالاستلام، يمكنك التحقّق من حقل الإقرار بالاستلام في عملية الشراء.
يتضمّن العنصر Purchase الآن الطريقة
isAcknowledged()
التي تشير إلى ما إذا تم تأكيد عملية الشراء. بالإضافة إلى ذلك، تتضمّن واجهة Google Play Developer API قيمًا منطقية خاصة بالإقرار لكل من
Purchases.products
و
Purchases.subscriptions.
قبل التصديق على عملية شراء، احرص على استخدام هذه الطرق لتحديد ما إذا تم التصديق على عملية الشراء مسبقًا.
يمكنك إقرار عملية شراء باستخدام إحدى الطرق التالية:
- بالنسبة إلى المنتجات الاستهلاكية، استخدِم
consumeAsync()المتوفّر في واجهة برمجة التطبيقات الخاصة بالعميل. - بالنسبة إلى المنتجات غير الاستهلاكية، استخدِم
acknowledgePurchase()، الذي يمكن العثور عليه في واجهة برمجة التطبيقات الخاصة بالعميل. - تتوفّر أيضًا طريقة
acknowledge()جديدة في Server API.
تمت إزالة BillingFlowParams.setSku()
تمت إزالة الطريقة BillingFlowParams#setSku() التي تم إيقافها نهائيًا في السابق
في هذا الإصدار. قبل عرض المنتجات في مسار الشراء، يجب الآن استدعاء BillingClient.querySkuDetailsAsync()، مع تمرير العنصر الناتج SkuDetails إلى BillingFlowParams.Builder.setSkuDetails().
للاطّلاع على أمثلة على الرموز البرمجية، راجِع مقالة استخدام Google Play Billing Library.
إتاحة حمولة المطوّر
يضيف الإصدار 2.0 من مكتبة Google Play Billing Library إمكانية استخدام حمولة المطوّر، وهي عبارة عن سلاسل عشوائية يمكن إرفاقها بعمليات الشراء. يمكنك إرفاق مَعلمة حمولة المطوّر بعملية شراء، ولكن فقط عند الإقرار بعملية الشراء أو استهلاكها. ويختلف ذلك عن حمولة المطوّر في AIDL، حيث يمكن تحديد الحمولة عند بدء مسار الشراء. بما أنّه يمكن الآن بدء عمليات الشراء من خارج تطبيقك، يضمن هذا التغيير أن تتاح لك دائمًا فرصة إضافة حمولة إلى عمليات الشراء.
للوصول إلى الحمولة في المكتبة الجديدة، تتضمّن عناصر Purchase الآن طريقة getDeveloperPayload().
العروض المتطابقة
عند تقديم رمز تخزين تعريفي بسعر مخفَّض، يعرض Google Play الآن السعر الأصلي لرمز التخزين التعريفي حتى تتمكّن من إظهار الخصم للمستخدمين.
يتضمّن SkuDetails طريقتَين جديدتَين لاسترداد سعر رمز التخزين التعريفي الأصلي:
getOriginalPriceAmountMicros()- تعرض السعر الأصلي غير المنسَّق لوحدة حفظ المخزون قبل الخصم.
getOriginalPrice()- تعرض السعر الأصلي مع تنسيق عملة إضافي.
المعاملات المعلّقة:
في الإصدار 2.0 من مكتبة Google Play Billing Library، يجب توفير إمكانية إجراء عمليات شراء تتطلّب اتّخاذ إجراء إضافي قبل منح الإذن. على سبيل المثال، قد يختار المستخدم شراء منتج داخل التطبيق من متجر عادي باستخدام النقد. وهذا يعني أنّ المعاملة تتم خارج تطبيقك، وفي هذه الحالة، يجب منح المستخدم إذن الوصول إلى المنتج أو الخدمة بعد إكمال المعاملة فقط.
لتفعيل عمليات الشراء المعلّقة، استدعِ الدالة
enablePendingPurchases()
كجزء من عملية تهيئة تطبيقك.
استخدِم
Purchase.getPurchaseState()
لتحديد ما إذا كانت حالة الشراء هي PURCHASED أو PENDING. يُرجى العِلم أنّه يجب منح الإذن فقط عندما تكون الحالة PURCHASED. يجب
التحقّق من Purchase حالة طلبك باتّباع الخطوات التالية:
- عند بدء تشغيل تطبيقك، استدعِ الدالة
BillingClient.queryPurchases()لاسترداد قائمة المنتجات غير المستهلكة المرتبطة بالمستخدم. - استدعِ الدالة
Purchase.getPurchaseState()على كل عنصرPurchaseتم عرضه. - نفِّذ طريقة
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
ولا يُفترض أن يتم عرضها للمستخدمين النهائيين.
إصلاح الأخطاء
- تعرض الدالة
SkuDetails.getIntroductoryPriceAmountMicros()الآنlongبدلاً منString.
إصدار 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. يتضمّن هذا الإصدار التغييرات التالية.
التغييرات الرئيسية
- تمت إضافة إمكانية تقديم هدايا داخل التطبيقات. لمزيد من المعلومات حول خيارات تحقيق الربح، يُرجى الاطّلاع على إضافة ميزات خاصة بالمنتجات مقابل مكافآت.
تغييرات أخرى
- تمت إضافة أدوات إنشاء عامة للفئتَين
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 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 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)
إصلاح الأخطاء
- عدم توفّر رمز استجابة في حزمة PURCHASES_UPDATED
- حلّ المشاكل في ProxyBillingActivity وPurchasesUpdatedListener أثناء تدوير الجهاز
الإصدار 1 من معاينة المطوّر (12-06-2017، إعلان)
تم إطلاق معاينة المطوّر بهدف تبسيط عملية التطوير عندما يتعلق الأمر بالفوترة، ما يسمح للمطوّرين بتركيز جهودهم على تنفيذ منطق خاص بتطبيق Android، مثل بنية التطبيق وبنية التنقّل.
تتضمّن المكتبة العديد من الفئات والميزات الملائمة التي يمكنك استخدامها عند دمج تطبيقات Android مع Google Play Billing API. توفّر المكتبة أيضًا طبقة تجريد فوق خدمة Android Interface Definition Language (AIDL)، ما يسهّل على المطوّرين تحديد الواجهة بين التطبيق وGoogle Play Billing API.