Android app启动页广告

一款app刚出世的时候是没有广告的,流畅的速度和粘性的设计,让这款app使用的人越来越多,这个时候,广告就诞生了,app中加入广告的位置有很多,最常见的就是启动页的广告,首页的banner的轮询广告,其他页面的一些角标广告。今天我这里实现的是一个Android的启动页的广告,支持倒计时,和跳过,点击进入广告的详情页。今天记录下来,也给大家参考。


首先来看效果图:




我们都知道现在大多app启动的时候,都有一个loading的activity,就比如今日头条,高德地图那样的,如下图,在这我们叫它StartLoadingActivity,一般会在这个界面停留1秒中的时间,我们会在这里做一些全局的初始化的操作,或者是一些全局的广播的注册等等。
我的思路:
1、在StartLoadingActivity中去后台检查,有没有广告的配置
2、如果没有,1s后直接进入主页,如果有,就去下载广告图片,并存储广告的其他信息
3、app下次打开的时候,去检查本地缓存,和数据库,如果有广告的信息,并且没有过期,就显示广告。
这儿有个问题,就是先检查本地缓存还是先去后台检查有没有广告的配置,我个人的做法是先去检查本地是否有广告的缓存,这样保证最新配置的广告在下次app启动的时候显示。

下面来说说具体的实现:

广告的实体类中主要有以下字段:

<span style="white-space:pre">	</span>private String androidimg;//广告图片的url
	private String end;// 过期时间的时间戳
	private String id;
	private String rank;//广告的排序
	private String shorturl;
	private String title;//广告的标题
	/**
	 * 广告类型 1:文字 2:图片 3:图文
	 */
	private String typeid;
	private String url;//点击广告跳转的url
	private String flag;//0:广告可点击    1:广告不可点    2:app端删除这条广告的信息(数据库/图片缓存)

StartLoadingActivity类的xml文件

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

    <ImageView
        android:id="@+id/iv_welcome_img"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/tt"
        android:scaleType="fitXY" />

    <RelativeLayout
        android:id="@+id/rl_show_ad"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:visibility="gone"
        >

        <ImageView
            android:id="@+id/iv_ad_img"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="fitXY" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="40dp"
            android:layout_marginBottom="30dp"
            android:paddingLeft="7dp"
            android:paddingRight="7dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            android:orientation="horizontal"
            android:background="@drawable/bg_ad_skip" >

            <TextView
                android:id="@+id/tv_time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="19sp"
               	android:textColor="#ffffffff"
                />

            <Button
                android:id="@+id/ll_ad_skip_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@null"
                android:layout_marginLeft="3dp"
                android:textColor="#ffffffff"
                android:text="跳过 "
                android:textSize="19sp"
                 />
        </LinearLayout>
    </RelativeLayout>

</RelativeLayout>

然后在 StartLoadingActivity类中,去查询数据库和本地缓存,有没有广告的信息,如果有的话,就取本地缓存的图片装换成bitmap,然后加载到imageview中,

alist = AdvertisementDao.getAdDataList();//查询广告信息
		if(alist != null && alist.size()>0){
			mAdver = alist.get(alist.size()-1);
			File f =new File(mAdver.getAndroidimg());//获取最新的一条广告信息
			if(f.exists() && !isDeadline(alist.get(alist.size()-1))){//判断文件存在,并且没有过期
				Bitmap b = AdvertiseUtil.scaleImgSize(f);
				adImg.setImageBitmap(b);
				adIsFinish = true;
				b = null;
			}
		}


现在只需要在加载界面去判断,如果adIsFinish为true,就把adImg显示出来。点界面的跳过,就提前结束倒计时,跳转到主界面即可。

那么问题又来了,如果时间长了,我们的数据库中和本地文件的缓存中肯定有很多的数据,这样肯定不好,这儿我用一个线程去检查数据库中所有的数据,然后看他们的end是否过期,如果过期就把这条数据和它对应的本地文件删了。这样就不会有数据冗余的情况了。

// 启动一个线程,去删除过期的广告信息
		new Thread(new Runnable() {
			@Override
			public void run() {
				for (Ad ad : alist) {
					if (isDeadline(ad)) {
						// 如果当前广告过期,则删除数据库中的记录,和本地的文件
						AdvertiseUtil.deleteCachedAdverImg(context, ad);
						AdvertisementDao.deleteAd(ad);
					}
				}
			}
		}).start();
	}

到此,一个简单的启动页广告就ok了,当然,如果用到实际项目中的话,还需要大家继续优化。

源码下载

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值