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ę .
Czy ta jedyna zmiana dokonaniu? Mam "dobrą wersję", ale nadal nie mogę kliknąć reklamy. –
Tak, to było. Czy próbowałeś go na innym urządzeniu testowym? – drk
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. –