Menambahkan Iklan Video Berhadiah ke Aplikasi Android

Dengan Audience Network, Anda dapat memonetisasi aplikasi Android dengan iklan Facebook. Iklan video berhadiah adalah pengalaman layar penuh tempat pengguna melihat iklan video dengan imbalan sesuatu yang bernilai, seperti mata uang virtual, item dalam-aplikasi, konten eksklusif, dan lainnya. Pengalaman iklan berdurasi 15-30 detik, tidak dapat dilewati, dan berisi kartu terakhir dengan ajakan bertindak. Setelah menyelesaikan video selengkapnya, Anda akan menerima panggilan balik untuk memberi hadiah yang disarankan kepada pengguna.

Pastikan Anda sudah membaca tuntas panduan Memulai dan Memulai Android Audience Network sebelum melanjutkan.

Langkah demi Langkah

Langkah 1: Menginisialisasi Iklan Video Berhadiah di Aktivitas Anda

Langkah 2: Menampilkan Iklan Video Berhadiah di Aktivitas Anda

Menginisialisasi SDK Audience Network

Metode ini ditambahkan di SDK Audience Network Android versi 5.1.

Inisialisasi eksplisit SDK Audience Network Android diperlukan untuk versi 5.3.0 dan lebih besar. Baca dokumen ini tentang cara menginisialisasi SDK Audience Network Android.

Sebelum membuat benda iklan dan memuat iklan, Anda harus menginisialisasi SDK Audience Network. Sebaiknya lakukan hal ini pada saat aplikasi dibuka.

public class YourApplication extends Application {
    ...
    @Override
    public void onCreate() {
        super.onCreate();
        // Initialize the Audience Network SDK
        AudienceNetworkAds.initialize(this);       
    }
    ...
}

Langkah 1: Menginisialisasi Iklan Video Berhadiah di Aktivitas Anda

Tambahkan kode berikut di bagian atas Aktivitas Anda untuk mengimpor SDK Iklan Facebook:

import com.facebook.ads.*;

Lalu, inisialisasikan objek video berhadiah, tetapkan pendengar, dan muat materi iklan video. Iklan video berhadiah memerlukan antarmuka RewardedVideoAdListener yang menerapkan metode berikut dalam contoh kode untuk menangani berbagai peristiwa. Contoh di aktivitas Anda:

private final String TAG = RewardedVideoAdActivity.class.getSimpleName();
private RewardedVideoAd rewardedVideoAd;

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    // Instantiate a RewardedVideoAd object. 
    // NOTE: the placement ID will eventually identify this as your App, you can ignore it for
    // now, while you are testing and replace it later when you have signed up.
    // While you are using this temporary code you will only get test ads and if you release
    // your code like this to the Google Play your users will not receive ads (you will get
    // a no fill error).
    rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID");
    RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() {
        @Override
        public void onError(Ad ad, AdError error) {
            // Rewarded video ad failed to load
            Log.e(TAG, "Rewarded video ad failed to load: " + error.getErrorMessage());
        }

        @Override
        public void onAdLoaded(Ad ad) {
            // Rewarded video ad is loaded and ready to be displayed  
            Log.d(TAG, "Rewarded video ad is loaded and ready to be displayed!");
        }

        @Override
        public void onAdClicked(Ad ad) {
            // Rewarded video ad clicked
            Log.d(TAG, "Rewarded video ad clicked!");
        }

        @Override
        public void onLoggingImpression(Ad ad) {
            // Rewarded Video ad impression - the event will fire when the 
            // video starts playing
            Log.d(TAG, "Rewarded video ad impression logged!");
        }

        @Override
        public void onRewardedVideoCompleted() {
            // Rewarded Video View Complete - the video has been played to the end.
            // You can use this event to initialize your reward
            Log.d(TAG, "Rewarded video completed!");

            // Call method to give reward
            // giveReward();
        }

        @Override
        public void onRewardedVideoClosed() {
            // The Rewarded Video ad was closed - this can occur during the video
            // by closing the app, or closing the end card.
            Log.d(TAG, "Rewarded video ad closed!");
        }
    };
    rewardedVideoAd.loadAd(
            rewardedVideoAd.buildLoadAdConfig()
                    .withAdListener(rewardedVideoAdListener)
                    .build());
    ...
}

Langkah 2: Menampilkan Iklan Video Berhadiah

Skenario 1: Segera tampilkan iklan setelah berhasil dimuat. Modifikasi metode onAdLoaded() di atas untuk menampilkannya sebagai berikut:

