【问题标题】:Interstitial ads (admob) button to open second activity (page 2)用于打开第二个活动的插页式广告 (admob) 按钮(第 2 页)
【发布时间】:2022-06-13 18:04:17
【问题描述】:

我对 Admob 插页式代码在我的应用程序中的实现方式是否正确存在疑问。

目的是在按下 MainActivity 中的按钮打开 Activity 2 时显示插页式广告。

示例 MainActivity(按钮)

public void page1(View view)  
{

    Intent i = new Intent (this, activity2.class);
    startActivity(i);

 
    if (mInterstitialAd != null ) {
        mInterstitialAd.show(this);
    }

}

代码运行良好,但它是否正确?


另一个与节目相关的问题(...): 我看过这两个版本

mInterstitialAd.show(this);
or
mInterstitialAd.show(MainActivity.this);

哪个最好?

对不起,我刚开始,有点迷茫。

感谢您的回答。

【问题讨论】:

  • 是的,它的正确实现方式。您应该开始活动,然后显示插页式广告,以便广告出现在该活动之上。关闭广告后,activity2 将可见,供用户互动。
  • @AmmarAbdullah 你能解释一下这是正确的展示方式吗?第一个Intent 正在打电话或mInterstitialAd
  • @lina0i0-29 你的代码工作正常吗?mInterstitialAd 在进入 Activity2 之前显示?
  • 如果您在 startActivity 之前编写 show 方法,则在屏幕上显示插页式广告,并且由于活动开始,它会立即隐藏。这是违反。因此要避免在 startActivity 之后显示此调用或使用 onAdClosed 回调来避免隐藏广告
  • @AmmarAbdullah 感谢您的回答,另一个与节目相关的问题(...):我看过这两个版本。 mInterstitialAd.show(this);或 mInterstitialAd.show(MainActivity.this);哪个最好?

标签: java android android-studio admob ads


【解决方案1】:

根据Interstitial Ad implementation guide

您不应在 Activity 加载后展示插页式广告。插页式广告应在自然过渡点展示。您不应在页面/活动加载后展示广告。您必须首先展示广告并在广告被关闭/failed_to_show 时启动活动。

不允许的进程

允许的进程

  • 来自link 的图片让流程更易于理解

这是一个例子:

public void openNewActivity()  
{
    // Create the Intent
    Intent i = new Intent (this, activity2.class);

    // Check mInterstitialAd 
    if (mInterstitialAd != null ) {
        // Create callback 
        mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
            @Override
            public void onAdDismissedFullScreenContent() {
                // Don't forget to make mIntersttialAd null
                mInterstitialAd = null;

                // times to start the activity
                startActivity(i);
            }

            @Override
            public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) {
                // Don't forget to make mIntersttialAd null
                mInterstitialAd = null;

                // times to start the activity
                startActivity(i);
            }

        });
        //  Now show the ad
        mInterstitialAd.show(MainActivity.this);
    } else {
        // we don't have an interstitial ad to show
        // start the activity
        startActivity(i);
    }
}

希望这会有所帮助。

请注意,AdMob 并未将其任何文档中的任何代码转发为示例实施指南,根据其政策,这将是完美的。但是我上面提供的代码,似乎有点像上面link给出的指导。

【讨论】:

  • 非常感谢您的回答,此代码对您有用吗?我的选择很简单,我认为(不确定)它是正确的。 (我有点失落xd)
  • @lina0i0,在您的代码中,您调用了startActivity(i) 以显示activity2.class,然后您调用了mInterstitialAd.show()。这意味着广告将在activity2打开后立即显示。这似乎违反了 Admob 政策。检查我在帖子中提供的链接以获取更多详细信息。插页式广告应在自然断点处展示。表示用户选择一个操作 > 显示插页式 > 下一页/已加载活动。
  • 感谢您的耐心和回答,另一个问题不需要 - onAdClosed()?我在示例中没有看到它
  • 但是com.google.android.gms.ads.FullScreenContentCallback没有这样的方法,即onAdClosed()。检查此link 以获得指导。
【解决方案2】:

经过几次测试,我认为这两个版本都是正确的,但最后我会使用这段代码。 (播放服务广告:21.0.0)

你怎么看?

MainActivity.java

public class MainActivity extends Activity {


    private InterstitialAd mInterstitialAd;
    private static final String TAG = "InfoApp";
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);


     //***** Initialize the Mobile Ads SDK.*********** -//
        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });
        //**********************************************************//

      adrequest_interstitial = new AdRequest.Builder().build();

      InterstitialAd.load(this,ConfigPubli.Ads_interstitial, adrequest_interstitial,
                new InterstitialAdLoadCallback()
                {
                    @Override
                    public void onAdLoaded(@NonNull InterstitialAd interstitialAd)
                    {
                        mInterstitialAd = interstitialAd;
                        Log.i(TAG, "onAdLoaded");

                    }

                    @Override
                    public void onAdFailedToLoad(@NonNull LoadAdError loadAdError)
                    {
                        // Handle the error
                        Log.i(TAG, loadAdError.getMessage());
                        mInterstitialAd = null;
                    }

                });




     }


      public void adstot(Intent i){


        mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
            @Override
            public void onAdDismissedFullScreenContent() {
                mInterstitialAd = null;
                startActivity(i);
                
            }

            @Override
            public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) {
                mInterstitialAd = null;
                startActivity(i);

            }

        });
    }



    public void page2(View view){ //button

        Intent i = new Intent (this, Activity2.class);
        i.putExtra("valor","page2");

        int randomAd = (int)(Math.random()*10);
        if (mInterstitialAd != null && randomAd<=1) {

            adstot(i);
            mInterstitialAd.show(this);

        }
        else{


            startActivity(i);

        }

        
        
     }





}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多