Всем привет! В этой статье хотел бы поделиться с Вами своей наработкой, а именно показать как работает процесс вручения пользователю игровой валюты (например, монет) при помощи AdMob Rewarded Video.

image

Предисловие


Около 3-х месяцев назад я начал разработку своего собственного проекта. Я планирую выпускать Android приложения на тему — викторины. Совсем недавно (около 2-х недель назад) я опубликовал в Google Play свое приложение-викторину с географическим уклоном. Да, я прекрасно понимаю, что таких викторин сотни, а то и тысячи и все они в большинстве своем повторяют функционал друг друга.

Многие такие проекты, если они от инди-разработчика (как мне показалось) имеют недостаточно правильно настроенные этапы монетизации. Будем откровенны, если ты инди, то главная твоя цель — это заработок на показах рекламы, продажи дополнительного контента и прочего. С правильным подходом к контенту и рекламе в большинстве случаев приложение найдет свою аудиторию. Можно сказать, монетизация — это залог успеха любого проекта/приложения.

Для себя я выделил несколько видов монетизации: рекламные объявления (банерная, межстраничная, видео) и sharing в социальных сетях (Facebook, Twitter, VK).
Я считаю, что за все эти пункты пользователь вашего приложения должен получать вознаграждение, чтобы чувствовать некую удовлетворенность.

Как подключить банерную или межстраничную рекламу большинство из Вас знают и читали различные туториалы, но скорей всего еще не сталкивались с подключением видео рекламы, да и информации в сети по этому вопросу не так много.
Это меня и сподвигло написать данный пост.

Начало работы


Итак, реализацию AdMob Rewarded Video Add я покажу на тестовом проекте. Из него будет полностью понятно как ее можно будет добавить в свой имеющийся проект или просто поработать с ней в дальнейшем. Также, косвенно затронем тему SharedPreferences для хранения монет.

Шаг 1:
Нам нужно сделать layout в котором у нас будет TextView (показываем кол-во монет), кнопка Video (нажатие на нее запускает просмотр рекламы) и кнопка Game (при клике будем добавлять по одной монете пользователю):

image

Шаг 2:
Приступим к имплементации.
В этом шаге нам нужно: добавить зависимости в gradle, инициализировать AdMob рекламу и создать несколько констант.

Добавляем зависимости:

compile 'com.google.firebase:firebase-core:10.2.0'
compile 'com.google.firebase:firebase-ads:10.2.0'

Инициализируем Admob:

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        MobileAds.initialize(this, Constants.ADMOB_ID);

    }
}

Cоздаем класс Constants.java:

class Constants {

    private Constants() {
        throw new AssertionError();
    }

    static final String PREF_COINS = "pref_coins";

    static final String ADMOB_ID = "YOUR_ADMOB_ACCOUNT_ID_HERE";
    static final String AD_MOB_REWARDED_VIDEO_ID = "YOUR_ADMOB_ADD_ID";
    
    static final int REWARD_FOR_VIDEO = 20;

}

В константе 'static final int REWARD_FOR_VIDEO' мы указываем какое кол-во монет даем пользователю за просмотр видео рекламы.

Шаг 3:
В этом шаге мы опишем действия, которые должны происходить, а именно: создадим нужные поля и дезактивируем кнопку 'Video' в методе onCreate(), запишем значения наших монет в SharedPreference, напишем метод loadRewardVideo(), которой будет загружать видео рекламу.

public class MainActivity extends AppCompatActivity {

    private AdRequest mAdRequest;
    private RewardedVideoAd mRewardedVideoAd;

    private SharedPreferences mSharedPreferences;

    private TextView mTextCoins;
    private Button mButtonVideo;
    private int coins;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        coins = mSharedPreferences.getInt(PREF_COINS, 0);

        setContentView(R.layout.activity_main);

        mButtonVideo = (Button) findViewById(R.id.btn_video);
        mButtonVideo.setOnClickListener(clickListener);
        mButtonVideo.setEnabled(false);

        findViewById(R.id.btn_game).setOnClickListener(clickListener);

        mTextCoins = (TextView) findViewById(R.id.tv_coins);
        mTextCoins.setText(getResources().getQuantityString(R.plurals.coins, coins, coins));

        //AdMob Rewarded Video
        mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
        mRewardedVideoAd.setRewardedVideoAdListener(rewardedVideoAdListener);

        mAdRequest = new AdRequest.Builder()
                .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                .build();

        loadRewardVideo();