private RewardedVideoAd rewardedVideoAd;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    // Instantiate a RewardedVideoAd object. 
    // NOTE: the placement ID will eventually identify this as your App, you can ignore it for
    // now, while you are testing and replace it later when you have signed up.
    // While you are using this temporary code you will only get test ads and if you release
    // your code like this to the Google Play your users will not receive ads (you will get
    // a no fill error).
    rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID");
    RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() {
        ...
        @Override
        public void onAdLoaded(Ad ad) {
            // Rewarded video ad is loaded and ready to be displayed  
            rewardedVideoAd.show();
        }
        ...
    };
    rewardedVideoAd.loadAd(
            rewardedVideoAd.buildLoadAdConfig()
                    .withAdListener(rewardedVideoAdListener)
                    .build());
    ...
}

Skenario 2: Tampilkan iklan dalam beberapa detik atau menit setelah berhasil dimuat. Anda harus memastikan apakah iklan tersebut masih valid atau tidak sebelum menampilkannya.

Jika iklan tidak segera ditampilkan setelah termuat, developer bertanggung jawab untuk memastikan apakah iklan tersebut masih valid atau tidak. Setelah iklan berhasil dimuat, iklan akan valid selama 60 menit. Anda tidak akan dibayar jika menampilkan iklan yang tidak lagi valid. Anda sebaiknya memanggil isAdInvalidated() untuk memvalidasi iklan.

Anda sebaiknya mengikuti gagasan di bawah, tetapi jangan menyalin kodenya ke dalam proyek Anda karena ini hanya contoh:

private RewardedVideoAd rewardedVideoAd;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    // Instantiate a RewardedVideoAd object. 
    // NOTE: the placement ID will eventually identify this as your App, you can ignore it for
    // now, while you are testing and replace it later when you have signed up.
    // While you are using this temporary code you will only get test ads and if you release
    // your code like this to the Google Play your users will not receive ads (you will get
    // a no fill error).
    rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID");
    RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() {
        ...
    };
    // load the ad
    rewardedVideoAd.loadAd(
            rewardedVideoAd.buildLoadAdConfig()
                    .withAdListener(rewardedVideoAdListener)
                    .build());

    // Here is just an example for displaying the ad with delay
    // Please call this method at appropriate timing in your project
    showAdWithDelay();
}

private void showAdWithDelay() {
    /**
     * Here is an example for displaying the ad with delay;
     * Please do not copy the Handler into your project
     */
    // Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        public void run() {
            // Check if rewardedVideoAd has been loaded successfully
            if (rewardedVideoAd == null || !rewardedVideoAd.isAdLoaded()) {
                return;
            }
            // Check if ad is already expired or invalidated, and do not show ad if that is the case. You will not get paid to show an invalidated ad.
            if (rewardedVideoAd.isAdInvalidated()) {
                return;
            }
            rewardedVideoAd.show();
        }
    }, 1000 * 60 * 15); // Show the ad after 15 minutes
}

Jika Anda menggunakan emulator Google Android, Anda akan menambahkan baris kode berikut sebelum memuat iklan tes:
AdSettings.addTestDevice("HASHED ID");.

Gunakan ID dengan hash yang tercetak di logcat saat Anda pertama kali meminta untuk memuat iklan di sebuah perangkat.

Genymotion dan perangkat fisik tidak memerlukan langkah ini. Jika Anda ingin menguji menggunakan iklan nyata, harap lihat Panduan Pengujian kami.

Terakhir, bersihkan objek dengan metodenya destroy dalam metode onDestroy aktivitas. Perlu diperhatikan bahwa Anda juga harus menggunakan metode destroy untuk membersihkan objek iklan lama sebelum menetapkannya ke contoh baru untuk menghindari kebocoran memori.

@Override
protected void onDestroy() {
    if (rewardedVideoAd != null) {
        rewardedVideoAd.destroy();
        rewardedVideoAd = null;
    }
    super.onDestroy();
}

Akselerasi Perangkat Keras untuk Iklan Video

Untuk mengaktifkan iklan video di Audience Network diperlukan render yang diakselerasi perangkat keras, jika tidak ada maka layar mungkin akan menjadi hitam di tayangan video. Ini berlaku untuk

  • Materi iklan video di Iklan Native
  • Materi iklan video di Interstisial
  • Iklan Video In-stream
  • Video yang Mendapatkan Hadiah

Akselerasi perangkat keras diaktifkan secara default jika level API Target adalah >=14 (Ice Cream Sandwich, Android 4.0.1), namun Anda juga dapat secara eksplisit menyalakan fitur ini pada level aplikasi atau level aktivitas.

Level Aplikasi

Di file manifes Android, tambahkan atribut berikut ke tag <application> untuk mengaktifkan percepatan perangkat keras untuk seluruh aplikasi Anda:

<application android:hardwareAccelerated="true" ...>

