#android #android-fragments #admob
#Android #android-фрагменты #admob
Вопрос:
У меня есть фрагмент, содержащий listview, я хочу показывать промежуточную рекламу, когда пользователь нажимает на элемент listview, я попробовал следующий код, но он не отображается :
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
......
mInterstitialAd = new InterstitialAd(mContext);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
mInterstitialAd.loadAd(new AdRequest.Builder().build());
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
} else {
mInterstitialAd.loadAd(new AdRequest.Builder().build());
}
}
});
......
return rootView;
}
Ответ №1:
Настройте новый класс, который устанавливает, загружает и показывает статические методы interstatialAd, как показано ниже:
public class AdSetup {
// Application context returned by function --> Application.get()
public static String TesttingDeviceID = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
final static InterstitialAd mInterstitialAd = new InterstitialAd(Application.get());
public static void setInterstitial() {
try {
if (mInterstitialAd.getAdUnitId() == null) {
mInterstitialAd.setAdUnitId(Application.get().getString(R.string.interstitialAd));
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void loadInterstatial() {
try {
setInterstitial();
AdRequest adRequestInter = new AdRequest.Builder().build();
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
Log.e("mInterstetial onloaded", "onloaded isLoaded" mInterstitialAd.isLoaded());
}
@Override
public void onAdFailedToLoad(int i) {
Log.e("mInterstetial onloaded", "onloaded onAdFailedToLoad");
}
@Override
public void onAdOpened() {
// super.onAdOpened();
}
@Override
public void onAdClosed() {
// super.onAdClosed();
}
@Override
public void onAdClicked() {
// super.onAdClicked();
}
});
mInterstitialAd.loadAd(adRequestInter);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void showInterstatial() {
try {
Log.e("mInterstetial show ", "isLoaded" mInterstitialAd.isLoaded());
if (mInterstitialAd.isLoaded() amp;amp; mInterstitialAd.getAdUnitId() != null) {
mInterstitialAd.show();
} else {
loadInterstatial();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Как вызвать эти методы при нажатии на элемент списка или onCreate () нового действия, чтобы соответствовать политике межпространственной рекламы:
AdSetup.showInterstatial(); // Show ad if already loaded else load Ad
AdSetup.loadInterstatial(); // Load new ad
Обязательно следуйте правилам, перечисленным в приведенных ниже ссылках:
Запрещенные промежуточные реализации
Загрузка или выход приложения Не размещайте промежуточную рекламу при загрузке приложения и при выходе из приложений, поскольку промежуточные объявления должны размещаться только между страницами содержимого приложения. Объявления не должны размещаться в приложениях, которые выполняются в фоновом режиме устройства или вне среды приложения. Пользователю должно быть ясно, с каким приложением связано объявление или в каком оно реализовано.
Рекомендуемые промежуточные реализации
Кроме того, добавьте класс приложения:
public class Application extends android.app.Application {
// public static DeviceName.DeviceInfo deviceInfo;
private static Application _instance;
@Override
public void onCreate() {
super.onCreate();
_instance = this;
}
//return the App context
public static Application get() {
return _instance;
}
}
Также объявите Application
класс в вашем AndroidManifest.xml
, как вы можете видеть ниже в первой строке:
<application
android:name=".Application"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:allowBackup="false"
android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/AppTheme">
Комментарии:
1. спасибо, я попробовал ваше решение, оно показывает мне ошибку, не удается разрешить метод ‘get ()’.
2. Я обновил ответ с помощью
Appliaction
класса и его объявления вmanifest
.Application.get()
определенный в приведенном выше методе класса возвращаетApplication
контекст. Как это вызывается при запуске приложения. Обязательно добавьте тестовый идентификатор interstatialAd для отладки, поскольку вы можете не видеть живую рекламу в приложении debug.3. хорошо, я сделал все это, но все еще не показываю, я думаю, проблема здесь не в том, как объявляются объявления, а в том, где поместить метод load and show во фрагмент, потому что он отлично работает при других действиях, также, когда я проверил журнал, я обнаружил эту ошибку: функциональность инициализации Google Mobile Ads SDK недоступна для этого сеанса. Запросы на рекламу могут быть сделаны в любое время.
4. Существует вероятность того, что реклама может еще не загружаться при каждой попытке показа. Что такое
error code
, когда реклама не загружается? Вы можете использовать следующие методы в onCreateView () или в onResume() методе Fragment ->AdSetup.showInterstatial(); AdSetup.loadInterstatial();
Метод onCreateView() будет вызываться только один раз при создании фрагмента.5. находятся ли ваши фрагменты внутри страницы просмотра?
Ответ №2:
Я только что реализовал это в своем коде. Это работает. В примере, который вы привели, я не видел, реализовали ли вы AdListener после AdRequest.Конструктор. Если нет, вот пример этого:
ExampleInterstitial.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
ExampleInterstitial.loadAd(new AdRequest.Builder().build());
}
});
Далее, в вашем примере оказалось, что у вас есть только промежуточная реклама для показа onItemClick, но есть ли у вас намерение перейти к новому действию, также установленному там? Я этого не видел. Ознакомьтесь с моим кодом ниже. Я устанавливаю намерение начать новое действие, а затем показываю добавление после. Просто мысль, потому что это работает для меня. Удачи!
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Intent intent;
intent = new Intent(getActivity(), ExampleActivity.class);
startActivity(intent);
if (ExampleInterstitial.isLoaded()) {
ExampleInterstitial.show();
}
else {
Log.d("TAG", "The interstitial wasn't loaded yet.");
}
}
});