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

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

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

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

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

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