Level Aktivitas

Jika Anda hanya ingin mengaktifkan fitur untuk aktivitas tertentu di aplikasi, dalam file manifes Android, Anda dapat menambahkan fitur berikut ke tag <activity>. Contoh berikut akan mengaktifkan percepatan perangkat keras untuk AudienceNetworkActivity yang digunakan untuk rendering iklan pengantara dan video hadiah:

<activity android:name="com.facebook.ads.AudienceNetworkActivity" android:hardwareAccelerated="true" .../>

Validasi Hadiah Sisi Server

Ini bersifat opsional! Anda tidak perlu menerapkan validasi sisi server untuk menggunakan iklan video berhadiah. Ini hanya diperlukan jika Anda memutuskan untuk memvalidasi hadiah di server Anda sendiri guna meningkatkan keamanan dengan memperkenalkan langkah validasi di server Anda sendiri. Harap beri penerbit endpoint ke perwakilan Facebook Anda untuk mengaktifkan fitur ini.

Ringkasan

Jika Anda mengelola sisi server hadiah pengguna Anda, maka Facebook menawarkan sebuah solusi untuk menerapkannya secara aman menggunakan teknik validasi. Server kami akan berkomunikasi dengan endpoint https yang ditentukan untuk memvalidasi setiap impresi iklan dan memvalidasi apakah hadiah harus diberikan atau tidak.

  1. Audience Network SDK meminta iklan video berhadiah dengan parameter berikut:
    • ID Penempatan Audience Network
    • ID Pengguna Unik - sebuah atribut yang Anda gunakan untuk mengidentifikasi pengguna unik. Contoh: pengidentifikasi numerik
    • Nilai Hadiah - nilai hadiah yang akan Anda berikan kepada pengguna. Contoh: 100 Koin
  2. Setelah menyelesaikan video, Server Facebook mengirimkan nilai ini ke endpoint tertentu Anda, beserta Rahasia Aplikasi dan ID Transaksi Unik.
  3. Setelah menerima, server memvalidasi permintaan dan menanggapi seperti berikut:
    • Tanggapan 200: permintaan valid dan hadiah harus disampaikan
    • Bukan tanggapan 200: permintaan tidak valid dan hadiah tidak dapat disampaikan.
  4. Setelah video selesai, kartu akhir disajikan dan salah satu dari peristiwa berikut akan diaktifkan.
    • onRewardServerSuccess - terpicu hanya jika tanggapan 200 diterima selama langkah 3.
    • onRewardServerFailed - terpicu jika bukan tanggapan 200 diterima selama langkah 3.

Contoh URL yang akan mencapai endpoint penerbit Anda, dari server Facebook: https://www.end_point_Anda.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID

Alur kerjanya akan terlihat seperti ini:

Penerapan

Setelah menginisialisasi objek video berinsentif, Anda harus meneruskan ID Pengguna dan jumlah Hadiah ke data iklan berhadiah sebelum memuat iklan. Baik ID Pengguna maupun jumlah Hadiah adalah string. Contoh:

private RewardedVideoAd rewardedVideoAd;

private void loadRewardedVideoAd { 
    // Instantiate a RewardedVideoAd object. 
    // NOTE: the placement ID will eventually identify this as your App, you can ignore it for
    // now, while you are testing and replace it later when you have signed up.
    // While you are using this temporary code you will only get test ads and if you release
    // your code like this to the Google Play your users will not receive ads (you will get
    // a no fill error).
    rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID");
    RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() {
        ...
    };

    // Create the rewarded ad data
    RewardData rewardData = new RewardData("YOUR_USER_ID", "YOUR_REWARD");

    rewardedVideoAd.loadAd(
            rewardedVideoAd.buildLoadAdConfig()
                    .withAdListener(rewardedVideoAdListener)
                    .withRewardData(rewardData)
                    .build());
}

Agar aplikasi Anda diberi tahu apakah hadiah divalidasi atau tidak, Anda harus menerapkan antarmuka S2SRewardedVideoAdListener. Hal ini termasuk semua peristiwa yang disebutkan di atas antarmuka RewardedVideoAdListener, juga dua peristiwa tambahan. Hal berikut dapat digunakan bersamaan dengan peristiwa yang disebut di atas.

@Override
public void onRewardServerSuccess() {
    // Rewarded video ad validated
}

@Override
public void onRewardServerFailed() {
    // Rewarded video ad not validated or no response from server  
}  

Harap diperhatikan - panggilan balik validasi server dapat terjadi setelah kartu akhir diabaikan oleh pengguna. Anda tidak boleh melakukan deallocate objek video berhadiah hingga setelah salah satu panggilan balik ini.

Langkah-Langkah Berikutnya