【Android】10回に1回インタースティシャル広告を表示する


自作のAndroidアプリに初めてインタースティシャル広告を表示してみた。とあるActivityを10回起動する度に1度インタースティシャル広告を表示するという仕様。ベストプラクティスではないと思うがとりあえず書いておく。

RotationCounter

まずは10回に1回の頻度で特定の処理を実行するため、RotationCounterというクラスを作成する。

📄RotationCounter.java
public class RotationCounter {

    public interface Listener {
        void onRotate();
    }

    private final int limit;
    private int current = 0;

    public RotationCounter(int limit) {
        this.limit = limit;
    }

    public RotationCounter(int limit, int start) {
        this(limit);
        this.current = start;
    }

    public void increment(Listener listener) {
        if (++current == limit) {
            listener.onRotate();
            current = 0;
        }
    }
}

使用方法はこんな感じ。

📄InterstitialManager.java
RotationCounter counter = new RotationCounter(3);

...

// 3回incrementするとdo somethingする 
counter.increment(() -> {
    // do something
});

InterstitialManager

続いて、インタースティシャル広告を管理するクラスを実装する。この例では10回に1回処理を実行するが、最初の1周目だけは5回目で実行する。

public class InterstitialManager {

    private static final RotationCounter rotationCounter = new RotationCounter(10, 5);

    private final AdRequest adRequest;
    private final InterstitialAd interstitialAd;

    public InterstitialManager(Activity activity) {
        this.adRequest = buildAdRequest();
        this.interstitialAd = createInterstitialAd(activity);
    }

    private AdRequest buildAdRequest() {
        return new AdRequest.Builder().build();
    }

    private InterstitialAd createInterstitialAd(Activity activity) {
        InterstitialAd interstitialAd = new InterstitialAd(activity);
        interstitialAd.setAdUnitId(MY_AD_UNIT_ID);
        interstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                interstitialAd.show();
            }
        });
        return interstitialAd;
    }

    public void load() {
        rotationCounter.increment(() -> interstitialAd.loadAd(adRequest));
    }
}

Activity

あとはActivityから呼び出せばいい。

📄HogeActivity.java
public class HogeActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ad_top);

        // インタースティシャル広告を表示(10回に1回)
        new InterstitialManager(this).load();
        ....

どうせなら先に広告をloadしておいて、速やかに表示できるようにスタンバイしておく方が望ましいが、初版なのでとりあえずこれで良しとする。

関連する記事


コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください