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

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

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

تحديد المنتجات التي يمكن الحصول على مكافآت مقابلها في تطبيقك

تبلغ 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 Billing Library بنجاح الفيديو المرتبط بمنتج يتضمّن مكافأة، أي إذا تلقّى RewardResponseListener responseCode من BillingResponse.OK، يمكنك إطلاق مسار الفوترة.

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

استخدام عملية الشراء

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

اختبار المنتجات مقابل مكافأة

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

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

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

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

مخطّط لسير عمل المنتجات مقابل مكافأة

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

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