إضافة ميزات خاصة بالمنتجات التي تضم مكافأة

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

يشرح هذا المستند كيفية تنفيذ وظائف خاصة بالمنتجات التي تضم مكافآت. ويوضّح قسم مخطط سير العمل في هذه الصفحة هذه العملية.

تحديد المنتجات التي تضم مكافآت في تطبيقك

تحتوي المنتجات المزوّدة بمكافآت على SkuType من إجمالي INAPP. لضمان قدرة المستخدمين على مشاهدة إعلانات متعددة والحصول على مكافآت متعددة، يجب استهلاك المنتجات.

قبل تقديم منتج يضم مكافأة، يجب الحصول على SkuDetails الخاصة بالمنتج. لإجراء ذلك، يجب طلب الإجراء querySkuDetailsAsync() مع إدراج SkuType.INAPP كنوع المنتج.

تعريف الإعلانات المناسبة للفئة العمرية

للمساعدة في تسهيل الامتثال للالتزامات القانونية المتعلقة بالأطفال والمستخدمين دون السن القانونية، بما في ذلك قانون حماية خصوصية الأطفال على الإنترنت (COPPA) واللائحة العامة لحماية البيانات (GDPR)، يجب أن يحدد تطبيقك الإعلانات التي يجب التعامل معها باعتبارها موجّهة إلى الأطفال في الولايات المتحدة والإعلانات التي تستهدف المستخدمين الذين تقل أعمارهم عن سن الرشد المعمول به في بلدهم. يوضح مركز مساعدة AdMob الحالات التي يجب فيها وضع علامات على طلبات الإعلان للمعاملة الموجّهة إلى الأطفال والحالات التي تستوجب وضع علامات على هذه الطلبات للعلاج تحت سن الرشد، بالإضافة إلى تأثيرات ذلك.

أثناء إنشاء برنامج الفوترة في تطبيقك، فكّر في ما إذا كان يجب التعامل مع طلبات الإعلانات التي تضم مكافأة على أنها موجّهة إلى الأطفال أو ما إذا كان يجب توجيهها إلى المستخدمين دون سن الرشد. إذا كان يجب تطبيق هذه القيود في طلبات الإعلان، يجب طلب الإجراءَين setChildDirected() وsetUnderAgeOfConsent()، مع تمرير القيم المناسبة إلى كل طريقة.

يعرض مقتطف الرمز التالي كيفية الإعلان عن أن إعلانات الفيديو يجب أن تكون مناسبة للأطفال أو للمستخدمين دون سن الرشد:

Kotlin

val billingClient = BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build()

Java

BillingClient billingClient =
    BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build();

تحميل إعلانات الفيديو

قبل أن تعرض للمستخدم خيار مشاهدة إعلان فيديو من أجل الحصول على منتج بمكافأة، يجب تحميل الفيديو. لإجراء ذلك، أنشِئ عنصر RewardLoadParams يربطه بالكائن SkuDetails الذي يمثّل المنتج الذي يضم مكافأة. بعد ذلك، عليك استدعاء طريقة loadRewardedSku() لعميل الفوترة، مع إدخال كائن RewardLoadParams وكائن RewardResponseListener.

يتم إرسال إشعار إلى مستمِع RewardResponseListener عند انتهاء تحميل الفيديو. يتم إرسال إشعار إلى المستمع أيضًا في حال عدم توفّر الفيديو أو في حال حدوث خطأ آخر، مثل انتهاء مهلة الخادم.

للحفاظ على أداء الجهاز عند تحميل الفيديوهات المرتبطة بالمنتجات التي تضم مكافآت في تطبيقك، يُرجى مراعاة أفضل الممارسات التالية:

  • يجب تحميل ثلاثة رموز تخزين تعريفية للمنتجات التي تضم مكافأة بحدٍ أقصى في وقت واحد.
  • حاوِل تحميل الفيديوهات عندما يدخل المستخدم إلى تطبيقك. تساعدك هذه الخطوة في التحقّق مما إذا كانت الفيديوهات لا تزال محمَّلة ومتاحة.
  • عند تحديد وقت تحميل الفيديوهات، اختر التوازن بين استخدام معدل نقل البيانات واستجابة التطبيق التي تناسب حالة الاستخدام:

    • في أقرب وقت ممكن، حمِّل الفيديوهات بعد طلب رمز getSkuDetails() للمنتج المرتبط الذي يضم مكافأة. يظل تطبيقك سريع الاستجابة، ولكن قد تهدر بيانات الشبكة في تحميل فيديو لم يشاهده المستخدم مطلقًا.
    • في أحدث صورة، حمِّل الفيديو عندما ينتقل المستخدم إلى الصفحة التي سيتم عرضها فيها. نادرًا ما يضيع تطبيقك معدل نقل البيانات في هذه الحالة، ولكن قد يضطر المستخدم إلى الانتظار بضع لحظات قبل أن يصبح الزر الخاص بمشاهدة الفيديو قابلاً للنقر.

يوضّح مقتطف الرمز التالي عملية تحميل إعلان فيديو يتم تشغيله قبل أن يتلقّى المستخدم المنتج الذي يضم مكافأة:

Kotlin

if (skuDetails.isRewarded()) {
    val params = RewardLoadParams.Builder()
            .setSkuDetails(skuDetails)
            .build()
    mBillingClient.loadRewardedSku(params.build(),
            object : RewardResponseListener {
        override fun onRewardResponse(@BillingResponse responseCode : Int) {
            if (responseCode == BillingResponse.OK) {
                // Enable the reward product, or make
                // any necessary updates to the UI.
            }
        }
    })
}

Java

if (skuDetails.isRewarded()) {
    RewardLoadParams.Builder params = RewardLoadParams.newBuilder();
    params.setSkuDetails(skuDetails);
    mBillingClient.loadRewardedSku(params.build(),
        new RewardResponseListener() {
            @Override
            public void onRewardResponse(int responseCode) {
                if (responseCode == BillingResponse.OK) {
                      // Enable the reward product, or make
                      // any necessary updates to the UI.
                  }
            }
        });
}

منح المستخدمين عمليات شراء تضم مكافأة

إذا حمّلت "مكتبة الفوترة في Google Play" بنجاح الفيديو المرتبط بمنتج بمكافأة، أي إذا تلقّى RewardResponseListener responseCode من BillingResponse.OK، يمكنك إطلاق مسار الفوترة.

يمكنك البدء في عرض الإعلانات لمنتج يضم مكافأة من خلال الاتصال بالرقم launchBillingFlow()، كما تفعل مع جميع الأنواع الأخرى من المنتجات داخل التطبيق. على الرغم من أنّ المستخدم لا يُجري عملية شراء مباشرة للحصول على منتج حاصل على مكافأة، عليك تفعيل مسار الفوترة لكي يتمكن المستخدم من الحصول على المنتج واستخدامه.

إكمال عملية الشراء

لإرسال إشعار إلى عميل الفوترة بأنّ مستخدمًا تلقّى منتجًا بمكافأة واستهلكه، يمكنك معالجة عملية الشراء من خلال طريقة onPurchasesUpdated() onPurchasesUpdated() لعميل الفوترة. ملاحظة: يجب استهلاكعمليات الشراء التي تضم مكافأة.

اختبار المنتجات المزوّدة بمكافآت

لاختبار كيفية تحميل تطبيقك لإعلانات الفيديو وتوفير المنتجات التي تضم مكافآت للمستخدمين، يمكنك الاستفادة من المختبِرين المرخَّص لهم الذين يحصلون تلقائيًا على إعلانات اختبارية بدلاً من إعلانات حقيقية. للتعرّف على كيفية إعداد حسابات لهؤلاء المختبِرين، يُرجى الاطّلاع على اختبار المستخدم لتطبيق "الفوترة في Google Play".

يمكنك استخدام معرّف منتج android.test.reward آخر للاختبار. هذا المنتج بالتحديد هو اسم محجوز في خدمة "الفوترة في Google Play"، لذا ليس عليك إضافته إلى قائمة المنتجات داخل التطبيق في Play Console.

تنبيه: عند اختبار المنتجات المزوّدة بمكافآت في تطبيقك، لا تستخدم منتجات فعلية، وإلّا فقد يتم الإبلاغ عن حسابك باعتباره حسابًا احتياليًا أو غير مرغوب فيه.

عند الانتهاء من الاختبار، تأكَّد من استبدال android.test.reward بمعرّفات المنتجات للمنتجات الفعلية التي تضم مكافآت قبل نشر تطبيق الإنتاج للمستخدمين النهائيين.

رسم توضيحي لسير عمل المنتجات التي تضم مكافأة

يوضّح مخطّط التسلسل التالي طريقة عمل المستخدم وتطبيقك و"مكتبة الفوترة في Google Play" معًا لعرض إعلان فيديو ومنح المستخدم إذن الوصول إلى منتج يضمّ مكافأة:

رسم بياني للتسلسل يعرض بروتوكول المنتجات المزوّدة بمكافآت
الشكل 1. خطوات إتمام عملية شراء منتج يضمّ مكافأة باستخدام خدمة "الفوترة في Google Play"