يتضمّن هذا المستند ملاحظات الإصدار الخاصة بـ Google Play Billing Library.
مهارات Android
العرض على GitHubترقية Play Billing Library
android skills add play-billing-library-version-upgradeHelp me upgrade my Play Billing Library implementation.الإصدار 9.1.0 من Google Play Billing Library (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لتحديد نوع شاشة الاختيار.
- تمت إضافة
الإصدار 9.0.0 من Google Play Billing Library (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. يتيح هذا التغيير التعامل مع الحالات التي لا يتوفّر فيها معرّف الموارد المنتظم (URI) للرابط المباشر لعمليات الدفع الخارجية أثناء مرحلة اختيار طريقة الدفع.للتعامل مع هذا التغيير بأمان، تأكَّد من أنّ رمز الدمج يتعامل مع كل من قيمتَي
nullوالسلسلة الفارغة ("") من طريقةDeveloperProvidedBillingDetails.getLinkUri()قبل تحليل أو إطلاق أهداف المتصفّح.تم تعديل
targetSdkVersionإلى 35.يمكنك الآن استخدام ميزة المراسلة داخل التطبيق لإعلام المستخدمين بزيادة قادمة في السعر تتطلّب موافقة. يتيح ذلك للمستخدمين تأكيد الزيادة في السعر بدون مغادرة التطبيق. وتظهر رسالة الزيادة في السعر التي تتطلّب موافقة بدءًا من اليوم الأول الذي يمكن للمستخدم فيه قبول الزيادة في السعر، وتظهر الرسالة مرة واحدة كحد أقصى كل 7 أيام.
الإصدار 8.3.0 من Google Play Billing Library (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)).
- إذا غادر المستخدم مسار الشراء لإكمال عملية الدفع في تطبيق خارجي (مثل محفظة إلكترونية) وتخلّى عن المعاملة بدون العودة، سيصبح رمز الاستجابة الذي يتم عرضه للعميل الآن هو
الإصدار 8.2.1 من Google Play Billing Library (15/12/2025)
يتوفّر الآن الإصدار 8.2.1 من Google Play Billing Library وإضافات Kotlin.
إصلاح الأخطاء
- تم إصلاح خطأ في
isBillingProgramAvailableAsyncوcreateBillingProgramReportingDetailsAsync. يُرجى التحديث إلى الإصدار 8.2.1 لاستخدام واجهات برمجة التطبيقات هذه التي تم طرحها في الإصدار 8.2.0.
الإصدار 8.2.0 من Google Play Billing Library (09/12/2025)
يتوفّر الآن الإصدار 8.2.0 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
واجهات برمجة تطبيقات جديدة للروابط المؤدية إلى محتوى خارجي والعروض الترويجية الخارجية:
- تمت إضافة
enableBillingProgramلإعدادBillingClientلهذه البرامج. - تمت إضافة
isBillingProgramAvailableAsyncلتحديد أهلية المستخدم. - تمت إضافة
createBillingProgramReportingDetailsAsyncلإنشاء رمز مميّز للمعاملة الخارجية يجب استخدامه لإعداد التقارير. - تمت إضافة
launchExternalLinkلبدء الرابط الخارجي المؤدي إلى عرض محتوى رقمي أو تنزيل تطبيق.
- تمت إضافة
تغييرات في برنامج العروض الترويجية الخارجية:
- تم إجراء تغييرات على سياسات "برنامج العروض الترويجية الخارجية". يمكنك الاطّلاع على التغييرات في البرنامج لمزيد من التفاصيل. لمعرفة كيفية إطلاق مسارات العروض الترويجية الخارجية باستخدام واجهات برمجة التطبيقات الجديدة، يُرجى الاطّلاع على دليل الدمج.
- تم إيقاف واجهة برمجة التطبيقات
BillingClient.Builder.enableExternalOfferنهائيًا. - تم إيقاف واجهة برمجة التطبيقات
isExternalOfferAvailableAsyncنهائيًا. - تم إيقاف واجهة برمجة التطبيقات
createExternalOfferReportingDetailsAsyncنهائيًا. - تم إيقاف واجهة برمجة التطبيقات
showExternalOfferInformationDialogنهائيًا.
الإصدار 8.1.0 من Google Play Billing Library (06/11/2025)
يتوفّر الآن الإصدار 8.1.0 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
الاشتراكات المعلّقة
تمت إضافة مَعلمة جديدة إلى الطريقة
BillingClient.queryPurchasesAsync()لتضمين الاشتراكات المعلّقة عند طلب البحث عن الاشتراكات. تظل الاشتراكات المُعلَّقة منسوبة إلى المستخدم، ولكنها غير نشطة، إما لأنّ المستخدم أوقف الاشتراك مؤقتًا أو لأنّ طريقة الدفع لتجديد الاشتراك تم رفضها.سيعرض عنصر
Purchaseالذي تم عرضه في المستمع القيمةisSuspended() = trueلأي اشتراكات معلّقة. في هذه الحالة، يجب عدم منح إذن الوصول إلى الاشتراك الذي تم شراؤه، وبدلاً من ذلك، يجب توجيه المستخدم إلى مركز الاشتراكات حيث يمكنه إدارة طُرق الدفع أو حالة الإيقاف المؤقت لإعادة تفعيل الاشتراك.التعديلات على الاشتراكات:
يحتوي عنصر
BillingFlowParams.ProductDetailsParamsالآن على طريقةsetSubscriptionProductReplacementParams()التي يمكنك من خلالها تحديد معلومات الاستبدال على مستوى المنتج.يحتوي العنصر
SubscriptionProductReplacementParamsعلى طريقتَي ضبط:-
setOldProductId: المنتج القديم الذي يجب استبداله بالمنتج فيProductDetailsالحالي. -
setReplacementMode: هذا هو وضع الاستبدال على مستوى السلعة. تكون الأوضاع في الأساس مماثلة لـ SubscriptionUpdateParams، ولكن تم تعديل ربط القيمة. تم تقديم وضع استبدال جديدKEEP_EXISTINGيتيح لك الاحتفاظ بجدول الدفع الحالي بدون تغيير لأحد العناصر.
-
سيتم إيقاف SubscriptionUpdateParams setSubscriptionReplacementMode نهائيًا. يجب استخدام
SubscriptionProductReplacementParams.setReplacementModeبدلاً من ذلك.
تم تعديل
minSdkVersionإلى 23.تفعيل واجهات برمجة التطبيقات للطلب المُسبَق للمنتجات المدفوعة لمرة واحدة
أصبحت واجهة برمجة التطبيقات
ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails()التي تحصل على تفاصيل الطلب المُسبَق متاحة الآن للاستخدام.تتيح Google Play Billing Library الآن استخدام الإصدار 2.2.0 من Kotlin.
الإصدار 8.0.0 من Google Play Billing Library (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()للمطوّرين الموافقة على إعادة الاتصال بالخدمة تلقائيًا، ما يسهّل إدارة الاتصال من خلال إعادة الاتصال بخدمة "الفوترة في Google 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).
الإصدار 7.1.1 من Google Play Billing Library (03/10/2024)
يتوفّر الآن الإصدار 7.1.1 من Google Play Billing Library وإضافات Kotlin.
إصلاح الأخطاء
- تم إصلاح خطأ في الإصدار 7.1.0 من Play Billing Library يتعلّق باختبار رموز استجابة
BillingResult.
الإصدار 7.1.0 من Google Play Billing Library (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.
الإصدار 7.0.0 من Google Play Billing Library (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.
الإصدار 6.2.1 من Google Play Billing Library (16/04/2024)
يتوفّر الآن الإصدار 6.2.1 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
- تم إصلاح خلل في
BillingClient.showAlternativeBillingOnlyInformationDialog()حيث قد لا يتم استدعاءAlternativeBillingOnlyInformationDialogListenerفي حالات معيّنة عند اكتمال مربّع الحوار.
الإصدار 6.2.0 من Google Play Billing Library (06/03/2024)
يتوفّر الآن الإصدار 6.2.0 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
- تمت إضافة واجهات برمجة تطبيقات لإتاحة العروض الترويجية الخارجية
- تمت إضافة
BillingClient.Builder.enableExternalOffer()لإتاحة إمكانية تقديم عروض ترويجية خارجية. - تمت إضافة
BillingClient.isExternalOfferAvailableAsync()للتحقّق من توفّر وظيفة تقديم عروض ترويجية خارجية. - تمت إضافة
BillingClient.showExternalOfferInformationDialog()لعرض مربّع حوار يتضمّن معلومات للمستخدمين قبل توجيههم إلى خارج التطبيق. - تمت إضافة
BillingClient.createExternalOfferReportingDetailsAsync()لإنشاء الحمولة المطلوبة للإبلاغ عن المعاملات التي تتم من خلال العروض الترويجية الخارجية.
- تمت إضافة
الإصدار 6.1.0 من Google Play Billing Library (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.
الإصدار 6.0.1 من Google Play Billing Library (22/06/2023)
يتوفّر الآن الإصدار 6.0.1 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
تحديث Play Billing Library لتصبح متوافقة مع Android 14
الإصدار 6.0 من Google Play Billing Library (10/05/2023)
يتوفّر الآن الإصدار 6.0.0 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
تمت إضافة تعداد
ReplacementModeجديد ليحل محلProrationMode.يُرجى العِلم أنّ السمة
ProrationModeلا تزال متاحة لأسباب تتعلق بالتوافق مع الأنظمة القديمة.تمت إزالة معرّف الطلب لعمليات الشراء في
PENDING.في السابق، كان يتم إنشاء معرّف الطلب دائمًا حتى إذا كانت عملية الشراء في انتظار المراجعة. بدءًا من الإصدار 6.0.0، لن يتم إنشاء معرّف طلب لعمليات الشراء المُعلّقة، وسيتم ملء معرّف الطلب لعمليات الشراء هذه بعد نقل عملية الشراء إلى الحالة
PURCHASED.تمّت إزالة الدالتين
queryPurchasesوlaunchPriceConfirmationFlow.تمت الآن إزالة الطريقتَين
queryPurchasesوlaunchPriceConfirmationFlowاللتين تم وضع علامة عليهما سابقًا باعتبارهما متوقفتَين نهائيًا، وذلك في الإصدار 6.0.0 من Play Billing Library. على المطوّرين استخدام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 وتقديم دعم أفضل للأخطاء.
الإصدار 5.2.1 من Google Play Billing Library (22/06/2023)
يتوفّر الآن الإصدار 5.2.1 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
تحديث Play Billing Library لتصبح متوافقة مع Android 14
الإصدار 5.2 من Google Play Billing Library (06/04/2023)
يتوفّر الآن الإصدار 5.2.0 من Google Play Billing Library وإضافات Kotlin.
ملخص التغييرات
- تمت إضافة فئات لإتاحة مسارات الفوترة البديلة على الأجهزة الجوّالة/الأجهزة اللوحية للمستخدمين في كوريا الجنوبية:
- تمت إضافة الطريقة
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()لتحديد معرّف المعاملة الخارجية للاشتراك الأصلي. - تمت إضافة طريقة
BillingClient.Builder.enableAlternativeBilling()للسماح للمستخدمين في كوريا الجنوبية بتحديد خيار نظام فوترة بديل.
الإصدار 5.1 من Google Play Billing Library (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. بعد إزالة هذه الطريقة، سيكمل المستخدمون عملية الشراء من خلال مسار الشراء العادي.
الإصدار 4.1 من Google Play Billing Library (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".
الإصدار 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 أو الإصدارات الأحدث.
إصدار 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. - تم إصلاح خلل كان يؤدي إلى التعامل مع مسار الفوترة على أنّه يتضمّن مَعلمات إضافية حتى في حال عدم ضبط أي مَعلمات إضافية.
الإصدار 2.2.1 من Google Play Billing Library (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 وظائف تساعد المطوّرين في التأكّد من أنّ عمليات الشراء منسوبة إلى المستخدم الصحيح. وتغني هذه التغييرات عن الحاجة إلى إنشاء حلول مخصّصة استنادًا إلى حمولة المطوّر. كجزء من هذا التحديث، تم إيقاف وظيفة الحمولة الصالحة للمطوّر نهائيًا وستتم إزالتها في إصدار مستقبلي. لمزيد من المعلومات، بما في ذلك البدائل المقترَحة، يُرجى الاطّلاع على حمولة المطوّر.
الإصدار 2 من Google Play Billing Library لمنصة Unity
بالإضافة إلى إصدارَي Java وKotlin الحاليين من Google Play Billing Library 2، أصدرنا إصدارًا من المكتبة للاستخدام مع Unity. يمكن لمطوّري الألعاب الذين يستخدمون واجهة برمجة التطبيقات Unity In-App Purchase الترقية الآن للاستفادة من جميع ميزات الإصدار 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()إلىsetObfuscatedAccountId()، وتم توثيق قيد الطول المتمثل في 64 حرفًا والقيد الذي لا يسمح بمعلومات تكشف الهوية الشخصية (PII) في هذا الحقل. تم وضع علامة علىsetAccountId()على أنّه متوقف نهائيًا وستتم إزالته في إصدار مستقبلي من المكتبة. - في
BillingFlowParams، تمت إضافةsetObfuscatedProfileId()التي تعمل بشكل مشابه لـsetObfuscatedAccountId(). لمزيد من المعلومات، يُرجى الاطّلاع على تعديلات حمولة المطوّر وبدائلها. - في
Purchase، تمت إضافة الطريقةgetAccountIdentifiers()لعرض معرّفات الحسابات المبهمة التي تم ضبطها فيBillingFlowParams. - في
BillingClient، تم وضع علامة على طريقةloadRewardedSku()بأنّها متوقفة نهائيًا كجزء من إيقاف رموز التخزين التعريفية التي تتضمّن مكافآت نهائيًا.
- في
الإصدار 2.1.0 من Google Play Billing Library والإصدار 2.1.0 من إضافة Kotlin (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)، لإزالة الغموض عندما تمتلك حسابات متعددة على الجهاز رمز التخزين التعريفي نفسه.
الإصدار 2.0.3 من Google Play Billing Library (05-08-2019)
يتوفّر الآن الإصدار 2.0.3 من Google Play Billing Library.
إصلاح الأخطاء
- تم إصلاح خلل كان يؤدي أحيانًا إلى تعذُّر تنفيذ
querySkuDetailsAsync()مع ظهور الرمزDEVELOPER_ERRORبدلاً من عرض نتيجة ناجحة.
الإصدار 2.0.2 من Google Play Billing Library (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في بعض الحالات. - تم إصلاح مشكلة محتملة في تسرّب الذاكرة.
الإصدار 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 Library على عدة تغييرات في واجهة برمجة التطبيقات لإتاحة ميزات جديدة وتوضيح الوظائف الحالية.
consumeAsync
تتطلّب السمة consumeAsync() الآن استخدام عنصر ConsumeParams بدلاً من purchaseToken. يحتوي ConsumeParams على purchaseToken بالإضافة إلى حمولة اختيارية للمطوّر.
تمت إزالة الإصدار السابق من "consumeAsync()" في هذا الإصدار.
queryPurchaseHistoryAsync
لتقليل الالتباس،
يعرض queryPurchaseHistoryAsync()
الآن عنصر
PurchaseHistoryRecord
بدلاً من عنصر Purchase. يتطابق العنصر PurchaseHistoryRecord مع العنصر Purchase، إلا أنّه يعكس فقط القيم التي تعرضها السمة queryPurchaseHistoryAsync() ولا يحتوي على الحقول autoRenewing وorderId وpackageName. يُرجى العِلم أنّه لم يتم إجراء أي تغييرات على البيانات التي يتم عرضها، إذ تعرض queryPurchaseHistoryAsync() البيانات نفسها كما في السابق.
القيم المعروضة من BillingResult
إنّ واجهات برمجة التطبيقات التي كانت تعرض في السابق قيمة عدد صحيح BillingResponse تعرض الآن عنصر
BillingResult. يحتوي BillingResult على العدد الصحيح BillingResponse بالإضافة إلى سلسلة تصحيح الأخطاء التي يمكنك استخدامها لتشخيص الأخطاء. تستخدم سلسلة تصحيح الأخطاء اللغة الإنجليزية (الولايات المتحدة)
ولا يُفترض أن تظهر للمستخدمين النهائيين.
إصلاح الأخطاء
- تعرض الدالة
SkuDetails.getIntroductoryPriceAmountMicros()الآنlongبدلاً منString.
الإصدار 1.2.2 من Google Play Billing Library (07-03-2019)
يتوفّر الآن الإصدار 1.2.2 من Google Play Billing Library. يتضمّن هذا الإصدار التغييرات التالية.
إصلاح الأخطاء
- تم إصلاح مشكلة في سلاسل المحادثات ظهرت في الإصدار 1.2.1. لم تعد المكالمات في الخلفية تحظر سلسلة التعليمات الرئيسية.
تغييرات أخرى
- على الرغم من أنّه لا يزال من المستحسن استخدام سلسلة التعليمات الرئيسية، يمكنك الآن إنشاء مثيل لـ Google Play Billing Library من سلسلة تعليمات في الخلفية.
- تم نقل عملية إنشاء مثيل بالكامل إلى سلسلة التعليمات في الخلفية لتقليل احتمالية حدوث أخطاء ANR.
الإصدار 1.2.1 من Play Billing Library (2019-03-04)
يتوفّر الآن الإصدار 1.2.1 من Google Play Billing Library. يتضمّن هذا الإصدار التغييرات التالية.
التغييرات الرئيسية
- تمت إضافة إمكانية استخدام المنتجات التي تضم مكافآت. لمزيد من المعلومات حول خيارات تحقيق الربح، يُرجى الاطّلاع على إضافة ميزات خاصة بالمنتجات التي تتضمّن مكافآت.
تغييرات أخرى
- تمت إضافة دوال إنشائية عامة لكل من
PurchasesResultوSkuDetailsResultلتسهيل عملية الاختبار. - يمكن لعناصر
SkuDetailsاستخدام طريقة جديدة، وهيgetOriginalJson(). - تتم الآن معالجة جميع طلبات خدمة AIDL من خلال سلاسل محادثات في الخلفية.
إصلاح الأخطاء
- لم يعُد يتم تمرير مستمعي عمليات الاستدعاء الفارغة إلى واجهات برمجة التطبيقات العامة.
الإصدار 1.2 من Google Play Billing Library (18-10-2018)
يتوفّر الآن الإصدار 1.2 من Google Play Billing Library. يتضمّن هذا الإصدار التغييرات التالية.
ملخص التغييرات
- أصبحت Google Play Billing Library مرخَّصة الآن بموجب اتفاقية ترخيص حزمة تطوير البرامج (SDK) لنظام التشغيل 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. يؤدي هذا الوضع إلى تعديل اشتراك المستخدم عند تجديده في المرة التالية.
لمزيد من المعلومات حول كيفية ضبط وضع التناسب هذا، يُرجى الاطّلاع على ضبط وضع التناسب.
طريقة جديدة لضبط تفاصيل رمز التخزين التعريفي
تم إيقاف الطريقة setSku() نهائيًا في الفئة BillingFlowParams.
يهدف هذا التغيير إلى تحسين مسار الفوترة في Google Play.
عند إنشاء مثيل جديد من BillingFlowParams في برنامج الفوترة داخل التطبيق، ننصحك بالعمل مع كائن JSON مباشرةً باستخدام setSkuDetails()، كما هو موضّح في مقتطف الرمز التالي:
في فئة BillingFlowParams Builder، تم إيقاف الطريقة 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 (2018-05-07)
يتوفّر الآن الإصدار 1.1 من Google Play Billing Library. يتضمّن هذا الإصدار التغييرات التالية.
ملخص التغييرات
- تمت إضافة ميزة تتيح تحديد وضع التناسب في
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() الآن إلى معاودة الاتصال في حال تعذُّر الردود
ستشغّل Billing Library دائمًا دالة الاستدعاء
PurhcasesUpdatedListener
وتعرض
BillingResponse
بشكل غير متزامن. يتم أيضًا الاحتفاظ بالقيمة المعروضة المتزامنة لـ BillingResponse.
إصلاح الأخطاء
- يتم الخروج بشكل صحيح مبكرًا في الطرق غير المتزامنة عند قطع اتصال الخدمة.
Builderلم تعد كائنات param تغيّر الكائنات التي تم إنشاؤها.- المشكلة 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 Library التغييرات التالية في السلوك.
فئة 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()
في نمط "أداة الإنشاء":
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 (AIDL)، ما يسهّل على المطوّرين تحديد الواجهة بين التطبيق وواجهة الفوترة في Google Play API.