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