微信小程序中限制激励式视频广告位显示次数(实现思路)


Posted in Javascript onDecember 06, 2019

微信小程序自从支持激励式视频广告位以后,很多小程序为了变现都加入了此广告位,广告正常观看结束的次数越多就越赚钱,但是观看次数的比率过高也会面临封号的风险,那么如何才能规避这个风险呢?

实现思路:限制每个用户当天观看激励式视频广告位的次数,如果用户当天观看广告位超过了一定的次数就不再显示广告位,用户第二天打开小程序时清空第一天观看广告的次数,下面用实例代码来说明。

第一步:在小程序的 onLaunch 里获取本地存储的上一次观看激励视频广告保存的时间,并获取本地存储观看广告位的次数,如果上一次观看激励视频广告时间的晚上12点小于当前时间,则将观看广告位的次数清0;

onLaunch: function() {
 // 获取激励视频广告位加载的次数
 var count = wx.getStorageSync('showRewardedVideoAdCount');
 if (!count) {
 wx.setStorage({
 key: 'showRewardedVideoAdCount',
 data: 0,
 })
 };
 // 上次观看激励视频广告保存的时间
 var lastSaveTime = wx.getStorageSync('saveVideoAdCountTime');
 if (lastSaveTime) {
 // 计算最后一次保存时间晚上12点的时间戳
 var endTime = new Date(new Date(lastSaveTime).setHours(23, 59, 59, 999));
 // 当前时间戳
 var currentDate = new Date();
 var currentTime = currentDate.getTime();
 // 清空激励广告位观看次数
 if (currentTime > endTime) {
 wx.setStorage({
 key: 'showRewardedVideoAdCount',
 data: 0,
 })
 }
 } 
},

第二步:发起请求从服务端获取广告位ID以后生成广告位,这一步只做参考。

// 如果激励广告位视频存在
if (rewardedAdId) {
 that.setData({
 rewardedAdId: rewardedAdId
 }, function() {
 // 创建一个激励视频广告位,rewardedVideoAd为全局变量,与Page()同级.
 rewardedVideoAd = wx.createRewardedVideoAd({
 adUnitId: rewardedAdId
 });
 // 监听加载
 rewardedVideoAd.onLoad(() => {
 console.log('激励广告加载成功');
 });
 // 监听失败
 rewardedVideoAd.onError(err => {
 console.log('激励广告加载失败' + err);
 });
 })
}

注意:以上代码中广告位ID rewardedAdId 为发起请求获取,而rewardedVideoAd 为整个页面的全局全变,与Page()同级。

第三步:在用户触发广告位以后,获取用户当天已正常观看完毕广告位的次数A与限制广告位播放的最多次数B,如果A小于B则继续加载广告位,否则播放视频。在广告位正常播放完毕后,要更新本地存储的播放次数与观看时间。

// 点击播放
bindPlay: function() {
 var that = this;
 var count = wx.getStorageSync('showRewardedVideoAdCount');
 // 对应页面上的video标签
 var videoContext = wx.createVideoContext('myVideo');
 // 限制激励视频最大播放次数
 if (count < App.globalData.maxShowRewardedAdCount) {
 // 如果存在激励视频广告ID,并且当前页面已经播放过一次广告
 if (that.data.rewardedAdId && that.data.showRewardedAd == 1) {
 // 暂停视频
 videoContext.stop();
 // 加载广告位
 rewardedVideoAd.load().then(function() {
 rewardedVideoAd.show();
 }).catch(function(err) {
 console.log('激励广告位加载失败');
 });
 // 广告位关闭后
 rewardedVideoAd.onClose(function(res) {
 that.setData({
  showRewardedAd: 0
 });
 videoContext.play();
 // 保存累加的次数
 var newCount = parseInt(count) + 1;
 wx.setStorage({
  key: 'showRewardedVideoAdCount',
  data: newCount,
 });
 var time = new Date()
 time = time.getTime();
 // 更新保存的时间
 wx.setStorage({
  key: 'saveVideoAdCountTime',
  data: time
 });
 })
 } else {
 // 继续播放
 videoContext.play();
 }
 } else {
 // 继续播放
 videoContext.play();
 }
},

上面的代码中,我们对是否有广告位ID做了判断,如第6行中的 that.data.rewardedAdId ,如果没有广告位ID,则直接播放视频,另外,如果用户播放完一个视频以后可能还会在该页面的推荐中观看其它视频,而此时再次弹出广告位的体验可能会不太好,所以我又加了入了一个判断,如上面代码中第6行的 that.data.showRewardedAd,页面初始化时该值为1,当播放完一次后将其归0。

总结

以上所述是小编给大家介绍的微信小程序中限制激励式视频广告位显示次数的实现思路,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(4)
Dec 23 Javascript
javascript之更有效率的字符串替换
Aug 02 Javascript
jquery监控数据是否变化(修正版)
Apr 12 Javascript
JS对象与JSON格式数据相互转换
Feb 20 Javascript
jquery 如何动态添加、删除class样式方法介绍
Nov 07 Javascript
jquery无法设置checkbox选中即没有变成选中状态
Mar 27 Javascript
用js一次改变多个input的readonly属性值的方法
Jun 11 Javascript
node.js中的fs.writeFileSync方法使用说明
Dec 14 Javascript
JavaScript 是什么意思
Sep 22 Javascript
JavaScript日期选择功能示例
Jan 16 Javascript
让你彻底掌握es6 Promise的八段代码
Jul 26 Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 Javascript
vue中监听路由参数的变化及方法
Dec 06 #Javascript
详解ECMAScript2019/ES10新属性
Dec 06 #Javascript
ES6的异步操作之promise用法和async函数的具体使用
Dec 06 #Javascript
原生JavaScript实现滑动拖动验证的示例代码
Dec 06 #Javascript
微信小程序 自定义弹窗实现过程(附代码)
Dec 05 #Javascript
Nuxt v-bind绑定img src不显示的解决
Dec 05 #Javascript
微信小程序swiper左右扩展各显示一半代码实例
Dec 05 #Javascript
You might like
Zerg基本策略
2020/03/14 星际争霸
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
一段实时更新的时间代码
2006/07/07 Javascript
jQuery select控制插件
2009/08/17 Javascript
JavaScript日历实现代码
2010/09/12 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
JQuery控制DIV的选取实现方法
2016/09/18 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
javascript 取小数点后几位几种方法总结
2017/08/02 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
python 远程统计文件代码分享
2015/05/14 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
python assert的用处示例详解
2019/04/01 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
浅谈html5与APP混合开发遇到的问题总结
2018/03/20 HTML / CSS
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
无工作经验者个人求职信范文
2013/12/22 职场文书
转预备党员政审材料
2014/02/06 职场文书
幼儿园家长评语
2014/02/10 职场文书
3的组成教学反思
2014/04/30 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