[JAVA] Установка AdMob для игры на libGDX

Дата публикации:21 мая 2014 г. 0:38:42

Здравствуйте! Не так давно начал изучение Java и фреймворка libGDX и вот настало время об этом написать. Сегодня я расскажу вам, как настроить показ рекламы от площадки AdMob в вашей игре. Приступим!

 Сначала идем в AdMob и создаем новую площадку. Указываем Android приложение. Оттуда мы возьмем ID.

Затем открываем манифест вашего Android приложения и добавляем туда следующие строки:

 

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<activity android:name="com.google.android.gms.ads.AdActivity" 
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
<meta-data android:name="com.google.android.gms.version" 
            android:value="@integer/google_play_services_version"/>


Итак, что же мы сделали? Мы добавлили разрешения для приложения на связь с сетью, а также добавили активити наших объявлений.

Не забудьте изменить параметр minSdkVersion с 8 на 9.

Закрываем манифест и открываем наш класс AndroidLauncher.

В нем пишем что-то вроде этого:

public class AndroidLauncher extends AndroidApplication implements IActivityRequestHandler {
    
    private final int SHOW_ADS = 1;
    private final int HIDE_ADS = 0;
    
    protected AdView adView;
    protected View gameView;
    
    protected Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch(msg.what) {
            case SHOW_ADS:
                adView.setVisibility(View.VISIBLE);
                break;
            case HIDE_ADS:
                adView.setVisibility(View.GONE);
                break;
            }
        }
    };
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();

        RelativeLayout layout = new RelativeLayout(this);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

        View gameView = initializeForView(new YOUR_GAME_CLASS(this), config);
        
        layout.addView(gameView);

        adView = new AdView(this);

        // В файле strings.xml создайте строку с вашим publisher_id

        adView.setAdUnitId(getResources().getString(R.string.publisher_id));
        
        // Устанавливаем размер объявления

        adView.setAdSize(AdSize.BANNER);
        
        AdRequest adRequest = new AdRequest.Builder()
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) // Указываем тестовый режим на эмуляторе
        .addTestDevice("XXXXXXXXXXXXXXXXXXXXXXX") // ID устройства. Его видно в логе после первого запуска
        .build();

        // Закружаем объявления

        adView.loadAd(adRequest);

        RelativeLayout.LayoutParams adParams = 
            new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
                 RelativeLayout.LayoutParams.WRAP_CONTENT);
        adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
        adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

        layout.addView(adView, adParams);

        setContentView(layout);
    }
    
    @Override
    public void showAds(boolean show) {
        handler.sendEmptyMessage(show ? SHOW_ADS : HIDE_ADS);
    }
    
    @Override
    public void onResume() {
        super.onResume();
    if (adView != null) {
        adView.resume();
    }
    }

    @Override
    public void onPause() {
    super.onPause();
        if (adView != null) {
            adView.pause();
    }
    }
    
    @Override
    public void onDestroy() {
        if (adView != null) {
            adView.destroy();
    }
    super.onDestroy();
    }
}

 Итак, после этого не забываем сделать импорт (в Eclipse Shift + Ctrl + O). Далее, теперь нужно создать интерфейс IActivityRequestHandler.

public interface IActivityRequestHandler {
    public void showAds(boolean show);
}

Далее, идем в наш основого приложения основной класс и добавляем в него:

private IActivityRequestHandler myRequestHandler;

// Добавляем конструктор
public YOUR_GAME_CLASS(IActivityRequestHandler handler) {
    myRequestHandler = handler;
}

// По желанию можно добавить открытый метод для доступа к handler
public IActivityRequestHandler getHandler() {
    return myRequestHandler;
}

Далее, ловим ошибки в Desktop приложении (и если у вас есть iOS приложение -- в нем тоже). Правим их.

DesktopLauncher:

public class DesktopLauncher implements IActivityRequestHandler {
    
    private static DesktopLauncher application;
    
    public static void main(String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        
        if (application == null) {
            application = new DesktopLauncher();
        }
        
        new LwjglApplication(new YOUR_GAME_CLASS(application), config);
    }
    
    @Override
    public void showAds(boolean show) {
        // TODO Auto-generated method stub
    }
}

iOSLauncher:

public class IOSLauncher extends IOSApplication.Delegate implements IActivityRequestHandler {
    @Override
    protected IOSApplication createApplication() {
        IOSApplicationConfiguration config = new IOSApplicationConfiguration();
        return new IOSApplication(new YOUR_GAME_CLASS(this), config);
    }

    public static void main(String[] argv) {
        NSAutoreleasePool pool = new NSAutoreleasePool();
        UIApplication.main(argv, null, IOSLauncher.class);
        pool.close();
    }

    @Override
    public void showAds(boolean show) {
        // TODO Auto-generated method stub
    }
}

Теперь, чтобы скрыть ваши объявления на каком-то экране вызываем:

game.getHandler().showAds(false);

А чтобы показать:

game.getHandler().showAds(true);

И напоследок. Я долго не мог понять, почему у меня выскакивает ошибка 400. Выяснилось, что я неверно указывал publisher_id. Если что, он имеет вид: ca-app-pub-xxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxx (где первые символы, ваш ID, а вторые ID рекламного блока). Его можно получить в разделе Монетизация.

 

Полезные ссылки по теме:

 

Спасибо за внимание!

Метки:java, libgdx, admob, tutorial, урок, howto