liyubing

feat(广告):添加广告中心的挂角广告投放规则

... ... @@ -38,4 +38,7 @@ export class SpConstants{
//启动页数据存储key
static APP_LAUNCH_PAGE_DATA_MODEL = 'app_launch_page_data_model'
//频道信息流页面左右挂角
static APP_PAGE_CORNER_ADV = 'app_page_corner_adv_'
}
\ No newline at end of file
... ...
... ... @@ -68,14 +68,9 @@ export interface CompAdvBean {
displayPriority: number;
/**
* 展示的次数
*/
showCount: number;
/**
* 页面id
*/
pageId: String ;
pageId: String;
/**
* 开屏广告-显示时长
... ... @@ -97,6 +92,4 @@ export interface CompAdvBean {
displayRound: number;
}
... ...
... ... @@ -65,7 +65,6 @@ export struct PageComponent {
this.pageModel.pullDownRefreshText, this.pageModel.pullDownRefreshHeight)
})
}
LazyForEach(this.pageModel.compList, (compDTO: CompDTO, compIndex: number) => {
ListItem() {
Column() {
... ... @@ -124,9 +123,10 @@ export struct PageComponent {
if (this.pageAdvModel.isShowAds) {
if (this.pageAdvModel.pageCornerAdv.matInfo != null) {
// 页面右边挂角
// 广告中心的挂角广告
this.drawPageCornerAdvView(1, 1 == this.pageAdvModel.isRightAdv)
} else if (this.pageAdvModel.pageCornerContentInfo.advert != null) {
// 展现中心的挂角广告业务
this.drawPageCornerAdvView(2, 1 == this.pageAdvModel.isRightAdv)
}
}
... ...
import { PageInfoDTO } from 'wdBean/Index';
import { AdvRuleBean, CompAdvBean } from 'wdBean/src/main/ets/bean/adv/AdvsRuleBean';
import { DateTimeUtils, SPHelper } from 'wdKit/Index';
import { ArrayList } from '@kit.ArkTS';
import { SpConstants } from 'wdConstant/Index';
/**
* @Description: 处理页面的广告业务
... ... @@ -18,16 +21,11 @@ export default class PageAdModel {
// 1:右边;2:左边 -> 默认右边
pageCornerContentInfo: AdvRuleBean = {} as AdvRuleBean
// 展现中心业务信息
/**
* 解析广告资源
* @param pageInfo
*/
analysisAdvSource(pageInfo: PageInfoDTO): void {
async analysisAdvSource(pageInfo: PageInfoDTO) {
if (pageInfo.hasAdInfo === 1 && pageInfo.cornersAdv != null) {
// 优先展示展现中心广告
... ... @@ -55,12 +53,26 @@ export default class PageAdModel {
} else if (pageInfo.cornersAdv2 != null && pageInfo.cornersAdv2.length > 0) {
// 广告中心-挂角广告信息
let cornersAdv2 = pageInfo.cornersAdv2
// 获取
let showCompAdvBean = cornersAdv2[0]
if (cornersAdv2.length == 0) {
return
}
// 加工处理广告中心的广告数据
let pageCoreAdvArray = this.treatPageInfoAdsData(cornersAdv2);
let advLength = pageCoreAdvArray.length;
let pageId = pageInfo.id.toString();
let a = 0;
if (advLength > 1) {
a = await this.calPageAdvIndex(pageId,advLength)
}
// 获取投放
let showCompAdvBean = pageCoreAdvArray.convertToArray()[a]
if (showCompAdvBean.matInfo == null) {
return
}
this.saveReleaseAdvIndex(pageId, a)
//
let slotInfo = showCompAdvBean.slotInfo;
let postion = slotInfo.position
... ... @@ -76,4 +88,84 @@ export default class PageAdModel {
}
}
/**
* 计算投放广告的序列号
* @param pageId
* @param advLength
* @returns
*/
private async calPageAdvIndex(pageId: string , advLength: number): Promise<number>{
let index = await this.obtainReleaseAdvIndex(pageId);
let a = await index + 1;
if (a >= advLength) {
a = 0;
}
return a;
}
/**
* 获取已投放挂角广告的编号
* @param pageId
* @returns
*/
private async obtainReleaseAdvIndex(pageId: string): Promise<number> {
let index: number = await SPHelper.default.get(SpConstants.APP_PAGE_CORNER_ADV + pageId, -1) as number;
return index;
}
/**
* 存储已经投放广告的编号
* @param pageId
* @param index
*/
private async saveReleaseAdvIndex(pageId: string, index: number) {
await SPHelper.default.save(SpConstants.APP_PAGE_CORNER_ADV + pageId, index)
}
/**
* 删除数据
* @param pageId
*/
private async clearHistoryAdvIndex(pageId: string){
SPHelper.default.deleteSync(SpConstants.APP_PAGE_CORNER_ADV + pageId)
}
private checkPageCornerAdv(pageId: string): Promise<boolean> {
let haveData = SPHelper.default.has(SpConstants.APP_PAGE_CORNER_ADV + pageId)
return haveData
}
/**
* 对广告中心的广告 数据按不同维度加工 筛选出符合的数据
* @param cornersAdv2 页面的广告数据
* @param pageId 所在页面pageid
*/
private treatPageInfoAdsData(cornersAdv2: CompAdvBean[]): ArrayList<CompAdvBean> {
// 按时间维度过滤出广告数据
let compAdsArray: ArrayList<CompAdvBean> = new ArrayList();
let serverTimeLong: number = DateTimeUtils.getTimeStamp();
for (let advBean of cornersAdv2) {
let startLong = advBean.startTime;
let endLong = advBean.endTime;
if (serverTimeLong >= startLong && serverTimeLong <= endLong) {
//符合开始时间和结束时间要求
compAdsArray.add(advBean)
}
}
//按展现优先级维度 数值越小,等级越高
if (compAdsArray.length > 1) {
//B、按展现优先级维度 数值越小,等级越高
compAdsArray.sort((a: CompAdvBean, b: CompAdvBean) => a.displayPriority - b.displayPriority)
}
return compAdsArray;
}
}
\ No newline at end of file
... ...
... ... @@ -51,12 +51,6 @@ export default class PageModel {
// keyGenerator相关字符串,用于刷新list布局
timestamp: String = '1';
// //左右挂角广告对象
// pageCornerAdv:CompAdvBean = {} as CompAdvBean // 挂角广告
// isShowAds : boolean = false;
// isRightAdv : number = 1;// 1:右边;2:左边 -> 默认右边
// pageCornerContentInfo:AdvRuleBean = {} as AdvRuleBean // 展现中心业务信息
/**
* 简单复制业务数据
... ...