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


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 Konami Code 实现代码
Jul 29 Javascript
js如何获取兄弟、父类等节点
Jan 06 Javascript
文本框文本自动补全效果示例分享
Jan 19 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
Apr 15 Javascript
谷歌地图打不开的解决办法
Aug 07 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
Aug 15 Javascript
jQuery插件bxSlider实现响应式焦点图
Apr 12 Javascript
Javascript验证方法大全
Sep 21 Javascript
jQuery自定义动画函数实例详解(附demo源码)
Dec 10 Javascript
封装好的javascript前端分页插件pagination
Jan 04 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
Jan 10 Javascript
如何优雅地取消 JavaScript 异步任务
Mar 22 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
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
JS返回只包含数字类型的数组实例分析
2016/12/16 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
人力资源行政经理自我评价
2013/10/23 职场文书
董事长秘书职责
2014/01/31 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
匿名检举信范文
2015/03/02 职场文书
婚礼父母致辞
2015/07/28 职场文书
python Django框架快速入门教程(后台管理)
2021/07/21 Python