Даем пользователю приложения игровую валюту с помощью AdMob Rewarded Video

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




Предисловие


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

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

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

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


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


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

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


Шаг 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); } }

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