Всем привет! В этой статье хотел бы поделиться с Вами своей наработкой, а именно показать как работает процесс вручения пользователю игровой валюты (например, монет) при помощи 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 рекламу и создать несколько констант.
Добавляем зависимости:
Инициализируем Admob:
Cоздаем класс Constants.java:
В константе 'static final int REWARD_FOR_VIDEO' мы указываем какое кол-во монет даем пользователю за просмотр видео рекламы.
Шаг 3:
В этом шаге мы опишем действия, которые должны происходить, а именно: создадим нужные поля и дезактивируем кнопку 'Video' в методе onCreate(), запишем значения наших монет в SharedPreference, напишем метод loadRewardVideo(), которой будет загружать видео рекламу.
Шаг 4:
Создаем слушатель RewardedVideoAdListener. В методе onRewardedVideoAdLoaded() — мы активируем нашу кнопку, которую ранее выключили. Также, все основные свои действия проводим в методе onRewarded, в котором добавляем наши монеты за просмотр видео к имеющимся и по завершению рекламы показываем пользователю toast с текстом, что он получил награду в размере 20 монет.
В этом шаге мы проделали основные действия, которые добавляют логику по клику на кнопку, а также описали поведение видео-рекламы в слушателе RewardedVideoAdListener.
И последнее, добавим жизненные циклы к нашей видео рекламе:
И в целом это все. Результат можно посмотреть в этом видео:
P.S.: Еще раз напомню, что в этом примере я показал, как это сделать в тестовом проекте. В своем приложении это реализовано более ярко и красочно с использованием кастомных кнопок. Ссылку на свое приложение оставлю в комментарии к посту, чтобы не быть заблокированным за рекламу.
P.P.S.: Также, мне кажется, что в инди-разработке Android приложений в области викторин нужно иметь представление о работе с кастомными кнопками.
Правильная система монетизации и умение создать кнопку любой формы и вида — наше все. Свою следующую статью я бы хотел посветить именно этой теме и показать, как правильно работать с кнопками на девайсах с pre lollipop и выше.
Предисловие
Около 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);
}
}
И в целом это все. Результат можно посмотреть в этом видео:
P.S.: Еще раз напомню, что в этом примере я показал, как это сделать в тестовом проекте. В своем приложении это реализовано более ярко и красочно с использованием кастомных кнопок. Ссылку на свое приложение оставлю в комментарии к посту, чтобы не быть заблокированным за рекламу.
P.P.S.: Также, мне кажется, что в инди-разработке Android приложений в области викторин нужно иметь представление о работе с кастомными кнопками.
Правильная система монетизации и умение создать кнопку любой формы и вида — наше все. Свою следующую статью я бы хотел посветить именно этой теме и показать, как правильно работать с кнопками на девайсах с pre lollipop и выше.
Комментарии (9)
mokhin-denis
07.08.2017 10:10А если у меня Unity?
StanZakharov Автор
07.08.2017 15:58Не знаю как с юнитит. Я пишу на нативном Андроиде, поэтому и опубликовал в хабе Разработка под Андроид.
TymofiiK
12.08.2017 11:46Ни о чем, просто передран туториал.
Я за то, чтобы на хабре решались сложные технические вопросы, а инди-разработчики пиарили свои игры в другом месте.
StanZakharov Автор
Ссылка на приложение, где можно посмотреть, как работает AdMob Rewarded Video:
https://play.google.com/store/apps/details?id=com.mobilesoftproduction.guesscountry
petrovichtim
Ради этого статья и писалась?
StanZakharov Автор
Ну вот если бы ради этого, как считаешь, заморачивался бы я с новым проектом, чтоб показать как это реализовать? Без проблем могу убрать ссылку.
petrovichtim
Пример слишком простой, это всё есть в доке, чего-нибудь посложнее бы.
StanZakharov Автор
Я в данной статье описал конкретный кейс, как давать монеты за просмотр видео, отключать и включать кнопку, когда видео подгружено или нет. Думаю, это 90% случаев когда Video Ad применима.