2014-05-24 14 views
5

Mam aplikację, która wyświetla reklamę pełnoekranową po zamknięciu określonej aktywności. Używam innej aktywności, aby wyświetlić reklamę. Jak dotąd pokazuje reklamę poprawnie, ale nic się nie dzieje po kliknięciu reklamy. Przetestowałem to na wielu urządzeniach, a testerzy beta zgłaszają to samo zachowanie. W dziennikach nie ma błędów. To samo, jeśli używam kompilacji debugowania lub podpisanego pliku APK, który jest przesyłany do sklepu Play (jest opublikowany w stanie alfa, jeśli ma znaczenie). Używam najnowszego zestawu SDK do Play Store Services.Reklama pełnoekranowa AdMob jest wyświetlana, ale nie można jej kliknąć.

Jaki może być tego powód?

Moja aktywność który pokazuje reklamy (używam prawidłowy identyfikator urządzenia w rzeczywistym kodzie)

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; 
    } 
} 

The układ (starałem się nie używać żadnych układów z samych wyników).

<?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> 

Byłbym wdzięczny za każdą pomoc, którą możesz zapewnić.

UPDATE

Wydaje się, że udało mi się znaleźć problem. Było to związane z konfiguracją AndroidManifest: Staruch, reklamy nie są klikalne:

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

dobry, działa bez zarzutu:

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

Przepraszamy za zamieszanie, nie mogę sobie przypomnieć, kiedy to zrobiłem zmianę .

+0

Czy ta jedyna zmiana dokonaniu? Mam "dobrą wersję", ale nadal nie mogę kliknąć reklamy. –

+0

Tak, to było. Czy próbowałeś go na innym urządzeniu testowym? – drk

+1

Znalazłem rozwiązanie mojego problemu już. Po wywołaniu funkcji finish() wyświetlałem reklamę pełnoekranową. Aplikacja wyświetliła reklamę, ponieważ została wczytana wcześniej, ale aplikacja już nie istniała, więc kliknięcie nie zadziałało. –

Odpowiedz

0

będzie działać zdecydowanie

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(); 
    } 
} 
Powiązane problemy