    View.OnClickListener clickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_video:
                    if (mRewardedVideoAd.isLoaded()) {
                        mRewardedVideoAd.show();
                    }
                    break;
                case R.id.btn_game:
                    coins++;
                    mTextCoins.setText(getResources().getQuantityString(R.plurals.coins,
                    coins, coins));
                    break;
            }
        }
    };

    private void loadRewardVideo() {
        mRewardedVideoAd.loadAd(AD_MOB_REWARDED_VIDEO_ID, mAdRequest);
    }

}

Шаг 4:
Создаем слушатель RewardedVideoAdListener. В методе onRewardedVideoAdLoaded() — мы активируем нашу кнопку, которую ранее выключили. Также, все основные свои действия проводим в методе onRewarded, в котором добавляем наши монеты за просмотр видео к имеющимся и по завершению рекламы показываем пользователю toast с текстом, что он получил награду в размере 20 монет.

 private RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() {
        @Override
        public void onRewardedVideoAdLoaded() {
            mButtonVideo.setEnabled(true);
        }

        @Override
        public void onRewardedVideoAdOpened() {

        }

        @Override
        public void onRewardedVideoStarted() {

        }

        @Override
        public void onRewardedVideoAdClosed() {
            mButtonVideo.setEnabled(false);
            loadRewardVideo();
        }

        @Override
        public void onRewarded(RewardItem rewardItem) {
            coins += REWARD_FOR_VIDEO;
            mTextCoins.setText(getResources().getQuantityString(R.plurals.coins, coins, coins));
            String msg = getResources().getQuantityString(R.plurals.congrats, REWARD_FOR_VIDEO,
                    REWARD_FOR_VIDEO);
            Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            mSharedPreferences.edit().putInt(PREF_COINS, coins).apply();
        }

        @Override
        public void onRewardedVideoAdLeftApplication() {

        }

        @Override
        public void onRewardedVideoAdFailedToLoad(int i) {

        }
};


В этом шаге мы проделали основные действия, которые добавляют логику по клику на кнопку, а также описали поведение видео-рекламы в слушателе RewardedVideoAdListener.

И последнее, добавим жизненные циклы к нашей видео рекламе:

@Override
    protected void onPause() {
        super.onPause();

        mSharedPreferences.edit().putInt(PREF_COINS, coins).apply();
        if (mRewardedVideoAd != null) {
            mRewardedVideoAd.pause(this);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();

        if (mRewardedVideoAd !=null) {
            mRewardedVideoAd.resume(this);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        if (mRewardedVideoAd != null) {
            mRewardedVideoAd.destroy(this);
        }
    }

И в целом это все. Результат можно посмотреть в этом видео:



P.S.: Еще раз напомню, что в этом примере я показал, как это сделать в тестовом проекте. В своем приложении это реализовано более ярко и красочно с использованием кастомных кнопок. Ссылку на свое приложение оставлю в комментарии к посту, чтобы не быть заблокированным за рекламу.

P.P.S.: Также, мне кажется, что в инди-разработке Android приложений в области викторин нужно иметь представление о работе с кастомными кнопками.

Правильная система монетизации и умение создать кнопку любой формы и вида — наше все. Свою следующую статью я бы хотел посветить именно этой теме и показать, как правильно работать с кнопками на девайсах с pre lollipop и выше.

Комментарии (9)


  1. StanZakharov Автор
    06.08.2017 19:55

    Ссылка на приложение, где можно посмотреть, как работает AdMob Rewarded Video:
    https://play.google.com/store/apps/details?id=com.mobilesoftproduction.guesscountry


    1. petrovichtim
      07.08.2017 08:08

      Ради этого статья и писалась?


      1. StanZakharov Автор
        07.08.2017 15:57

        Ну вот если бы ради этого, как считаешь, заморачивался бы я с новым проектом, чтоб показать как это реализовать? Без проблем могу убрать ссылку.


        1. petrovichtim
          07.08.2017 17:02

          Пример слишком простой, это всё есть в доке, чего-нибудь посложнее бы.


          1. StanZakharov Автор
            07.08.2017 17:16

            Я в данной статье описал конкретный кейс, как давать монеты за просмотр видео, отключать и включать кнопку, когда видео подгружено или нет. Думаю, это 90% случаев когда Video Ad применима.


  1. mokhin-denis
    07.08.2017 10:10

    А если у меня Unity?


    1. StanZakharov Автор
      07.08.2017 15:58

      Не знаю как с юнитит. Я пишу на нативном Андроиде, поэтому и опубликовал в хабе Разработка под Андроид.


    1. petrovichtim
      07.08.2017 17:05
      +1

      Были обертки для Unity


  1. TymofiiK
    12.08.2017 11:46

    Ни о чем, просто передран туториал.
    Я за то, чтобы на хабре решались сложные технические вопросы, а инди-разработчики пиарили свои игры в другом месте.