Admob激励广告未能显示,即使有响应也是如此。

3

我有一个用Java编写的Android应用程序,使用Admob广告网络通过观看悬赏广告来给用户提供硬币以使用应用程序。

我按照新API实现指南进行了操作。然而当我收到电子邮件的实施说明时,他们链接到旧的API。我应该实现哪个API呢?

另一方面,我启动了媒体处理,并上传了一个更新版本,其中包含一个按钮来查看可获得的悬赏广告并获取硬币,以及另一个按钮以获取免费硬币。只有Chocolate网络接受了我,其余的都被拒绝了。

这已经发布了一周了,每天我的前500个用户都会点击10或20次,在Admob上我得到了这些请求和100%的响应率,但只有1或2个广告被印出来。我不得不删除广告,因为没有硬币就无法使用该应用程序。

另一方面,我收到一份媒体处理的拒绝,他们询问我的流量,并告诉我他们将无法提供服务,因为它无法产生足够的广告流量。

我理解得对吗?这是否意味着由于我只有一个只有500个用户的应用程序,我无法通过Admob进行悬赏式广告交易? 如果在Facebook上会发生同样的事情吗? 我的插页式广告和横幅广告都可以正确工作,但悬赏通告不行。

我的实施代码(如果我编写错了)如下所示。使用测试ID可以工作,但不总是在第一次点击上(有时是mRewardedAd =null)。

build.graddle (module)

dependencies {
    implementation 'com.google.android.gms:play-services-ads:20.5.0'
}

AndroidManifest.xml

<application>
    <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-my-app-id"/>
</application>

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
    });
}

Shop.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    AdRequest adRequest = new AdRequest.Builder().build();
    RewardedAd.load(this, "ca-app-pub-my-rewarded-ad-id",
            adRequest, new RewardedAdLoadCallback() {
                @Override
                public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                    // Handle the error.
                    mRewardedAd = null;
                }
                @Override
                public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
                    mRewardedAd = rewardedAd;
                    mRewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() {
                        @Override
                        public void onAdShowedFullScreenContent() {
                            // Called when ad is shown.
                        }

                        @Override
                        public void onAdFailedToShowFullScreenContent(AdError adError) {
                            // Called when ad fails to show.
                        }

                        @Override
                        public void onAdDismissedFullScreenContent() {
                            // Called when ad is dismissed.
                            // Set the ad reference to null so you don't show the ad a second time.
                            mRewardedAd = null;
                        }
                    });
                }
            });
    Button btnAdd = findViewById(R.id.btnAdd);
    btnAdd.setOnClickListener(v -> {
        if (mRewardedAd != null) {
            Activity activityContext = Shop.this;
            mRewardedAd.show(activityContext, new OnUserEarnedRewardListener() {
                @Override
                public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
                    daCoinsAdd();
                }
            });
        } else {
            switch (languaje) {
                case "es": {
                    Toast toast = Toast.makeText(getApplicationContext(), "No cargó el anuncio.", Toast.LENGTH_SHORT);
                    toast.show();
                    break;
                }
                case "it": {
                    Toast toast = Toast.makeText(getApplicationContext(), "Non ha caricato l'annuncio.", Toast.LENGTH_SHORT);
                    toast.show();
                    break;
                }
                case "fr": {
                    Toast toast = Toast.makeText(getApplicationContext(), "Il n'a pas chargé l'annonce.", Toast.LENGTH_SHORT);
                    toast.show();
                    break;
                }
                default: {
                    Toast toast = Toast.makeText(getApplicationContext(), "It did not load the ad.", Toast.LENGTH_SHORT);
                    toast.show();
                    break;
                }
            }
        }
    });
}    

广告在第一次点击时无法加载,这是正常现象,因为我的应用程序是新的,并且我没有流量,或者我做错了什么吗?


能否请您在第一次点击时捕获日志并更新到您的问题中。 - Amod Gokhale
记录所有回调方法。 - Amod Gokhale
捕获错误日志。这是开始的最佳位置。错误代码将告诉您失败的错误是什么。在Admob控制台上,您的激励广告的填充率是多少?有时根据不同的国家/地区,没有足够的广告可用于展示。 - Amod Gokhale
@Amod Gokhale,我无法展示错误,因为我无法测试真实的广告单元ID。使用测试ID可以正常工作。在AdMob控制台上,我看到20个请求(每天),回答率接近100%,印象1或2。 - user15338837
我很累。我和一位谷歌雇员交谈过,但他们只告诉我我的ID没有显示广告。我要转投Facebook了。 - user15338837
显示剩余5条评论
1个回答

0

为了确保您的实现正确并且有效,请使用setTestDeviceIds()函数。每次使用此函数,不管是奖励广告还是简单横幅广告,它都会成功地为您加载一个测试广告。以下是代码:

MobileAds.initialize(this, new OnInitializationCompleteListener() {
        @Override
        public void onInitializationComplete(InitializationStatus initializationStatus) {
        }
    });

    String myTestID = "6A0C784094CAEC07E49258843B0FC530";
    if(App.TestMode) {
        List<String> testDeviceIds = Arrays.asList(myTestID);
        RequestConfiguration configuration = new RequestConfiguration.Builder().setTestDeviceIds(testDeviceIds).build();
        MobileAds.setRequestConfiguration(configuration);
    }

当然,你应该替换你的测试ID,以找到你的测试ID:

1- 加载你的广告集成应用并进行广告请求。

2- 检查logcat输出,查找类似下面的消息,它会显示你的设备ID以及如何将其添加为测试设备:

LogCat输出将类似于以下内容:

I/Ads: 使用RequestConfiguration.Builder.setTestDeviceIds(Arrays.asList("33BE2250B43518CCDA7DE426D04EE231"))在此设备上获取测试广告。

将你的测试设备ID复制到剪贴板中。

欲了解更多信息请访问此链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接