Объявление StartApp не показывается в моем приложении
По какой-то причине объявления StartApp не показываются в моем приложении, несмотря на то, что они следовали инструкциям по настройке в формате pdf, который они предоставили на своем сайте.
Я реализовал обратные вызовы на showAd()
а также loadAd()
Методы и отметил, что объявления получены, но не показаны. Позже я создал прямоугольный фон в представлении, где будет отображаться объявление в стартовом приложении. Я заметил, что представление с моей прямоугольной рамкой отображается, когда объявление загружено, но в нем нет содержимого рекламы. Смотрите прикрепленное изображение.
В журнале cat отображается сообщение "Объявление получено", но сообщения "Не показываются" и "Реклама скрыты" от моих обратных вызовов никогда не отображаются.
Когда я щелкаю по представлению "Реклама", происходит сбой моего приложения с исключением индекса массива за пределами границ, генерируемым в библиотеке StartApp.
Смотрите изображения и фрагменты кода.
My Show добавить работоспособный:
private Runnable showAdRunnable = new Runnable() {
@Override
public void run() {
/*
WAS HERE BUT STILL COULDNT SHOW
startAppAd.showAd(new AdDisplayListener() {
@Override
public void adHidden(Ad ad) {
Log.d(TAG, "Ad hidden "+ad.getErrorMessage());
}
@Override
public void adDisplayed(Ad ad) {
Log.d(TAG, "Ad displayed "+ad.getErrorMessage());
}
});
*/
startAppAd.loadAd (new AdEventListener() {
@Override
public void onReceiveAd(Ad ad) {
Log.d(TAG, "Ad received "+ad.getErrorMessage());
startAppAd.showAd(new AdDisplayListener() {
@Override
public void adHidden(Ad ad) {
Log.d(TAG, "Ad hidden "+ad.getErrorMessage());
}
@Override
public void adDisplayed(Ad ad) {
Log.d(TAG, "Ad displayed "+ad.getErrorMessage());
}
});
}
@Override
public void onFailedToReceiveAd(Ad ad) {
Log.d(TAG, "Ad not received "+ad.getErrorMessage());
}
});
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
showing = false;
}
};
мой onCreate()
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(final Bundle savedInstanceState) {
Log.d(TAG, "onCreate()");
StartAppAd.init(this, "XXXXXXX", "YYYYYYY");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// initialize the coin image and result text views
initViews();
// initialize the onclick listener
coinImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
tossCoin();
}
});
initSounds();
showing = true;
new Handler().postDelayed(showAdRunnable , 2*1000);
}
tossmyCoin()
метод. Это вызывается, когда пользователь нажимает на изображение монеты в моем приложении, чтобы бросить монету. Я хочу обновлять объявление каждый раз, когда пользователь бросает монету, поэтому я сделал:
private void tossCoin() {
....
if (!showing) {
showing = true;
new Handler().postDelayed(showAdRunnable , 2*1000);
}
}
Как показывается объявление:
Когда я нажимаю на раздел "Реклама", мое приложение вылетает, и журнал cat содержит следующее:
10-21 01:38:47.851: E/AndroidRuntime(23900): FATAL EXCEPTION: main
10-21 01:38:47.851: E/AndroidRuntime(23900): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
10-21 01:38:47.851: E/AndroidRuntime(23900): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
10-21 01:38:47.851: E/AndroidRuntime(23900): at java.util.ArrayList.get(ArrayList.java:311)
10-21 01:38:47.851: E/AndroidRuntime(23900): at com.startapp.android.publish.banner.banner3d.Banner3D.onTouchEvent(Unknown Source)
10-21 01:38:47.851: E/AndroidRuntime(23900): at android.view.View.dispatchTouchEvent(View.java:3885)
10-21 01:38:47.851: E/AndroidRuntime(23900): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:903)
5 ответов
Я не знаю, почему они предоставляют такую неправильную документацию. Каждая документация, на которую я ссылался, содержит один и тот же метод показа промежуточной рекламы, например:
startAppAd.showAd();
startAppAd.loadAd();
Порядок вызовов методов здесь сам по себе неправильный. Вот что работает для меня:
- Ты первый
loadAd()
с его AdEventListener. - На его
onReceiveAd()
метод, вызовитеshowAd()
метод.
Так будет примерно так:
startAppAd.loadAd(new AdEventListener() {
@Override
public void onReceiveAd(Ad ad) {
System.out.println("Ad received");
startAppAd.showAd();
}
}
Я сталкивался с подобной проблемой при добавлении баннеров StartApp. Добавления не были видны, несмотря на то, что все шаги, упомянутые в их документе, были выполнены.
Я решил проблему следующим образом. Убедитесь, что в добавлении баннера высота представления добавления должна быть 50dp(android:layout_height="50dp")
или больше. Добавления не будут видны в высоту меньше, чем это.
Надеюсь, поможет.
Я решил свою проблему с помощью обработчика..
new Handler().postDelayed(new Runnable()
{
@Override
public void run()
{
startAppAd.showAd();
startAppAd.loadAd();
}
}, 5000);
Я понял, что реклама отображается только в версии Release приложения, а не в варианте Debug. Для меня изменение варианта сборки с Release на Debug помогло.
Вы можете использовать этот способ
import com.searchboxsdk.android.StartAppSearch;
import com.startapp.android.publish.StartAppAd;
//После setContentView(R.layout.main_layout);
startAppAd = new StartAppAd(this);
StartAppAd.init(this, "App ID", "Dev ID");
StartAppSearch.init(this, "App ID", "Dev ID");
// и использовать эти методы
@Override
public void onResume() {
startAppAd.onResume();
super.onResume();
}
@Override
public void onBackPressed() {
startAppAd.onBackPressed();
super.onBackPressed();
}
@Override
public void onPause() {
super.onPause();
startAppAd.onPause();
}
// также добавляем активность в manifest.xml
<activity
android:name="com.startapp.android.publish.list3d.List3DActivity"
android:taskAffinity="packagename.AppWall"
android:theme="@android:style/Theme" />
<activity
android:name="com.startapp.android.publish.AppWallActivity"
android:configChanges="orientation|keyboardHidden"
android:taskAffinity="packagename.AppWall"
android:theme="@android:style/Theme.Translucent" />
// добавить разрешения
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.GET_TASKS"/>