前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序中限制激励式视频广告位显示次数

微信小程序中限制激励式视频广告位显示次数

作者头像
越陌度阡
发布2020-11-26 14:40:59
2.5K0
发布2020-11-26 14:40:59
举报

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

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

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

代码语言:javascript
复制
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以后生成广告位,这一步只做参考。

代码语言:javascript
复制
// 如果激励广告位视频存在
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则继续加载广告位,否则播放视频。在广告位正常播放完毕后,要更新本地存储的播放次数与观看时间。

代码语言:javascript
复制
// 点击播放
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。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档