В настоящее время мы используем промежуточную рекламу admob в нашем приложении. На первом экране spla sh мы имеем:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
getWindow().setNavigationBarColor(getResources().getColor(R.color.colorPrimary));
}
setContentView(R.layout.activity_splash);
mContext = this;
requestNewInterstitialList();
}
private void requestNewInterstitialList() {
InterstitialAd mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId(getString(R.string.gl_start_app_inter));
mInterstitialAd.loadAd(new AdRequest.Builder().build());
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdOpened() {
super.onAdOpened();
mContext.finish();
}
@Override
public void onAdLoaded() {
super.onAdLoaded();
if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
mInterstitialAd.show();
}
}
});
}
Я запросил interstitial
с onCreate()
на нашем экране spla sh. Обратите внимание, что в interstitial
объявлении в onAdLoaded()
я запустил MainActivity.class
через intent
, и это обязательно запустит этот экран, не закрывая interstitial
объявление! Таким образом, он просто запустит новый экран в фоновом режиме и покажет рекламное объявление одновременно! После этого в onAdOpened()
объявления я только что закончил свою текущую активность (экран Spla sh), и это также не влияет на объявление interstitial
и в среднем, когда пользователь закрывает объявление на заднем главном экране, загружается!
Теперь ситуация такова, что у нас есть несколько спонсоров, и они хотят показывать встроенную рекламную рекламу в нашем приложении! Итак, я сделал это в DialogFragment
:
public class DF_Interstitial_Ad extends DialogFragment {
private LayoutInterstitialAdBinding mBinding;
private Context mContext;
private String adUrl;
private SimpleExoPlayer player;
private PlayerView exoPlayerView;
private long playBackPosition = 0;
private boolean isPlayerReady = false;
private boolean isOnPause = false;
private InterAdListener mAdListener = null;
public DF_Interstitial_Ad(@NonNull Context mContext, @NonNull String adUrl) {
this.mContext = mContext;
this.adUrl = adUrl;
mBinding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.layout_interstitial_ad, null,
false);
dataSourceFactory = buildDataSourceFactory();
exoPlayerView = mBinding.playerAd;
initializePlayer();
}
private class ModelInterStitialAd {
private String title;
private String description;
private String appIconUrl;
private String videoUrl;
private String installUrl;
private float rattings;
public String getTitle() {
return title;
}
public String getDescription() {
return description;
}
public String getAppIconUrl() {
return appIconUrl;
}
public String getVideoUrl() {
return videoUrl;
}
public String getInstallUrl() {
return installUrl;
}
public float getRattings() {
return rattings;
}
}
//region Data source...
private DataSource.Factory dataSourceFactory;
private MediaSource mediaSource;
private AdsLoader adsLoader;
private void releaseAdsLoader() {
if (adsLoader != null) {
adsLoader.release();
adsLoader = null;
Objects.requireNonNull(exoPlayerView.getOverlayFrameLayout()).removeAllViews();
}
}
private void releasePlayer() {
if (player != null) {
playBackPosition = player.getCurrentPosition();
player.release();
player = null;
mediaSource = null;
Log.i("Player>>>", "Player released");
}
if (adsLoader != null) {
releaseAdsLoader();
}
}
private DataSource.Factory buildDataSourceFactory() {
return MyApplication.getInstance().buildDataSourceFactory(null);
}
//endregion
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, R.style.FullScreenDialog);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Objects.requireNonNull(Objects.requireNonNull(getDialog()).getWindow()).addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
if (mAdListener != null) {
mAdListener.onShow();
}
playPausePlayer(true);
return mBinding.getRoot();
}
@Override
public void onResume() {
super.onResume();
isOnPause = false;
playPausePlayer(true);
}
@Override
public void onPause() {
super.onPause();
isOnPause = true;
playPausePlayer(true);
}
@Override
public void onDestroy() {
super.onDestroy();
if (mAdListener != null) {
mAdListener.onClose();
}
releasePlayer();
}
//region Player zone...
private void initializePlayer() {
player = new SimpleExoPlayer.Builder(mContext).build();
player.setPlayWhenReady(false);
exoPlayerView.setPlayer(player);
exoPlayerView.setBackgroundColor(Color.BLACK);
exoPlayerView.setUseController(false);
mBinding.viewMain.setOnClickListener(v -> {
if (isPlayerReady)
if (player != null) {
if (player.getPlaybackState() == Player.STATE_ENDED) {
mBinding.ivPlayVideo.setVisibility(View.VISIBLE);
playBackPosition = 0;
playPausePlayer(true);
} else {
if (player.getPlayWhenReady()) {
playPausePlayer(false);
mBinding.ivPlayVideo.setVisibility(View.VISIBLE);
} else {
playPausePlayer(true);
mBinding.ivPlayVideo.setVisibility(View.GONE);
}
}
}
});
player.addListener(new Player.EventListener() {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == Player.STATE_ENDED) {
mBinding.ivPlayVideo.setVisibility(View.VISIBLE);
} else if (playbackState == Player.STATE_READY) {
if (!isPlayerReady) {
isPlayerReady = true;
if (mAdListener != null) {
mAdListener.onLoaded();
}
}
if (isOnPause)
playPausePlayer(false);
}
}
});
prepareExoPlayer();
}
private void prepareExoPlayer() {
mediaSource = buildMediaSource(Uri.parse(adUrl));
player.prepare(mediaSource, true, false);
}
private MediaSource buildMediaSource(Uri uri) {
CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(VideoCache.getInstance(mContext),
dataSourceFactory);
@C.ContentType int type = Util.inferContentType(uri, null);
switch (type) {
case C.TYPE_HLS:
return new HlsMediaSource.Factory(cacheDataSourceFactory).setAllowChunklessPreparation(true).createMediaSource(uri);
case C.TYPE_OTHER:
return new ProgressiveMediaSource.Factory(cacheDataSourceFactory).createMediaSource(uri);
case C.TYPE_DASH:
case C.TYPE_SS:
default:
throw new IllegalStateException("Unsupported type: " + type);
}
}
private void playPausePlayer(boolean play) {
if (player != null) {
if (play) {
player.seekTo(playBackPosition);
player.setPlayWhenReady(true);
player.getPlaybackState();
mBinding.ivPlayVideo.setVisibility(View.GONE);
} else {
playBackPosition = player.getCurrentPosition();
player.setPlayWhenReady(false);
player.getPlaybackState();
mBinding.ivPlayVideo.setVisibility(View.VISIBLE);
}
}
}
//endregion
public void setmAdListener(InterAdListener mAdListener) {
this.mAdListener = mAdListener;
}
public boolean isLoaded() {
return isPlayerReady;
}
}
Это мой DialogFragment
, в котором я реализовал свое собственное промежуточное объявление. Итак, после этого я просто регулярно запрашиваю его, как и объявление interstitial
от Adobob с экрана spla sh, например:
private void requestMyInterstitialAd() {
DF_Interstitial_Ad dfInterstitialAd = new DF_Interstitial_Ad(mContext, "https://booads.s3.ap-south-1.amazonaws.com/output.mp4");
dfInterstitialAd.setmAdListener(new InterAdListener() {
@Override
public void onLoaded() {
super.onLoaded();
if (dfInterstitialAd != null && dfInterstitialAd.isLoaded()) {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
dfInterstitialAd.show(getSupportFragmentManager(), "SplashScreen");
}
}
@Override
public void onShow() {
super.onShow();
}
@Override
public void onClose() {
super.onClose();
}
});
}
Это показ следующего экрана (MainActivity) перед экраном, а не DialogFragment
рекламы! Так что делать? за показ рекламы перед пользователем и в то же время при открытии следующего действия за рекламой! Я уже пытался показывать объявление в activity
, а не DialogFragment
, но оно также не работает для меня!