说明 - 我正在将我的应用程序与#34; Google Play Service" SDK根据Google的最新指南。 之前它与独立的admob SDK集成。
ISSUE: - 当展示其中一个时,横幅广告和完整广告会正确显示。但是当两者都必须展示时,它们会产生不可预测的结果。
不可预知的结果? 是的,有时只加载Banner,有时只显示完整广告。它们都很少见。
FIX: - 我尝试在Banner和插页式广告之间做出一些延迟,并且得到了更好的结果。但大多数时候结果仍然无法预测。
以下是主要活动
的代码package com.example.adtest_new;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
public class MainActivity extends Activity
{
Context myCont=null;
private InterstitialAd interstitial = null;
AdRequest adr;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//Get the view from activity_main.xml
setContentView(R.layout.activity_main);
myCont = this;
//--------------BANNER AD----------------------------------
//Locate the Banner Ad in activity_main.xml
AdView adView = (AdView) this.findViewById(R.id.adView);
// Request for Ads
AdRequest adRequest = new AdRequest.Builder().build();
// Load ads into Banner Ads
adView.loadAd(adRequest);
//--------------BANNER AD----------------------------------
//Fix-1 (Did not work)
try{Thread.sleep(2*1000);}catch(Exception e){}
//Fix-2 (Did not work)
//Called Asynch task here(put delay of 2 seconds in background() and loaded full ad in postexecute())
//--------------FULL AD----------------------------------
//Prepare the Interstitial Ad
interstitial = new InterstitialAd(MainActivity.this);
//Insert the Ad Unit ID
interstitial.setAdUnitId("ca-app-pub-465697675827xxxx/xxxxxxxxxx");
adr = new AdRequest.Builder().build();
//Load ads into Interstitial Ads
//Prepare an Interstitial Ad Listener
interstitial.setAdListener(new AdListener()
{
public void onAdLoaded()
{
//System.out.println("!!! Full Ad loaded !!!");
Toast.makeText(myCont, "!!! Full Ad loaded !!!", Toast.LENGTH_SHORT).show();
//Call displayInterstitial() function
displayInterstitial();
}
});
interstitial.loadAd(adr);
//--------------FULL AD----------------------------------
}
public void displayInterstitial() {
// If Ads are loaded, show Interstitial else show nothing.
if (interstitial.isLoaded())
{
interstitial.show();
}
}
}
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/openedWindows"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical" >
<TextView
android:id="@+id/completePath"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_marginTop="0dp"
android:layout_marginLeft="3dp"
android:text="/mnt/sdcard"
android:textColor="#ff2d8df1"
android:textSize="16dip"
android:textStyle="bold"
android:typeface="sans"/>
<View
android:id="@+id/bar0"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_marginTop="0dp"
android:background="#ffb2cb39"
android:layout_marginBottom="0dp"/>
<View
android:id="@+id/bar1"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_marginTop="0dp"
android:background="#ffb2cb39"
android:layout_marginBottom="1dp"/>
<RelativeLayout
android:id="@+id/temp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:orientation="vertical">
<Button
android:id="@+id/selectAll"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_gravity="left"
android:layout_marginBottom="1dp"
android:layout_marginLeft="15dp"
android:layout_alignParentLeft="true"
android:background="@drawable/button_green"
android:textSize="15dip"
android:text="BUTTON1"
android:paddingLeft="10px"
android:paddingRight="10px"
android:textColor="#ffffff"
android:textStyle="bold" />
<Button
android:id="@+id/selectBtn"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_marginRight="15dp"
android:layout_marginBottom="1dp"
android:layout_alignParentRight="true"
android:background="@drawable/button_green"
android:textSize="15dip"
android:text="BUTTON2"
android:paddingLeft="10px"
android:paddingRight="10px"
android:textColor="#ffffff"
android:textStyle="bold" />
</RelativeLayout>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_above="@+id/tableRow2"
android:background="#444444"
android:layout_marginBottom="0dp"/>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-465697675827xxxx/xxxxxxxxxx"
/>
</TableRow>
</LinearLayout>
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.adtest_new"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<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"/>
</application>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
请告诉我如何解决这个问题? Standalone admob SDK适用于这两种广告类型。
答案 0 :(得分:0)
我看到你正在加载&#34;真实&#34;广告(即不是测试广告),因为您没有声明测试设备。我不是100%肯定我会说什么,但这可能是问题的原因。在展示真实广告时,我认为您不会总是有来自Admob / Google Play服务的广告,因此有时您不会展示广告(我认为加载错误代码是3,这是&#34;没有填充&#34; )。您可以在声明测试设备时进行测试,从而导致使用始终可用的测试广告。
此外,建议在开发时使用测试设备,因为如果您在自己的广告上点击很多(错误或只是为了测试),您可能会被禁止使用AdMob。
要了解如何添加测试设备,请参阅此
测试广告
您应该在开发过程中使用测试广告,以避免产生错误 印象。此外,您始终可以依赖测试广告 可用。通过将散列的设备ID传递给,设置测试广告 AdRequest.Builder.addTestDevice:AdRequest request = new AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)//所有模拟器 .addTestDevice(&#34; AC98C820A50B4AD8A2106EDE96FB87D4&#34;)//我的Galaxy Nexus测试手机 .build();
logcat将打印dev
为方便起见,使用ice的MD5哈希ID,例如:使用 AdRequest.Builder.addTestDevice(&#34; AC98C820A50B4AD8A2106EDE96FB87D4&#34;)来 在此设备上获取测试广告。
(https://developers.google.com/mobile-ads-sdk/docs/admob/android/banner)
如果您的手机不是英文(AdMob test ads shows only on English devices),请注意有人说测试广告无法正常运作
编辑:当然,您应用的真实用户将使用真实广告,因此他们也可能会遇到问题&#34;不总是可用的广告,但这是正常的。您仍然可以重新安排新的加载(对于插页式广告,横幅会定期重新加载)以尝试应对我的想法。
编辑2:顺便说一句,这可能与您的问题有点无关,但人们通常强烈建议不要使用AdListener.onAdLoaded方法显示广告,而是在您希望它出现时手动调用此广告显示(如果isLoaded为true)。但这只是一个符合人体工程学的考虑因素,而不是一个错误的智者