إحدى طرق إتاحة المنتجات والمزايا داخل التطبيق للمستخدمين هي إنشاء منتجات مقابل مكافأة، أو سلع يتلقّاها المستخدمون بعد مشاهدة إعلان فيديو. من خلال توفير منتجات مقابل مكافآت، يمكنك السماح للمستخدمين بالحصول على مكافآت ومزايا داخل التطبيق بدون الحاجة إلى إجراء عمليات شراء مباشرة.
يوضّح هذا المستند كيفية تنفيذ وظائف خاصة بمنتجات الإعلانات مقابل مكافآت. يوضّح قسم مخطط سير العمل في هذه الصفحة العملية.
تحديد المنتجات التي يمكن الحصول عليها مقابل مكافآت في تطبيقك
تحتوي الهدايا على
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 معًا لعرض إعلان فيديو ومنح المستخدم إمكانية الوصول إلى منتج مقابل مكافأة: