يحتوي هذا المستند على ملاحظات الإصدار الخاصة بمكتبة Google Play Billing Library.
مهارات Android
عرض على GitHubترقية Play Billing Library
android skills add play-billing-library-version-upgradeHelp me upgrade my Play Billing Library implementation.إصدار Google Play Billing Library 9.1.0 (18-06-2026)
يتوفّر الآن الإصدار 9.1.0 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
- واجهات برمجة تطبيقات جديدة لخيار الفوترة:
- تمت إضافة
BillingClient.getBillingChoiceInfoAsync()لاسترداد معلومات حول خيارات الفوترة المتاحة للمستخدم. - تمت إضافة الفئة
BillingChoiceInfoالتي تحتوي على تفاصيل الرد، بما في ذلك عناوين URL للصور ومعلومات الولاء. - تمت إضافة
GetBillingChoiceInfoParamsلإعداد الطلب. - تمت إضافة
BillingChoiceInfoResponseListenerلتلقّي معاودة الاتصال. - تمت إضافة دالة تعليق
BillingClient.getBillingChoiceInfo()في Kotlin. - تمت إضافة
BillingClient.showBillingProgramInformationDialog()لعرض مربّع حوار معلومات لبرنامج الفوترة. - تمت إضافة
BillingProgramInformationDialogParamsلإعداد مربّع الحوار. - تمت إضافة
BillingProgramInformationDialogListenerلتلقّي معاودة الاتصال. - تمت إضافة
BillingProgramAvailabilityDetails.BillingChoiceAvailabilityDetailsلتقديم تفاصيل حول مدى توفّر ميزة "خيارات الفوترة". - تمت إضافة
ChoiceScreenTypeلتحديد نوع شاشة الاختيار.
- تمت إضافة
إصدار 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.
ملخص التغييرات
واجهات برمجة تطبيقات جديدة لعمليات الدفع الخارجية:
- تمت إضافة فئات لدعم مسار عمليات الدفع الخارجية:
- تمت إضافة
enableBillingProgram(EnableBillingProgramParams)لتفعيل عمليات الدفع الخارجية. - تمت إضافة
BillingFlowParams.Builder.enableDeveloperBillingOptionلبدء مسار الدفع الخارجي.
تحسين تصنيف الأخطاء في حالات عدم إكمال عملية الدفع الخارجية:
- إذا انتقل المستخدم من مسار عملية الشراء لإكمال عملية الدفع على تطبيق خارجي (مثل المحفظة الإلكترونية) وألغى المعاملة بدون الرجوع، سيكون رمز الاستجابة الذي يتم إرجاعه إلى العميل هو
BillingResponseCode.USER_CANCELED(1) مع رسالة تصحيح الأخطاءBILLING_ACTIVITY_PAUSED(كانت القيمة التلقائية سابقًا هيBillingResponseCode.ERROR(6)).
- إذا انتقل المستخدم من مسار عملية الشراء لإكمال عملية الدفع على تطبيق خارجي (مثل المحفظة الإلكترونية) وألغى المعاملة بدون الرجوع، سيكون رمز الاستجابة الذي يتم إرجاعه إلى العميل هو
إصدار Google Play Billing Library 8.2.1 (15/12/2025)
يتوفّر الآن الإصدار 8.2.1 من Google Play Billing Library وإضافات Kotlin.
إصلاح الأخطاء
- تم إصلاح خطأ في
isBillingProgramAvailableAsyncوcreateBillingProgramReportingDetailsAsync. يجب التحديث إلى الإصدار 8.2.1 لاستخدام واجهات برمجة التطبيقات هذه التي تم طرحها في الإصدار 8.2.0.
إصدار Google Play Billing Library 8.2.0 (09/12/2025)
يتوفّر الآن الإصدار 8.2.0 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
واجهات برمجة تطبيقات جديدة لروابط المحتوى الخارجي والعروض الترويجية الخارجية:
- تمت إضافة
enableBillingProgramلإعدادBillingClientلهذه البرامج. - تمت إضافة
isBillingProgramAvailableAsyncلتحديد أهلية المستخدم. - تمت إضافة
createBillingProgramReportingDetailsAsyncلإنشاء رمز مميّز للمعاملات الخارجية يجب استخدامه لإعداد التقارير. - تمت إضافة
launchExternalLinkلبدء الرابط الخارجي الذي يؤدي إلى عرض محتوى رقمي أو تنزيل تطبيق.
- تمت إضافة
تغييرات في برنامج العروض الترويجية الخارجية:
- هناك تغييرات في سياسات "برنامج العروض الترويجية الخارجية". لمزيد من التفاصيل، يمكنك الاطّلاع على التغييرات في البرنامج. للتعرّف على كيفية إطلاق مسارات العروض الترويجية الخارجية باستخدام واجهات برمجة التطبيقات الجديدة، يُرجى الاطّلاع على دليل الدمج.
- تم إيقاف واجهة برمجة التطبيقات
BillingClient.Builder.enableExternalOfferنهائيًا. - تم إيقاف واجهة برمجة التطبيقات
isExternalOfferAvailableAsyncنهائيًا. - تم إيقاف واجهة برمجة التطبيقات
createExternalOfferReportingDetailsAsyncنهائيًا. - تم إيقاف واجهة برمجة التطبيقات
showExternalOfferInformationDialogنهائيًا.
إصدار 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.
إصلاح الأخطاء
- تم إصلاح خطأ في الإصدار 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التي تم إصدارها بالكامل في الإصدار 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.
ملخص التغييرات
تمت إضافة واجهات برمجة تطبيقات لإتاحة الاشتراكات بالتقسيط.
- تمت إضافة
ProductDetails.InstallmentPlanDetailsلخطط التقسيط الأساسية التي يمكن للمستخدمين شراؤها. تساعد واجهة برمجة التطبيقات هذه تطبيقك في تحديد خطة التقسيط وإعدادات الالتزام بها من أجل تقديم معلومات ذات صلة للمستخدم. لمزيد من المعلومات، يُرجى الاطّلاع على دليل أقساط الاشتراك.
- تمت إضافة
تمت إضافة
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#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. ستستمر الإصدارات السابقة من مكتبة الفوترة في 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.
ملخص التغييرات
- تمت إضافة فئات لدعم أنظمة الفوترة البديلة على الأجهزة الجوّالة/اللوحية للمستخدمين في كوريا الجنوبية:
- تمت إضافة طريقة
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 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.
ملخص التغييرات
- Java Google Play Billing Library
- في الدالتين
AcknowledgePurchaseParamsوsetDeveloperPayload()وgetDeveloperPayload()اللتين تم إيقافهما نهائيًا. - في الدالتين
ConsumeParamsوsetDeveloperPayload()وgetDeveloperPayload()اللتين تم إيقافهما نهائيًا. - تمت إعادة تسمية
BillingFlowParamsإلىsetAccountId()وتوثيق قيود الطول البالغة 64 حرفًا والقيود التي لا تسمح بإدخال معلومات تكشف الهوية الشخصية في هذا الحقل.setObfuscatedAccountId()تم وضع علامة على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 بدائل لواجهة برمجة التطبيقات بلغة 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 على طريقتَين جديدتَين لاسترداد سعر رمز التخزين التعريفي الأصلي:
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 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() الآن إلى تشغيل دالة ردّ لعمليات الردّ التي تعذّر إكمالها
ستفعّل "مكتبة الفوترة" دائمًا
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)
إصلاح الأخطاء
- عدم توفّر رمز استجابة في حزمة PURCHASES_UPDATED
- حلّ المشاكل المتعلّقة بفئتَي ProxyBillingActivity وPurchasesUpdatedListener أثناء تدوير الجهاز
إصدار "معاينة المطوّر 1" (12-06-2017، إعلان)
تم إطلاق معاينة المطوّر بهدف تبسيط عملية التطوير عندما يتعلق الأمر بالفوترة، ما يتيح للمطوّرين تركيز جهودهم على تنفيذ منطق خاص بتطبيق Android، مثل بنية التطبيق وبنية التنقّل.
تتضمّن المكتبة العديد من الفئات والميزات الملائمة التي يمكنك استخدامها عند دمج تطبيقات Android مع Google Play Billing API. توفّر المكتبة أيضًا طبقة تجريد فوق خدمة "لغة تعريف واجهة نظام Android" (AIDL)، ما يسهّل على المطوّرين تحديد الواجهة بين التطبيق وواجهة برمجة تطبيقات الفوترة في Google Play.