【问题标题】:Google Play Services: Ads loading issueGoogle Play 服务:广告加载问题
【发布时间】:2014-09-03 16:06:51
【问题描述】:

说明:- 根据 Google 的最新指南,我正在将我的应用程序与“Google Play 服务”SDK 集成。 早期它与独立的 admob SDK 集成。

问题:- 横幅广告和完整广告在显示其中之一时会正确显示。但是当两者都必须显示时,它们会产生不可预知的结果。

不可预测的结果? 是的,有时只加载横幅,有时只显示完整广告。两者都出现是非常罕见的。

修复:- 1. 我尝试在 Banner 和 interstitial 之间设置一些延迟,但效果并不好。但大多数时候结果仍然是不可预测的。

  1. 我对完整广告使用了异步任务。在 Background() 中延迟 2 秒,并在 PostExecute() 中加载广告。它给出了更好的结果。但在 10 次尝试中,两个广告都只显示了 7 次。其余的 3 次横幅或完整或没有加载。

以下是主要活动

的代码
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>

请告诉我如何解决这个问题?? 独立的 admob SDK 适用于两种广告类型。

【问题讨论】:

    标签: android admob google-play-services


    【解决方案1】:

    我看到您正在加载“真实”广告(即不是测试广告),因为您没有声明测试设备。我不是 100% 确定我要说什么,但这可能是问题的原因。在显示真实广告时,我认为您不会总是有来自 Admob/Google Play 服务的可用广告,因此有时您不会显示广告(我认为加载错误代码为 3,即“无填充”)。您可以在声明测试设备的同时进行测试,这会导致使用始终可用的测试广告。

    此外,建议在开发时使用测试设备,因为如果您在自己的广告上点击很多(错误地或只是为了测试),您可能会被 AdMob 禁止。

    要查看如何添加测试设备,请参阅此

    测试广告

    您应该在开发过程中使用测试广告,以避免产生虚假广告 印象。此外,您始终可以依靠测试广告 可用的。通过将您的散列设备 ID 传递给 AdRequest.Builder.addTestDevice:AdRequest 请求 = 新 AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) // 所有模拟器 .addTestDevice("AC98C820A50B4AD8A2106EDE96FB87D4") // 我的 Galaxy Nexus 测试手机 .build();

    logcat 将打印开发人员

    ice 的 MD5 哈希 ID 为方便起见,例如:使用 AdRequest.Builder.addTestDevice("AC98C820A50B4AD8A2106EDE96FB87D4") 到 在此设备上获取测试广告。

    (https://developers.google.com/mobile-ads-sdk/docs/admob/android/banner)

    请注意,如果您的手机不是英文版,有些人会说测试广告无法正常工作 (AdMob test ads shows only on English devices)

    编辑:您的应用程序的真实用户当然会使用真实的广告,因此他们也可能会遇到广告并非总是可用的“问题”,但这是正常的。您仍然可以定期安排新的加载(对于插页式广告,横幅会定期重新加载)以尝试应对这种情况。

    编辑 2:顺便说一下,这可能与您的问题有点无关,但人们通常强烈建议不要从 AdListener.onAdLoaded 方法显示广告,而是在您希望的时候手动调用它显示(如果 isLoaded 为真)。但这只是一个人体工程学考虑,不是一个错误的考虑

    【讨论】:

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