
وكيف لا يزال لا يوجد مقال عن حبري حول هذا الموضوع؟ لا يهم ، فمن الضروري تصحيحه.
هناك طريقتان لإضافة عمليات الشراء داخل التطبيق إلى تطبيق Android - القديم والجديد. حتى عام 2017 ، كان الجميع يستخدمون المكتبة من anjlab ، ولكن منذ يونيو 2017 ، تغير الوضع ، أصدرت Google مكتبتها الخاصة للمشتريات الداخلية والاشتراكات - Play Billing Library. الآن يعتبر الأخير المعيار.
تلعب مكتبة الفواتير بسيط جدا.
ربط التبعية.
implementation 'com.android.billingclient:billing:1.2'
إضافة إذن في البيان.
<uses-permission android:name="com.android.vending.BILLING"/>
قم بإنشاء مثيل BillingClient وابدأ الاتصال.
private BillingClient mBillingClient; ... mBillingClient = BillingClient.newBuilder(this).setListener(new PurchasesUpdatedListener() { @Override public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
ندخل في طريقة
onPurchasesUpdated () عند إجراء عملية الشراء ، في طريقة
onBillingSetupFinished () يمكنك طلب معلومات حول البضائع والمشتريات.
طلب معلومات المنتج. ضع
querySkuDetails () في
onBillingSetupFinished () .
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>(); private String mSkuId = "sku_id_1"; ... @Override public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) { if (billingResponseCode == BillingClient.BillingResponse.OK) {
في الكود ، قد تلاحظ مفهوم SKU ، ما هو؟ SKU - من وحدة حفظ الأسهم الإنجليزية (معرف عنصر السلعة).
الآن في
mSkuDetailsMap لدينا جميع المعلومات حول المنتجات (الاسم والوصف والسعر) المسجلة في Play Console من هذا التطبيق (المزيد حول ذلك لاحقًا). انتبه إلى هذا الخط
skuList.add (mSkuId) ؛ ، هنا أضفنا معرف المنتج من Play Console ، وسرد هنا جميع المنتجات التي تريد التفاعل معها. لدينا منتج واحد - sku_id_1.
كل شيء جاهز لتلبية طلب الشراء. نمرر معرف المنتج. قم بتشغيل هذه الطريقة ، على سبيل المثال ، بالنقر فوق الزر.
public void launchBilling(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); mBillingClient.launchBillingFlow(this, billingFlowParams); }
الآن ، عن طريق تشغيل هذه الطريقة ، سترى مربع الحوار هذا (صور تقريبًا من الإنترنت).

الآن ، إذا قام المستخدم بشراء البضائع - فعليهم تزويده. أضف طريقة
payComplete () وقم بتنفيذ الإجراءات التي توفر الوصول إلى المنتج الذي تم شراؤه. على سبيل المثال ، إذا اشترى المستخدم قطع اتصال ، فقم بإجراء هذه الطريقة حتى لا يظهر الإعلان.
... @Override public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
كل شيء على ما يرام ، ولكن إذا قام المستخدم بإعادة تشغيل التطبيق ، فإن برنامجنا لا يعرف شيئًا عن عمليات الشراء. من الضروري طلب معلومات عنهم. تفعل ذلك في
onBillingSetupFinished () .
@Override public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) { if (billingResponseCode == BillingClient.BillingResponse.OK) {
في قائمة
المشتريات ، تحصل قائمة على جميع المشتريات التي قام بها المستخدم.
نقوم بفحص: إذا تم شراء البضائع ،
فقم بتنفيذ
payComplete () .
القيام به. يبقى نشر هذا التطبيق في Play Console وإضافة منتجات. كيفية إضافة منتج:
وصف صفحة التطبيق >
محتوى للبيع >
إنشاء محتوى محدود .
ملاحظة 1 : لن تتمكن من إضافة البضائع حتى تقوم بتحميل التطبيق إلى Play Console.
ملاحظة 2 : لمشاهدة مربع حوار الشراء ، تحتاج إلى تحميل الإصدار إلى Play Console ، وإضافة المنتج والانتظار لفترة (حوالي 30 دقيقة - ساعة - 3 ساعات) حتى يتم تحديث المنتج ، فقط بعد ظهور مربع الحوار هذا ويمكنك سوف تجعل الشراء.
ملاحظة 3 :
يرجى إصلاح خطأ
إدخال المعلمات. لا يمكن أن يكون SKU فارغًا - لم يتم تحديث المنتج في Play Console بعد ، يرجى الانتظار.
ملاحظة 4 : قد تواجه
خطأ في الخطأ "لا يمكن إتمام معاملتك" ، في السجلات كرمز
استجابة 6 ، بينما ستختبر. ما سبب حدوث هذا الأمر بالنسبة لي غير معروف تمامًا ، ولكن وفقًا لملاحظاتي ، يحدث هذا بعد التلاعب المتكرر بشراء وإعادة البضائع. لإصلاح ذلك ، انتقل إلى قائمة البطاقات المصرفية ونقل بطاقتك. كيفية تجنب هذا؟ أضف حسابك إلى Play Console كاختبار وشراء فقط من بطاقة الاختبار.
عرض على جيثباشتر لي القهوة(بالمناسبة ، نظام donets يعمل على Habr بواسطة الزر الموجود تحت المقالة - تقريبا. مشرف).