2

Play ストアで安定した 15,000 ダウンロードのアプリを持っており、収益化の拡大を目指しています... インタースティシャル広告を追加したいと考えています。

私はすでにかなりまともに機能しているバナー広告を持っています...

インタースティシャル広告で私が抱えている問題は次のとおりです。

ユーザーがメイン メニューの [戻る] ボタンを押したときにこれらの広告を表示したい、つまりアプリを閉じたときに全画面広告を表示したい。(インタースティシャルまたはハウス広告、それが何と呼ばれようと、私が話しているのはフルスクリーンのものです。)

https://developers.google.com/mobile-ads-sdk/docs/admob/advanced

これを行うための基本的な教科書コードを試しましたが、方法がよくわかりません。問題は、アプリが広告を表示する前に閉じてしまうことです。

コードは次のとおりです。

import com.google.ads.*;

public class BannerExample extends Activity implements AdListener {

  private InterstitialAd interstitial;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Create the interstitial
    interstitial = new InterstitialAd(this, MY_INTERSTITIAL_UNIT_ID);

    // Create ad request
    AdRequest adRequest = new AdRequest();

    // Begin loading your interstitial
    interstitial.loadAd(adRequest);

    // Set Ad Listener to use the callbacks below
    interstitial.setAdListener(this);
  }

  @Override
  public void onReceiveAd(Ad ad) {
    Log.d("OK", "Received ad");
    if (ad == interstitial) {
      interstitial.show();
    }
  }
}

私が行った唯一の変更は、OnDestroy() に入れようとしたことです。ただし、広告が読み込まれて表示される前にアプリが閉じられ、閉じたり押されたりします。

そのまま、インタースティシャル広告が表示されます。上記のコードをメイン メニュー アクティビティの OnCreate に単純にコピー ペーストすると、そのアクティビティに広告が表示される場合と表示されない場合があります。その画面から離れても、後で表示されます。

繰り返しますが、本当の問題: アプリを閉じたときにインタースティシャル広告を表示しようとしています。そのため、ユーザーが終了しようとする前にロードする方法が必要です。私のアプリは非常に軽量です。さらに、テキスト ベースのアプリであるため、広告を表示するメニュー (メイン メニュー) との間を頻繁に行き来する可能性があります。そのため、そのアクティビティが開くたびにロードすると、パフォーマンスの問題が発生する可能性があります。

アプリの起動時に広告を読み込み、安全な場所に保管し、アプリが閉じたときにポップアップさせたい.

それで、これを行う方法は?

4

3 に答える 3

4

インタースティシャルが表示されないため、表示後にアクティビティを終了できません。

interstitial.show()また、onDestroy()メソッドを入れるのは良い考えではありません。

この質問に対する適切で完全な回答がまだないことに驚いているので、適切に機能しているコードを掲載します。

public class MainActivity extends Activity {

// AdMob full screen ad
private InterstitialAd interstitial;

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

    // AdMob full screen ad
    AdRequest adFullScreenRequest = new AdRequest.Builder().build();
    interstitial = new InterstitialAd(this);
    interstitial.setAdUnitId("myAdUnitId");
    interstitial.loadAd(adFullScreenRequest);
    interstitial.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            super.onAdClosed();
            finish();
        }

        @Override
        public void onAdFailedToLoad(int errorCode) {
            super.onAdFailedToLoad(errorCode);
            finish();
        }
    });
}

/**
 * Invoke displayInterstitial() when you are ready to display an interstitial.
 */
public void displayInterstitial() {
    if (interstitial.isLoaded()) {
        interstitial.show();
    } else {
        finish();
    }
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch(keyCode){
        case KeyEvent.KEYCODE_BACK:
            displayInterstitial();
            return true;
    }
    return super.onKeyDown(keyCode, event);
}

}

重要なことはAdListener、次の 2 つの状況を設定することです。

  • ユーザーが閉じた広告

  • 広告を読み込めませんでした

このような状況では、方法でアクティビティ (および広告) を閉じる必要がありますfinish()

もう 1 つの方法はfinish()、インタースティシャルがまだ読み込まれていない場合に使用することです。そこで使用しない場合finish()、インタースティシャルが読み込まれるまで backButton はまったく機能しません。インタースティシャルの読み込みには時間がかかります (約数秒)。これを解決する方法は他にもありますが、インタースティシャルがまだ読み込まれていない場合にアプリを閉じるだけの私の解決策を次に示します。

于 2015-02-17T14:00:10.120 に答える
0
@Override
public void onBackPressed() {
   Log.d(TAG, "onBackPressed Called");
       if (interstitial.isLoaded()) {
         interstitial.show();
        }

   finish();

}
于 2014-10-10T17:25:27.413 に答える