2014-05-24 5 views
5

Ich habe eine App, die eine Interstitial-Anzeige anzeigt, wenn bestimmte Aktivitäten geschlossen sind. Ich verwende eine andere Aktivität, um die Anzeige zu zeigen. Bis jetzt zeigt es die Anzeige korrekt, aber nichts geschieht, wenn ich auf die Anzeige klicke. Ich habe es auf vielen Geräten getestet und Betatester melden das gleiche Verhalten. Es gibt keine Fehler in den Protokollen. Das gleiche gilt, wenn ich ein Debug-Build oder ein signiertes APK verwende, das in den Play Store hochgeladen wird (wenn es darauf ankommt, wird es im Alpha-Status veröffentlicht). Ich verwende das neueste Play Store Services SDK.AdMob-Interstitial-Anzeige wird angezeigt, kann aber nicht darauf klicken

Was könnte der Grund dafür sein?

Meine Aktivität, die die Anzeige zeigt (ich die richtige Einheit-ID in dem eigentlichen Code verwenden)

import android.app.Activity; 
import android.content.Context; 
import android.location.Location; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.ProgressBar; 

import com.google.android.gms.ads.AdListener; 
import com.google.android.gms.ads.AdRequest; 
import com.google.android.gms.ads.InterstitialAd; 

public class AdFullScreen extends Activity { 

    private static final String TAG = "AdFullScreen"; 
    private static final String AD_UNIT_ID = "my-unit-id"; 

    private InterstitialAd interstitialAd; 
    ProgressBar prgrssBrAd; 

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

     setContentView(R.layout.ad_layout); 

     prgrssBrAd = (ProgressBar) findViewById(R.id.prgrssBrAd); 

     interstitialAd = new InterstitialAd(this); 
     interstitialAd.setAdUnitId(AD_UNIT_ID); 

     interstitialAd.setAdListener(new AdListener() { 
      @Override 
      public void onAdLoaded() { 
       Log.e(TAG, "onAdLoaded"); 
       prgrssBrAd.setVisibility(View.GONE); 
       if (interstitialAd.isLoaded()) { 
        interstitialAd.show(); 
       } else { 
        Log.e(TAG, "Interstitial ad was not ready to be shown."); 
        finish(); 
        return; 
       } 
      } 

      @Override 
      public void onAdFailedToLoad(int errorCode) { 
       String message = String.format("onAdFailedToLoad (%s)", 
         getErrorReason(errorCode)); 
       Log.e(TAG, message); 
       finish(); 
       return; 
      } 

      @Override 
      public void onAdClosed() { 
       finish(); 
       return; 
      } 

      @Override 
      public void onAdLeftApplication() { 
       Log.e(TAG, "onAdLeftApplication"); 
       finish(); 
       return; 
      } 

     }); 

     LocationManager locationManager = (LocationManager) this 
       .getSystemService(Context.LOCATION_SERVICE); 
     String locationProvider = LocationManager.GPS_PROVIDER; 
     Location lastKnownLocation = locationManager 
       .getLastKnownLocation(locationProvider); 
     if (lastKnownLocation == null) { 
      locationProvider = LocationManager.NETWORK_PROVIDER; 
      lastKnownLocation = locationManager 
        .getLastKnownLocation(locationProvider); 
      Log.e(TAG, "Last location not available by GPS"); 
     } else { 
      Log.e(TAG, "Last location available by GPS"); 
     } 

     // Check the logcat output for your hashed device ID to get test ads on 
     // a physical device. 
     AdRequest.Builder bldr = new AdRequest.Builder(); 

     if (lastKnownLocation != null) { 
      Log.e(TAG, "Last location available"); 
      bldr.setLocation(lastKnownLocation); 
     } else { 
      Log.e(TAG, "Last location not available by any provider"); 
     } 
     AdRequest adRequest = bldr.build(); 
     // Load the interstitial ad. 
     interstitialAd.loadAd(adRequest); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     // The rest of your onStart() code. 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     // The rest of your onStop() code. 
    } 

    /** Gets a string error reason from an error code. */ 
    private String getErrorReason(int errorCode) { 
     String errorReason = ""; 
     switch (errorCode) { 
     case AdRequest.ERROR_CODE_INTERNAL_ERROR: 
      errorReason = "Internal error"; 
      break; 
     case AdRequest.ERROR_CODE_INVALID_REQUEST: 
      errorReason = "Invalid request"; 
      break; 
     case AdRequest.ERROR_CODE_NETWORK_ERROR: 
      errorReason = "Network Error"; 
      break; 
     case AdRequest.ERROR_CODE_NO_FILL: 
      errorReason = "No fill"; 
      break; 
     } 
     return errorReason; 
    } 
} 

Das Layout (ich keine Layouts mit dem gleichen Ergebnis zu erzielen, versucht habe).

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ProgressBar 
     android:id="@+id/prgrssBrAd" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" /> 

</RelativeLayout> 

Ich würde jede mögliche Hilfe schätzen, die Sie zur Verfügung stellen können.

UPDATE

Es scheint, dass ich das Problem finden verwaltet. Es wurde auf die AndroidManifest Konfiguration bezogen werden: alte, Anzeigen sind nicht anklickbar:

<activity 
    android:name="com.google.android.gms.ads.AdActivity" 
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
    android:launchMode="singleInstance" /> 

Der war gut, funktioniert gut:

<activity 
    android:name="com.google.android.gms.ads.AdActivity" 
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" /> 

Sorry für die Verwirrung, ich kann nicht erinnern, wann ich diese Veränderung hat .

+0

war dies die einzige Änderung, die Sie gemacht haben? Ich habe die "gute Version", kann aber immer noch nicht auf die Anzeige klicken. –

+0

Ja, war es. Hast du es auf einem anderen Testgerät ausprobiert? – drk

+1

Ich habe schon eine Lösung für mein Problem gefunden. Ich habe eine Interstitial-Anzeige nach dem Aufruf der finish() -Funktion angezeigt. Die Anwendung zeigte die Anzeige, da sie zuvor geladen wurde, aber die Anwendung war bereits nicht mehr vorhanden, sodass der Klick nicht funktionierte. –

Antwort

0

es funktioniert definitiv

public class AdFullScreen extends Activity implements AdListener {  


private InterstitialAd interstitial; 
private String MY_INTERSTITIAL_UNIT_ID = "your unit id here"; 

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

    setContentView(R.layout.ad_layout); 

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((AdListener) this); 

@Override 
public void onDismissScreen(Ad arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onLeaveApplication(Ad arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onPresentScreen(Ad arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onReceiveAd(Ad add) { 
    // TODO Auto-generated method stub 
    if (add == interstitial) { 

     interstitial.show(); 
    } 
} 
Verwandte Themen