- 如何解决“Error: xxx.js 已被代码依赖分析忽略,无法被其他模块引用”报错?
错误原因: 微信开发者工具从 1.05.2201210 版本开始,对小程序项目新增了无依赖文件过滤能力。 如果某个 js 文件被静态分析显示是无依赖文件,在实际运行时又被其他 js 文件 require 引用了,则会在工具模拟器中报错这个错误。 此时,如果你继续预览或者上传代码,则在真机运行环境中会报 xxx.js is not defined 的错误。 解决方式: 修改依赖引用的代码:可根据控制台中的【代码依赖分析异常】提示进行修改。(推荐)关闭过滤无依赖文件:project.config.json 中 settings 选项添加 ignoreDevUnusedFiles: false , ignoreUploadUnusedFiles: false详细分析: 微信开发者工具的无依赖文件过滤能力,是基于代码静态依赖分析的数据来实现的。 也就是会分析小程序项目中的代码内容,如果发现某个 js / wxml / wxss / json 文件没有被使用到,则会将其列为无依赖文件。 无依赖文件在模拟器运行时会被忽略,在上传时也不会打入代码包中,因此可以有效减少代码包大小。 但由于 js 代码的灵活性,代码静态依赖分析功能在某些情况下,无法准确分析出依赖引用关系(控制台中会有对应的 warning 提示),此时部分 js 文件会被误判为无依赖文件,导致报错。开发者需配合提示信息修改代码,才能继续使用此功能。 导致依赖异常的常见情况: 动态引用的情况,如 var a = 'somefile.js'; require(a);将 require 函数赋值给其他变量的情况,如 var a = require; a('somefile.js');
2022-07-04 - 在云函数中使用lookup联表查询,对右表做限制,限制条件以参数形式传入,但是却无法得到传入的参数?
//云函数 exports.main = async (event, context) => { return await db.collection('Staff').aggregate() .match({ GroupID:event.id }) .lookup({ from: 'EpidemicRegistration', let: { ccsrid: '$CSRID', aDate:event.today }, pipeline: $.pipeline() .match(_.expr($.and([ $.eq(['$CSRID', '$$ccsrid']), $.eq(['$Date', '$$aDate']), $.eq(['$Type','0']) ]))) .project({ _id: 0, ApproveState: 1, Type: 1 }) .done(), as: 'ER' }) .end() } //小程序调用 wx.cloud.callFunction({ name:'getApproveList', match:{ id:'236', today:'2021-08-16' } }) 想法是在调用时传入两个参数(id,today)分别给云函数中(aDate:event.today)(GroupID:event.id),多次尝试后发现id可以接收到,但是在lookup 中let里面始终无法得到传入的参数,想问下通过什么方式可以将参数传入let中
2021-08-17 - 微信云开发计费调整公告
各位微信云开发用户: 感谢大家一直以来对微信云开发的支持。由于云计算成本整体上升,为了继续为各位用户提供稳定可靠的服务,微信云开发将于 2022 年 08 月 18 日,对计费方式进行如下变更,部分指标价格将有所上浮。 新计费模式下,新用户免费使用 1 个月后,统一使用 “基础套餐+按量付费” 模式:购买带有一定配额的基础套餐后,超出套餐配额部分再按照实际使用量付费。 基础套餐 [图片] *新用户首月免费配额:与基础套餐一致,可满足大部分情况下的开发体验需求 *5 折折扣有效期至少延续至 2022 年底,后续折扣如有变化将另行通知 按量付费 [图片] 【指标说明】 1、调用次数:合并原多项指标统一计价,具体为 “云存储上传操作”、“云存储下载操作”;“数据库读操作”、“数据库写操作” 及新增指标 “云函数调用操作”; 2、容量:合并原多项指标统一计价,具体为 “存储空间" 及 "数据库容量"; 3、云函数日志服务:本次新增计费指标,建议通过优化日志存储策略降低该指标费用。 新用户手动触发确认开始使用后,将拥有 1 个月免费权益,体验期间的环境配额与基础套餐相同,可选择是否进行超额按量付费。 现有用户可以在「微信开发者工具-云开发控制台」或「微信云服务助手小程序」查询过往用量情况后,使用 价格计算器 预估新价格。 在计费方式升级生效之日(2022.08.08)起,对现有用户均提供至少 1 个月的操作缓冲期,期间会推送提醒及提供切换入口,用户可自由选择是否切换新的计费方式,超时未切换的云开发环境将会停服释放。缓冲期内切换成功的用户将会获得额外代金券。 对于当前月调用次数 >100 万次的帐号,本次调整将不直接生效,后续将由专业架构师联系或独立推送指引切换到合适配额的企业旗舰版本。 自本公告发布之日起,对于原已购预付费套餐、资源包的用户,仍然可正常使用原已购资源,直至原约定套餐到期或用完。现有旧预付费套餐不再支持续费超过一个月,现有旧资源包不再支持新购。 微信云开发将继续为各位用户提供简单易用安全的专业 Serverless 开发服务,感谢大家的支持。 Q&A 1、此次调整,意味着我的费用会增加吗? 是的,由于云计算整体成本的持续上升,为了能够长期给各位开发者提供低门槛的开发服务,我们对于部分计费指标进行了价格调整,在调整后大部分的开发者费用会一定程度的上浮。 2、我如何预估调整之后的费用是多少呢? 新计费生效后,在缓冲期内,开发者可查看新指标下的用量情况,或者根据过往用量,使用 价格计算器 估算调整之后的费用。 我们根据测算,为大部分开发者提供基础套餐配额以满足线上服务,如你的实际用量没有超过基础配额,也没有使用扩展功能,那么每月消费即为 19.9 元。 3、我需要在哪里操作切换新计费呢? [图片] 微信云服务助手小程序码 在计费方式升级生效之日(2022.08.08)起,开发者可前往「微信开发者工具-云开发控制台」或「微信云服务助手小程序」进行操作切换。按照过往的计费信息下发惯例,我们通过「微信公众平台公众号」向管理员推送计费变更信息与切换入口。 4、现在的环境是否可以继续使用呢? 新计费生效后,已购买的预付费套餐可正常使用至原到期时间,已购买资源包的按量付费环境可正常使用至原资源包到期时间,均不会存在直接失效或自动退费的情况。在切换到新计费方案后,原有环境即可持续正常使用。 5、如果超时切换会有什么影响呢? 若原环境到期且超出切换缓冲时间,则该环境将进入停服释放流程,数据不可找回,请开发者及时操作。 6、以上新计费方案生效后,我有多长时间可以决定是否继续使用云开发呢? 对于当前月调用次数 <100 万次的帐号,从公告发布日至新方案生效后的一个月,期间可进行是否继续使用的决策;计费方式升级生效之日(2022.08.08)起,我们也会通过上述 Q&A 3 说明的方式中提供切换入口与下发消息,此时你仍然有至少 1 个月的缓冲期做出决定。对于当前月调用次数 >100 万次的帐号,将有专业架构师联系指引切换到合适配额的企业旗舰版本,期间产生的消耗仍然按旧方案计费。我们会为大额消耗用户提供适当优惠,同时对于不希望继续使用云开发的此类帐号提供不低于 3 个月的缓冲时间。如有其他问题,可前往「微信开发者工具-云开发控制台-帮助-工单」主动联系我们。 7、我自行测算预估后觉得新方案有点贵,有什么好建议吗? 本次调整,价格上涨指标为 “调用次数”、“容量”和“CDN 流量”,建议相应进行技术优化,减少不必要的多次调用或存储内容,可有效控制费用;此外新增计费指标为日志服务,可在「微信开发者工具-云开发控制台-云函数-日志」中查看日志使用情况,并优化日志使用逻辑,避免上报大量冗余的日志信息导致不必要的费用支出。 若评估后认为新的费用方案已不适用于你的业务,可在上述充足的缓冲期内自行选择迁移业务至更合适的服务。 微信云开发团队 2022年7月4日
2022-08-08 - 请问lookup后怎么给输出的items数组按指定字段排序?
db.collection("url_classname") .aggregate() .lookup({ from: "url_content", localField: "_id", foreignField: "classid", as: "items", }) .sort({ px: 1 }) .end() 请问怎么给输出的items数组按指定字段排序
2021-08-30 - 云开发的security.msgSecCheck,为何都是ok?
浏览过好几个相关问题,发现都是v1版本的,没有现版本的,并且现在的官方文档上我也没看见他们测试的用例会返回87014这个代码呀 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.msgSecCheck.html 这个是现在的官方文档地址 下面是我的代码按照官方文档改的,如果哪里有错谢谢各位大佬帮忙指正 这是云开发的 const cloud = require('wx-server-sdk') cloud.init() exports.main = async (event, context) => { try { const wxContext = cloud.getWXContext().OPENID const result = await cloud.openapi.security.msgSecCheck({ "openid": wxContext, "scene": 2, "version": 2, "content": event.content }) return result } catch (err) { return err } } 这是自己的 reviewsend: function (e) { let sms = this.data.sms var reviewlegality = true; var that = this; if (sms.length < 3) { wx.showToast({ title: '再多说点吧!', icon: 'none', duration: 800, }) return } else { console.log(sms) wx.cloud.callFunction({ name: 'msgSecCheck', data: { content: sms, }, success(res) { console.log('msgSecCheck-res', res) if (res.result.errCode != 0) { console.log(res.result.errCode) wx.showToast({ icon: 'none', title: '文字违规', }) this.setData({ reviewlegality: false }) console.log(reviewlegality) return } else { if (!reviewlegality) { return; } var i = that.data.currentlyreviewid let commentsNumber = "articlesdata[" + i + "].articlecommentsNumber" let hasreviewed = "articlesdata[" + i + "].articlehasreviewed" let reviewicon = "articlesdata[" + i + "].articlereviewicon" that.setData({ reviewvalue: sms, sms: '', [commentsNumber]: that.data.articlesdata[i].articlecommentsNumber + 1, [hasreviewed]: true, [reviewicon]: 'more' }) wx.showToast({ title: '评论成功' }) } }, fail(err) { console.log('msgSecCheck-err', err) return } }); console.log(reviewlegality) } }, [图片] 打xjpmzd会有一个risky标签,单打xjp就没有 然后看他们用的示例也没问题 [图片]
2021-08-04 - 靠“银发群体”变现70w,单日观看超百万!他们是如何做到的?
随着人口老龄化进程加快,“银发群体”成了一片待挖掘的消费蓝海。 视频号 静宝宝的美好时光 以中老年为目标群体,每天直播老年编发教学,一天可以吸引百万用户观看。 目前,通过直播带货、视频带货、广告视频,该账号累计变现70万+。近期,又创建同名公众号,日均涨粉在1k+。 编发的魅力在哪?视频号“银发经济”真这么“香”吗?我们找了账号幕后运营人小朱老师聊了聊。 [图片] 花式编发盘发 一天百万观看量 早上8点,主播静宝与往常一样准备好假模特以及发夹、发饰后,打开微信视频号直播,开启编发、盘发教学。 “这个发型简单又大气,如果你头发不是特别厚,可以用我们17号链接水晶棒。” “学会了吗姐妹们,用的是我们26号链接。” 主播静宝一边讲解一边用各式发夹、发饰编出花式发型,清爽的打结式编发、优雅的淑女编发等等,每一个编发步骤行云流水、干净利落,有时不到2分钟就完成,不得不感叹主播的一双巧手。小编看完当即表示“嗯,学废了”。 [图片] △ 截图来源:账号直播页面 直播间以中老年编发教学为主,背景展示了10种发型,用1-10数字来表示,时不时就会看到用户在直播间弹幕区评论想看几号发型的编发教学。 每当有新用户进入直播间,主播也会立刻说道“欢迎大家来我直播间,想学哪种发型大家可以call我。” 在【直播监控】的2场直播中,可以看到“谢谢”一词在弹幕区占比较高,因为经常有用户要求,比如“麻烦8号教下,谢谢”。有时应用户要求,一个发型主播要重复无数次。 [图片] △ 截图来源:友望数据-直播监控 主播编发中所用的各样发饰在直播间中均有售卖,直播中主播也会强调当前编发用的是几号链接产品,引导用户购买。 此外,主播也会提醒用户领优惠券再购买,随机点开一场直播的【直播概况】就可以了解该账号优惠活动有3种。 [图片] △ 截图来源:友望数据-商品分析 据小朱老师透露,目前账号单场直播最高观看量28万,平均一天直播5-6场,一天下来也有超百万的观看量。 近期账号每日直播次数有所下降,在【直播记录】-【直播趋势】中可以看出近30天,一天最多直播4场,最少1场。 [图片] △ 截图来源:友望数据-直播记录 在小朱老师看来,视频号对教学类流量倾斜比较明显,静宝宝的美好时光直播内容属于教学类,且比较小众,有官方流量扶持。 此外,对于爱美、追求时尚的女性来说,在这个直播间可以学习各式各样的编发技巧,简单易上手,对于用户提出的教学需求,主播也能及时满足,因此数据流量也较高。 [图片] 瞄准银发市场 单个账号变现70万+ 随着数字化时代加速发展,人口老龄化进程加快,越来越多中老年们拿起智能手机,追剧、娱乐、刷短视频、尝试新的购物方式。 甚至诞生了不少银发网红,比如末那大叔、时尚奶奶等等,时尚精致的装扮、苗条修长的身材,一改往日大家对老年群体保守落伍的固有印象,连年轻人看了都要自叹不如,“大爷已经不是当初那个大爷了”。 “银发群体”催生的“银发经济”成为不少人眼中的蓝海。 去年1月,小朱老师与2个小伙伴成立工作室,进军短视频领域。团队通过前期观察、分析将账号目标及消费人群锁定在中老年群体。 在小朱老师看来,微信生态中老年群体粘性较高,蕴藏巨大的流量价值,同时影响力也不容小觑。比如公众号图文时期,常常能看到长辈们分享健康养生、婆媳关系、养老金、孝敬父母等图文,以及如今越来越多长辈养成线上支付的习惯。 视频号早期中老年用户较多,具有消费能力,且依附微信,社交属性浓郁,用户粘性强,对主播信任度也会更高。 于是,便创建账号静宝宝的美好时光。 [图片] △ 截图来源:友望数据-博主详情页 账号内容主要是编发教学、目前编发类目在视频号还属于小众赛道,且这类直播门槛略高,需要具备编发手艺,比如主播静宝从事编发盘发8年,技术扎实经验丰富,与其他类目相比,编发竞争较小。 此外,饰品利润高,这也是团队选择编发的因素之一。 账号早期主要通过视频带货变现,带货产品主要有编发饰品,部分饰品是中老年喜欢的风格,比如发饰颜色有香槟色、富贵色等。 在【博主动态】中,可以看到许多视频底部会关联视频同款的购物车链接,方便用户一键直达购买页。 [图片] △ 截图来源:友望数据-博主动态 去年8月,团队开始在视频号直播编发教学,由小朱老师负责运营,其他2位小伙伴负责选品,单场直播最高销售额达到了2万。 “变现的前提是流量”,静宝宝的美好时光早期通过拉时长来吸引流量,持续一周,流量增长明显。同时,为提高用户观看体验,直播设备、场景也同步升级优化。 在【友望数据】-【直播记录】中可以发现该账号近期不少直播时常超过8小时。 [图片] △ 截图来源:友望数据-直播记录 “每场直播吸粉率影响下场直播流量,每场直播留人率、互动率影响这场直播流量”,据小朱老师透露,一场直播可以吸引500位新用户关注,随着关注用户的增加,下一场直播流量也会相应有所提高。 目前视频号静宝宝的美好时光累计关注用户20万+,女性用户占比95%,40-60年龄段用户占比50%以上。 账号主要变现方式为直播带货、视频带货,代发广告视频,一条广告报价在3k左右,运营至今账号累计变现70万+。 [图片] 视频号用户标签逐渐完善 转化率提升 有了静宝宝的美好时光从0到1的运营经验,团队开始细分人群,精细化运营,儿童、中青年群体都创建相应的对标账号,比如优优护肤哇目标群体是中青年用户,直播内容也是编发教学。 [图片] △ 截图来源:友望数据-博主详情页 小朱老师在采访中也透露视频号直播过程并不都是一帆风顺,也会遇到问题困惑,比如直播虽然场观较高,然而基本是泛流量,不够精准,转化效果不佳,“我想应该是平台账号标签还不完善,在培养用户行为习惯。” 从今年3月份开始,公域流量大幅度下降,而转化率却大幅度提升,“视频号挖掘潜力比较大,随着用户行为标签在慢慢完善,转化率也因此上升”。 公域流量的不可控,也让小朱老师也意识到私域的重要性,于是在账号主页挂上企业微信,将用户引导到私域。“私域流量大部分主动权在自己手里,可以自由的把信息分享给用户,粘性更高,更活跃,后续矩阵操作空间也会更大。” 此外,团队近期还创建了公众号,并在直播中展示公众号身份,据小朱老师透露,公众号日均涨粉1k+。 在小朱老师看来,视频号属于新平台,潜力巨大,而直播自上线以来也备受重视,其中包括微信官方,对直播功能的更新优化从未间断,运营手段也不断加强,比如西域男孩演唱会、五月天跨年直播、春晚直播等等,通过明星加持、重磅活动吸引更多年龄层用户的进入。 据了解,目前工作室在视频号创建7个直播账号,关注用户从5K-20万不等,通过矩阵运营,提前抢占用户市场,“从起号到变现都走通了,后面只需要按照程序就行。” 目前,有3个账号每月盈利稳定。随着账号增多,工作室也从原来的3人发展到如今的19人,有负责客服的、有专门拍摄的,主播队伍也在不断壮大。 未来,小朱老师希望在视频号生态中站稳编发类目,同时纵向深挖,尝试其它风格的类目,比如养生健康、护肤美妆等等,横向扩展,打造真人IP。 注:以上数据来自【友望数据】的客观监测,部分数据或受限于监测机制,与实际数据相比可能有所偏差,结果仅供参考。
2022-03-25 - 每天10万利润比卖100万强 公司做小 利润做大
大家好 我是三斤 一个做直播的普通操盘手 每天和大家吹个牛 不知道大家在这行干了多久 请把入行时间打在评论区 做电商这么多年,钱没有挣到多少,人认识了不少 [图片] 慢慢的圈子也大了起来 就玩了各种各样的项目 其实每个都是好项目 只是一个人的精力是有限的,看多了,自然也越来越眼花缭乱 [图片] (抖音单场百万的大V场) [图片] (淘宝店播代运营自然流平播) [图片] (快手直播也接触过2个月) [图片][图片] (视频号也玩的还行) 一路上走了很多坑 交了百来万的学费 感谢一路走来不抛弃不放弃不走的团队兄弟们! [图片] 一个人,选择多了,选错的概率就大了,对待交新朋友,永远第一真诚善良不吹嘘,踏实双赢为宗旨, 不可能不会被骗,一直在被骗,丝毫不影响我认识下一个新朋友。 [图片] 大概我还是年轻,还有不撞南墙不回头的勇气,要折腾到死,到没有力气, 对待新事物保持敬畏和好奇心,别人的三观、认知、选择永远尊重不评论, 关于发展、方向,趋势,只要认知上了解,必须做第一个,我接受坑所以在吃螃蟹的时候也淡然 清楚的知道自己的核心竞争力是执行力和努力,所以知道时间有多珍贵! 2022把公司做小,利润做大。 这也是我进军视频号的初衷 也是我们最早玩直播 进入直播行业的初心(赚钱!) 现在是4月中旬,各行各业都陆续进入工作状态,上海还在疫情,等结束了我会在上海举办一个视频号直播交流会。估计7月 对于电商来说,4/5月是旺季,618活动年中活动过后,流量在7/8月开始下滑继,9月末流量开始回升,10月国庆开始爬坡,11/22月大活动流量巅峰,圣诞假平安夜元日活动。然后开始准备过春节。2022就这样结束。 你害不害怕啊? 其实现在是2032年, 是你说的“如果能回到2022年那该多好啊” 我们一起来创造奇迹吧 兄弟们!
2022-04-10 - 无敌是多么寂寞,小程序日活UV500万是什么水平?
无敌是多么寂寞,小程序日活500万是什么水平? 国内大概有哪些小程序可以达到?大厂业务app除外,比如jd,美团,pdd这种除外 [图片]
2021-07-09 - 小程序流量主运营之ECPM怎么提高
目前小程序流量主共有8个广告类型:banner、视频、插屏、前贴、激励、格子、模板、开屏。 首先说下ECPM是什么意思。ECPM指的是每一千次展示可以获得的广告收入。 ECPM是取决于用户点击广告次数,也就是1000次曝光里面点击广告的人数越多,ECPM值越高,不单单是曝光1000次的收益。 也就是说如果你曝光了1000次banner广告,但是没有用户点击,那么你banner广告位的ECPM就是0。 [图片] 然后我们说下今天的主题,ECPM怎么提高。 1、首先你流量主小程序里面的所有广告,都是广告主去投放的。广告主可投放的类型有很多种,根据广告主投放城市、行业等决定。 1-1、比如我在呼和浩特,我把广告投放到呼和浩特,如果我按竞价CPC的投放,一个点击最低1.06,除了微信要扣除流量主收益的50%之外,剩下的50%就是你的收益。 [图片] 1-2、我按合约广告投放,1000次曝光我花费的是15元,微信扣除50%,你的ECPM就是7.5,这么说懂了吧。 [图片] 1-3、所以基于广告主广告投放,你要选好广告,尽量避免第二条里面的1000次曝光这种CPM广告主,这种广告主一般都是大品牌,不在乎你点不点,就是让你看。所以我们要有犀利的眼光去判断屏蔽哪种广告位。 [图片] 2、ECPM的高低取决于你的小程序用户分布年龄 比如30岁IOS用户就是比20岁的IOS用户质量高,30岁左右的IOS用户属于高价值用户,对电商、游戏等付费能力会更强,会比20岁的人群要高,所以我们在开发小程序的时候,尽量往这个年龄段靠。还有30岁的女性电商用户,都是ECPM拉高点的关键用户群体。(此处仅仅是举例分析,无年龄歧视) 所以我们再开发、购买小程序时,选题材、素材的时候可以尽量往这个年龄段靠一下,ECPM会高一些。 3、广告设计体验 广告设计是一门艺术,但是不能违规。要优雅的设计广告,让用户看着舒服,看的清楚,主动去点击广告,这也是广告主投放广告的目的。最近有多人私信和我说买1000多个手机,弄1000多个微信去刷广告。真的是想瞎了心了,如果你是广告主,你投放出去的广告希望用户这样点击吗?再说了,微信广告的风控机制是你承受不住的,微信也得保护广告主投放的利益。如果全部都是这种样点广告,微信生态早就活不下去了。不要想着投机取巧,踏踏实实做流量才是王道。 [图片] 4、站外引流提升ECPM 所有的APP都缺流量,不要以为微信是国民产品就不缺流量。微信小程序也喜欢站外流量引进来,所以大家在引流的时候,可以从其他APP引流,这样你的ECPM也是很高。 [图片] [图片]
2020-12-19 - 教你怎么监听小程序的返回键
更新:2020年7月28日08:51:11 基础库2.12.0起,可以调用wx.enableAlertBeforeUnload监听原生右上角返回、物理返回以及wx.navigateBack时弹框提示 AIP详情请看: https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.enableAlertBeforeUnload.html //======================================== 怎么监听小程序的返回键? 应该有很多人想要监听用户的这个动作吧,但是很遗憾,小程序不会给你这个API的,那是不是就没辙了? 幸好我们还可以自定义导航栏,这样一来我们就可以监听用户的这一动作了。 什么?这你已经知道啦? 那好咱们就不说自定义导航栏的返回监听了,说一下物理返回和左滑?右滑?(不管了,反正是滑)返回上一页怎么监听。 监听物理返回 首先说一下这个监听方法的缺点,虽说是监听,但是还是无法真正意义上的监听并拦截来阻止页面跳转,页面还是会返回上一页,而后重新载入刚刚的页面,如果这不是你想要的,那可以不用往下看了 其次说一下用到什么东西: wx.onAppRoute、wx.showModal 最后是一些主要代码: 重写wx.showModal,主要是加个confirmStay参数和使wx.showModal Promise化 [代码]const { showModal } = wx; Object.defineProperty(wx, 'showModal', { configurable: false, // 是否可以配置 enumerable: false, // 是否可迭代 writable: false, // 是否可重写 value(...param) { return new Promise(function (rs, rj) { let { success, fail, complete, confirmStay } = param[0] param[0].success = (res) => { res.navBack = (res.confirm && !confirmStay) || (res.cancel && confirmStay) wx.setStorageSync('showBackModal', !res.navBack) success && success(res) rs(res) } param[0].fail = (res) => { fail && fail(res) rj(res) } param[0].complete = (res) => { complete && complete(res) (res.confirm || res.cancel) ? rs(res) : rj(res) } return showModal.apply(this, param); // 原样移交函数参数和this }.bind(this)) } }); [代码] 使用wx.onAppRoute实现返回原来的页面 [代码]wx.onAppRoute(function (res) { var a = getApp(), ps = getCurrentPages(), t = ps[ps.length - 1], b = a && a.globalData && a.globalData.pageBeforeBacks || {}, c = a && a.globalData && a.globalData.lastPage || {} if (res.openType == 'navigateBack') { var showBackModal = wx.getStorageSync('showBackModal') if (c.route && showBackModal && typeof b[c.route] == 'function') { wx.navigateTo({ url: '/' + c.route + '?useCache=1', }) b[c.route]().then(res => { if (res.navBack){ a.globalData.pageBeforeBacks = {} wx.navigateBack({ delta: 1 }) } }) } } else if (res.openType == 'navigateTo' || res.openType == 'redirectTo') { if (!a.hasOwnProperty('globalData')) a.globalData = {} if (!a.globalData.hasOwnProperty('lastPage')) a.globalData.lastPage = {} if (!a.globalData.hasOwnProperty('pageBeforeBacks')) a.globalData.pageBeforeBacks = {} if (ps.length >= 2 && t.onBeforeBack && typeof t.onBeforeBack == 'function') { let { onUnload } = t wx.setStorageSync('showBackModal', !0) t.onUnload = function () { a.globalData.lastPage = { route: t.route, data: t.data } onUnload() } } t.onBeforeBack && typeof t.onBeforeBack == 'function' && (a.globalData.pageBeforeBacks[t.route] = t.onBeforeBack) } }) [代码] 改造Page [代码]const myPage = Page Page = function(e){ let { onLoad, onShow, onUnload } = e e.onLoad = (() => { return function (res) { this.app = getApp() this.app.globalData = this.app.globalData || {} let reinit = () => { if (this.app.globalData.lastPage && this.app.globalData.lastPage.route == this.route) { this.app.globalData.lastPage.data && this.setData(this.app.globalData.lastPage.data) Object.assign(this, this.app.globalData.lastPage.syncProps || {}) } } this.useCache = res.useCache res.useCache ? reinit() : (onLoad && onLoad.call(this, res)) } })() e.onShow = (() => { return function (res) { !this.useCache && onShow && onShow.call(this, res) } })() e.onUnload = (() => { return function (res) { this.app.globalData = Object.assign(this.app.globalData || {}, { lastPage: this }) onUnload && onUnload.call(this, res) } })() return myPage.call(this, e) } [代码] 在需要监听的页面加个onBeforeBack方法,方法返回Promise化的wx.showModal [代码]onBeforeBack: function () { return wx.showModal({ title: '提示', content: '信息尚未保存,确定要返回吗?', confirmStay: !1 //结合content意思,点击确定按钮,是否留在原来页面,confirmStay默认false }) } [代码] 运行测试,Oj8K 是不是很简单,马上去试试水吧,效果图就不放了,静态图也看不出效果,动态图懒得弄,想看效果的自己运行代码片段吧 代码片段 https://developers.weixin.qq.com/s/hc2tyrmw79hg
2020-07-28 - search.siteSearch 返回错误?
使用小程序搜索search.siteSearch,返回错误"errcode": -2, "errmsg": " rid: 60f6518a-6e89d3bd-43a1ccd9" 请问errcode等于-2是什么意思?为什么搜索不到页面 在后台直接搜索也搜索不到 [图片] 小程序APPID:wxf4b1c4ee0bc63893
2021-07-20 - 微信小程序转发朋友圈详解
概述点击右上角分享朋友圈[图片] 分享到朋友圈样式[图片] 朋友圈打开样式[图片] 这个功能目前只支持Android(在IOS高版本微信支持朋友圈打开小程序能力,但不能分享)。 用户打开朋友圈分享的小程序,看到不是真正的小程序,而是原本页面的“单页模式”。 什么是“单页模式”?以下是微信官方对于“单页模式”的描述: “单页模式”下,页面顶部固定有导航栏,标题显示为当前页面 JSON 配置的标题。底部固定有操作栏,点击操作栏的“前往小程序”可打开小程序的当前页面。顶部导航栏与底部操作栏均不支持自定义样式。“单页模式”默认运行的是小程序页面内容,但由于页面固定有顶部导航栏与底部操作栏,很可能会影响小程序页面的布局。因此,请开发者特别注意适配“单页模式”的页面交互,以实现流畅完整的交互体验。限制另外,“单页模式”存在着很多限制。以下是官方给出的禁用能力列表: [图片] 限制主要包括以下几点: 页面无登录态,与登录相关的接口,如 [代码]wx.login[代码] 均不可用不允许跳转到其它页面,包括任何跳小程序页面、跳其它小程序、跳微信原生页面若页面包含 tabBar,tabBar 不会渲染,包括自定义 tabBar本地存储与小程序普通模式不共用这些限制,让“单页模式”只适用于内容展示,不适用于有较多交互。 配置针对“单页模式”,新增了单页模式相关配置。目前这个配置里只有一个navigationBarFit属性: [图片] navigationBarFit属性主要是针对原页面设置了自定义导航栏的情况。也就是原页面的json文件中配置了这个属性: { // ... "navigationStyle":"custom" // ... } 给大家看一下普通导航栏和自定义导航栏的区别,下图是普通导航栏页面: [图片] 下图是自定义导航栏页面,我们在原本的导航栏位置使用了banner: [图片] [代码]"navigationStyle":"custom"[代码]这个设置在“单页模式”下也会生效。前文微信官方对“单页模式”的描述有说到“顶部导航栏与底部操作栏均不支持自定义样式”。如果我们在原页面设置了自定义导航栏。那么“单页模式”样式就会变成这样: [图片] 通过设置navigationBarFit为 [代码]squeezed[代码]就可以解决这个问题: { // ... "singlePage": { "navigationBarFit": "squeezed" } // ... } 设置后的样式: [图片] 开发 接下来介绍如何在小程序中实现这个功能。 第一步在需要转发朋友圈的页面中注册用户点击右上角转发功能,这是实现转发朋友圈功能的必要满足条件。 onShareAppMessage: function () { return { title: '转发标题', path: '/pages/home/index', imageUrl: '自定义图片路径' } } 第二步注册分享朋友圈功能(从基础库 [代码]2.11.3[代码] 开始支持): onShareTimeline: function () { return { title: '转发标题', query: 'from=pyq', imageUrl: '自定义图片路径' } } 注意,这里有个问题,分享朋友圈功能不支持自定义页面路径,意味着只能转发当前页面。如果当前页面存在较多“单页模式”限制功能,就可能让我们的页面不能按预期展示。 当页面存在限制功能时,我们存在两个方案,第一个方案,针对“单页模式”做改动,不调用那些限制的功能。第二个方案,另外写一个针对“单页模式”的页面。 这两种方案都需要能判断当前是否正处在小程序“单页模式”。 我们通过判断场景值(场景值用来描述用户进入小程序的路径)是否等于 1154 来判断当前是否正处在小程序“单页模式”。场景值可以在 [代码]App[代码] 的 [代码]onLaunch[代码] 获取。 // app.js App({ // ... onLaunch(options) { const { scene } = options; this.isSinglePage = scene === 1154; } // ... }) 我们将是否正处在“单页模式”的Boolean值放入App实例,方便全局拿到值。 接下来说说两种方案。 第一种方案,在“单页模式”不调用那些限制功能(这是一种不推荐的方案,代码耦合性太强)。举个例子: const app = getApp(); Page({ // ... onLoad() { if (!app.isSinglePage) { wx.login({ // ... }) } } // ... }) 第二种方案,针对“单页模式”另写一个页面。因为分享朋友圈功能并不支持自定义页面路径,我们只能另外写一个组件来作为“单页模式”的内容承载。 将isSinglePage放入页面的初始数据,方便在wxml中拿到: // pages/home/index.js const app = getApp(); Page({ data: { isSinglePage: app.isSinglePage, } // ... }) home-single-page就是分享到朋友圈的内容承载组件: // pages/home/index.json { // ... "usingComponents": { "home-single-page": "components/home-single-page/index" }, } 当“单页模式”时,我们展示 [代码]home-single-page[代码]组件,否则就展示普通页面内容: // pages/home/index.wxml 样式上虽然搞定了,但是在原本的生命周期中可能会调用一些限制功能,或者跑一些其它“单页模式”用不上的内容。我们得停止原本生命周期函数调用。 建议对传入Page的对象进行统一处理,当“单页模式”时,不调用原本的生命周期: // pages/home/index.js import ExtendPage from 'common/extend-page/index' const app = getApp(); ExtendPage({ data: { isSinglePage: app.isSinglePage, } // ... }) ExtendPage函数针对“单页模式”进行统一处理: // common/extend-page/index.js const app = getApp(); const PAGE_LIFE = [ 'onLoad', 'onReady', 'onShow', 'onHide', 'onError', 'onUnload', 'onResize', 'onPullDownRefresh', 'onReachBottom', 'onPageScroll' ]; export default function(option) { let newOption = {}; if(app.isSinglePage) { newOption = PAGE_LIFE.reduce((res, lifeKey) => { if (option[lifeKey]) { res[lifeKey] = undefined; } return res; }, {}) } return Page({ ...option, ...newOption, }); } 在“单页模式”下,我们将原本的生命周期都停止了调用。这样就能很好的将“单页模式”下的页面和普通页面进行解耦。 如果”单页模式“页面比较复杂,需要使用生命周期。我们也可以添加 [代码]singlePageLife[代码]属性,当处在“单页模式”下,就调用 [代码]singlePageLife[代码]内的生命周期: // pages/home/index.js import ExtendPage from 'common/extend-page/index' const app = getApp(); ExtendPage({ data: { isSinglePage: app.isSinglePage, }, singlePageLife: { onLoad() { // ... }, } // ... }) // common/extend-page/index.js const app = getApp(); const PAGE_LIFE = [ 'onLoad', 'onReady', 'onShow', 'onHide', 'onError', 'onUnload', 'onResize', 'onPullDownRefresh', 'onReachBottom', 'onPageScroll' ]; export default function(option) { let newOption = {}; if(app.isSinglePage) { const { singlePageLife } = option; newOption = PAGE_LIFE.reduce((res, lifeKey) => { if (singlePageLife[lifeKey]) { res[lifeKey] = singlePageLife[lifeKey]; } else if(option[lifeKey]) { res[lifeKey] = undefined; } return res; }, {}) } return Page({ ...option, ...newOption, }); } 文章如有疏漏、错误欢迎批评指正。
2020-10-21 - APP-SERVICE-SDK:lanDebug:fail rejected due?
Error: APP-SERVICE-SDK:lanDebug:fail rejected due to no permission currently Error: APP-SERVICE-SDK:lanDebug:fail rejected due to no permission currently at Object.lanDebug (https://lib/WASubContext.js:2:2038387) 各位大神,这个是什么错误
2021-06-18 - APP-SERVICE-SDK:createSignal:fail rejected due to
[图片] [图片]
2020-11-20 - 如何动态设置全局的css变量(如--test: red)?
看到有小伙伴说可以wx.setPageStyle来设置,试了下只能设置到常规的样式属性,对于 --test 这种变量的样式设置不上去
2020-09-28 - 【好文】小程序动态换肤解决方案 - 终极篇
小程序动态换肤解决方案 – 终极篇 回顾 早些日子,我写过两篇文章介绍过在微信小程序内,如何实现换肤功能,下面贴出链接,没看过的同学可以先看看 小程序动态换肤解决方案 – 本地篇 小程序动态换肤解决方案 – 接口篇 但是上面两种方案都有不足之处,所以我在文末也备注了会出 终极篇解决方案,拖延了一些时间,今天看到评论区有人cue我说什么时候出终极篇,于是,今天花了写时间整理了一下,希望可以帮助到大家。 方案 其实这篇文章提供的解决方案,更多是 [代码]接口篇[代码]的优化版本。 解决思路就是: 将接口获取到的皮肤色值属性,动态设置到需要换肤的元素的某个属性上,本质上就是替换元素的css属性的属性值,方法就是通过给当前[代码]Page[代码]和[代码]Component[代码]对象的[代码]js文件[代码]嵌入提前设置好的[代码]css变量[代码]中,然后通过[代码]setData[代码]的方法回显到对应的[代码]wxml文件[代码]中。 采用 css变量 的方式替代原有 内联修改样式 的方式; 采用小程序原生提供的mixin解决方案 —— [代码]Behavior[代码],对页面还有组件对象来说,虽有一定的侵害性,但是可以极大程度的降低重复代码的编写; 代码 1. 监听器模块 我们知道,接口返回的数据是异步的,所以,当我们进入到指定的 [代码]Page[代码]和[代码]Component[代码] 对象内部的时候,有可能还没得到数据,就需要先注册一个监听函数,等到皮肤接口请求成功之后,然后再执行皮肤设值操作; [代码]// observer.js function Observer() { this.actions = new Map() } // 监听事件 Observer.prototype.addNotice = function(key, action) { // 因为同个Page(页面)或者Component(组件)对象有可能引入多个组件 // 这些组件都用到了同一个监听器,每个监听器的回调函数需要单独处理 // 因此,结果就是: key => [handler1, hander2, hander3....] if (this.actions.has(key)) { const handlers = this.actions.get(key) this.actions.set(key, [...handlers, action]) } else { this.actions.set(key, [action]) } } // 删除监听事件 Observer.prototype.removeNotice = function(key) { this.actions.delete(key) } // 发送事件 Observer.prototype.postNotice = function(key, params) { if (this.actions.has(key)) { const handlers = this.actions.get(key) // 皮肤接口获取数据成功,取出监听器处理函数,依次执行 handlers.forEach(handler => handler(params)) } } module.exports = new Observer() [代码] 2. 皮肤对象模型模块 因为皮肤接口只会在程序首次加载运行的时候执行,换言之,通过 [代码]发布-订阅[代码] 的方式来设置皮肤只会[代码]发生在第一次接口请求成功之后[代码],后期都不会再执行;因此,我们需要通过一个Model模型对象将数据存储起来,后面的皮肤设值操作都从该model对象中获取; [代码]// viModel.js /** * @param {*} mainColor 主色值 * @param {*} subColor 辅色值 * @param {*} reset 重置 */ function ViModel(mainColor, subColor, reset = false) { // 如果当前实例已经设置过,直接返回该实例 if (typeof ViModel.instance == 'object' && !reset) { return ViModel.instance } this.mainColor = mainColor this.subColor = subColor // 实例赋值动作触发在接口有数据返回的时候 if (this.mainColor || this.subColor) { ViModel.instance = this } return this } module.exports = { // 通过save方法来赋值要通过reset = true来重置对象 save: function(mainColor = '', subColor = '') { return new ViModel(mainColor, subColor, true) }, // 直接返回的都是已经有值的单例实例 get: function() { return new ViModel() } } [代码] 3. 小程序Mixin模块 —— Behavior 这个就是这次分享的最为重要的模块 —— 注入 themeStyle 的css变量 我们直接来看这段代码: [代码]setThemeStyle({ mainColor, subColor }) { this.setData({ themeStyle: ` --main-color: ${mainColor}; --sub-color: ${subColor}; ` }) } [代码] 想必看到这里,大家应该猜到开篇说的实现原理了 这里的 [代码]themeStyle[代码] 就是我们接下来要注入到 [代码]Page[代码] 和 [代码]Component[代码] 的 data 属性,也就是需要在页面和组件中设置的[代码]动态css变量属性[代码] [代码]//skinBehavior.js const observer = require('./observer'); const viModel = require('./viModel'); module.exports = Behavior({ data: { themeStyle: null }, attached() { // 1. 如果接口响应过长,创建监听,回调函数中读取结果进行换肤 observer.addNotice('kNoticeVi', function(res) { this.setThemeStyle(res) }.bind(this)) // 2. 如果接口响应较快,modal有值,直接赋值,进行换肤 const themeData = viModel.get() if (themeData.mainColor || themeData.subColor) { this.setThemeStyle(themeData) } }, detached() { observer.removeNotice('kNoticeVi') }, methods: { setThemeStyle({ mainColor, subColor }) { this.setData({ themeStyle: ` --main-color: ${mainColor}; --sub-color: ${subColor}; ` }) }, }, }) [代码] 4. 【应用】—— Component模块 js 文件引入[代码]skinBehavior.js[代码],通过[代码]Component对象[代码]提供的[代码]behaviors[代码]属性注入进去; wxml 文件根节点设置[代码]style="{{themeStyle}}"[代码],设置css变量值; wxss 文件通过css变量设置皮肤色值 [代码]background: var(--main-color, #0366d6);[代码] [代码]// wxButton2.js const skinBehavior = require('../../js/skinBehavior'); Component({ behaviors: [skinBehavior], properties: { // 按钮文本 btnText: { type: String, value: '' }, // 是否为辅助按钮,更换辅色皮肤 secondary: { type: Boolean, value: false } } }) [代码] [代码]<!-- wxButton2.wxml --> <view class="btn-default btn {{secondary ? 'btn-secondary' : ''}}" style="{{themeStyle}}">{{ btnText }}</view> [代码] [代码]/* wxButton2.wxss */ .btn { width: 200px; height: 44px; line-height: 44px; text-align: center; color: #fff; } .btn.btn-default { background: var(--main-color, #0366d6); } .btn.btn-secondary { background: var(--sub-color, #0366d6); } [代码] 5. 【应用】 —— Page模块 使用方法跟Component模块一样,就不写了,下面贴一下代码: [代码]// skin.js const skinBehavior = require('../../js/skinBehavior'); Page({ behaviors: [skinBehavior], onLoad() { console.log(this.data) } }) [代码] [代码]<!--skin.wxml--> <view class="page" style="{{themeStyle}}"> 换肤终极篇 <view class="body"> <wxButton2 class="skinBtn" btnText="按钮1"></wxButton2> <wxButton2 class="skinBtn"btnText="按钮2" secondary></wxButton2> <wxButton2 class="skinBtn" btnText="按钮2" ></wxButton2> </view> </view> [代码] [代码]/* skin.wxss */ .page { padding: 20px; color: var(--main-color); } .skinBtn { margin-top: 10px; float: left; } [代码] 6. 【初始化】—— 接口调用 这里就是在小程序的启动文件 app.js 调用皮肤请求接口,初始化皮肤 [代码]// app.js const { getSkinSettings } = require('./js/service'); App({ onLaunch: function () { // 页面启动,请求接口 getSkinSettings().catch(err => { console.log(err) }) } }) [代码] 效果展示 [图片] 项目地址 项目地址:https://github.com/csonchen/wxSkin 这是本文案例的项目地址,如果觉得好,希望大家都去点下star哈,谢谢大家。。。
2021-03-22 - 小程序可以动态加载WXSS文件吗?
想写几套WXSS样式,根据判断后,加载不同的样式文件,所有的页面都读取这套WXSS,小程序里面可以实现吗?
2018-10-29 - 小程序盈利模式入门指南
如何通过小程序盈利、如何开通流量主、小程序有哪些广告类型 本文概述 由于上一篇介绍的文章,没法进行编辑,本文主要在上一篇的基础上着重再讲广告的分成模式。 小程序如何盈利 目前对个人小程序开发者而言,只有通过开通流量主,并且按照官方规范要求添加广告位,才能获取收益,当然打赏除外。 小程序流量主 流量主是微信对外提供的一个服务,通过开通流量主,就可以在小程序合适的位置引入广告位,进而实现收益 小程序流量主开通流程 https://developers.weixin.qq.com/community/develop/doc/000046f02244a041da79753e557009 1.开通条件:小程序累计独立访客(UV)1000以上,且无违规记录,即可开通流量主功能。 温馨提示:如满足条件仍无法开通,可能是数据同步问题,建议等待1-2个工作日后再试。 2.申请方法:进入微信公众平台小程序后台,点击左侧面板“流量主”,满足开通门槛的小程序开发者点击“开通”,提交财务资料,待审核通过后成功开通流量主功能,即可创建相应的广告位。 3.广告接入指引: 广告接入可查看下面具体文档 微信小程序广告接入指引 https://wximg.qq.com/wxp/pdftool/get.html?id=BJSyDkLqz&pa=14&name=miniprogramAds_supplier_manual 小程序流量主结算方式 对个人小程序流量主而言,广告收益是在扣除个人所得税之后,直接到个人银行账户的,目前每月结算两次。 [流量主结算周期及开票规则调整说明][2019-12-03发布] https://mp.weixin.qq.com/promotion/readtemplate?t=notice/detail_page&time=1575340587¬ice_id=634169 小程序广告位介绍 广告类型有哪些 下面主要介绍小程序广告组件以及重点介绍下分成模式 Banner广告 激励式视频 插屏广告 视频广告 视频前贴视频 下面我们从目前几个主流的小程序给大家截图展示,让大家更真实的认识不同类型的广告 [banner广告] [图片] [插屏广告] [图片] 视频广告 [图片] 激励式广告 以下截图来自抽奖助手(没错,就是那个广告收入月入200多W的无码科技旗下冯大辉老师的抽奖助手) [图片] 以下截图来自激励式广告指引官方文档 [图片] 不同广告类型的分成模式 Banner广告的分成模式如下: 根据用户的每一次广告点击,平台收取广告费用并与流量主分成。100W元以下广告流水,按照5:5分成,100W元以上广告流水,按照3:7分成(流量主3成),分成不设封顶。 实际分成以后台“数据统计”页面展示为准 视频广告、插屏广告、激励视频广告分成模式如下 按照每一千次有效的广告曝光,平台收取广告费用并与流量主分成。100W元以下广告流水,按照5:5分成,100W元以上广告流水,按照3:7分成(流量主3成),分成不设封顶 实际分成以后台“数据统计”页面展示为准。 哪种广告类型收益相对最大 直接从后台截图吧 [图片] 在10月30号,将banner广告同一替换为激励式视频广告和视频广告,收益很明显从30元上升到90元、150元 可以看到视频广告相对于banner广告,对于收益增加是有用的。 下图是某小程序12月4号一天的收益数据 [图片] 12月4号一天,不同广告类型,收益分析 总收益 194.74+23.27+147.82=365.83 具体分拆来看 广告类型 点击量 总收益 单个点击收益(元) banner 1956 194.74 0.099 插屏广告 62 23.27 0.375 激励式视频广告 152 147.82 0.972 通过上图我们对比分析,不难得出以下结论:激励式视频广告单个点击的收益最大、 当然我们不能通过单一维度来了解哪种收益最好,还要综合考虑,比如哪种广告对用户影响最小,毕竟不管哪种方式,广告的接入肯定会带来交互体验上的障碍, 我们必须在交互体验和广告收益这两者之间做好权衡。 系统公告 2019年4月25号,小程序广告组件新增激励式视频广告与插屏广告,进一步丰富开发者的广告变现方式,开发者可到流量主模块进行开通,具体规则见《小程序激励式视频广告开通指引》,《小程序插屏广告开通指引》。 激励式广告于2019年7月31日支持30秒视频素材,广告流量将逐步放开,MP后台-广告位管理模块可支持选择6-15秒视频或6-30秒视频素材的功能,请流量主根据产品进行调整。 小程序视频前贴广告组件已于8月30日正式全量上线,开通后即按广告曝光获得分成收入,进一步提升流量变现收益。 程序视频广告已于9月4日正式全量上线,开通后即按广告曝光获得分成收入,进一步提升流量变现收益。 2019-09-04小程序视频广告与视频前贴广告已面向非游戏类小程序全量上线,进一步丰富开发者的广告变现方式。 开发者可到流量主模块进行开通,开通后即按广告曝光获分成收入,进一步提升广告收益水平。 具体规则见《小程序视频广告流量主主指引》,《小程序视频前贴广告流量主指引》。 官方文档 流量主接入指引文档、小程序广告组件流量主操作指引 https://wximg.qq.com/wxp/pdftool/get.html?id=BJSyDkLqz&pa=14&name=miniprogramAds_supplier_manual 应用规范 https://wxa.wxs.qq.com/mpweb/delivery/legacy/pdftool/get.html?id=rynYA8o3f&pa=10&name=miniprogramAds_supplier_guidance 小程序流量主应用规范 https://wximg.qq.com/wxp/pdftool/get.html?id=rynYA8o3f&pa=10&name=miniprogramAds_supplier_guidance 处罚标准 https://wxa.wxs.qq.com/mpweb/delivery/legacy/pdftool/get.html?id=BkTGkbs2G&pa=1&name=miniprogramAds_supplier_regulation 小程序视频广告流量主指引 https://wximg.qq.com/wxp/pdftool/get.html?post_id=1317 小程序视频前贴广告流量主指引 https://wximg.qq.com/wxp/pdftool/get.html?post_id=1318 小程序激励式视频广告开通指引 https://developers.weixin.qq.com/community/develop/doc/00060ef22cc00855a4681691c5bc01 小程序插屏广告开通指引 https://developers.weixin.qq.com/community/develop/doc/0002680c7f4960344578da0a756801 小程序视频广告流量主主指引 https://wximg.qq.com/wxp/pdftool/get.html?post_id=1317 小程序视频前贴广告流量主指引 https://wximg.qq.com/wxp/pdftool/get.html?post_id=1318 提升广告收益怎么做?四大流量主增收妙招 https://wximg.qq.com/wxp/pdftool/get.html?post_id=1699 文中流量主单篇文章插入两条广告使用邀请 https://wximg.qq.com/wxp/pdftool/get.html?post_id=331 总结 从纯收益的角度来讲,在各种广告类型中,视频广告(包含激励式视频广告、视频广告、视频前贴广告)要比banner广告要好,而且好很多 从用户体验来讲,插屏广告是首次打开带插屏广告的页面强制弹出的,但是广告过后,在页面是不占空间的,这是区分与其他广告的地方,banner广告、激励式视频广告、视频广告、视频前贴广告都是在页面中占固定的空间的,这一点要小程序运营同学权衡。 Banner广告是按点击,激励式视频、视频广告、插屏广告都是按照曝光来收取广告费用的,这一点非常重要,难怪我每次手工点击我的视频广告没有见流量的增加[哭脸.jpg]。[感谢 @ 仙森 补充于2019年12月9号] 虽然对个人开发者而言,我们开发小程序的目的是为了收益(当然也有为了情怀而开发),在了解如何收益的情况下,我们还是应该尽量把精力放在小程序本身的开发上面。 结算对账单 [图片] [图片] 收入截图 1 [图片] 1 收益截图 1 [图片] 1 1 感谢 在此特别感谢,小程序运营讨论群的两位小伙伴,微信号中间两位已打码 1、@迭戈 (yang_##chun) 2、@风猫 (cs##26) 3、@citizen four
2021-01-24 - 小程序流量主、广告位类型和广告收益分析
小程序流量主、广告位类型和广告收益分析 ## 本文介绍 最近在小程序的几个微信群,经常有朋友问到以下几个问题 1、小程序怎么盈利 2、小程序流量主是什么以及怎么开通 3、小程序广告有哪些类型,哪种广告类型相对收益最大 4、 ## 小程序如何盈利 目前对个人小程序开发者而言,只有通过开通流量主,并且按照官方规范要求添加广告位,才能获取收益,当然打赏除外。 ## 什么是流量主如何开通 流量主是微信对外提供的一个服务,通过开通流量主,就可以在小程序合适的位置引入广告位,进而实现收益 登录公众号后台( https://mp.weixin.qq.com/ )在左侧菜单中,找到 推广-流量主,点击进去会看到如下截图 [图片] 小程序流量主: 1.开通条件:小程序累计独立访客(UV)1000以上,且无违规记录,即可开通流量主功能。 温馨提示:如满足条件仍无法开通,可能是数据同步问题,建议等待1-2个工作日后再试。 2.申请方法:进入微信公众平台小程序后台,点击左侧面板“流量主”,满足开通门槛的小程序开发者点击“开通”,提交财务资料,待审核通过后成功开通流量主功能,即可创建相应的广告位。 3.广告接入指引: 广告接入可查看: 微信小程序广告接入指引 在开通流量主的过程中,会绑定个人银行卡,以方便进行后续的广告收益结算,目前结算每月两次,具体官方公告可以查阅 [流量主结算周期及开票规则调整说明][2019-12-03发布] https://mp.weixin.qq.com/promotion/readtemplate?t=notice/detail_page&time=1575340587¬ice_id=634169 ## 广告类型有哪些 Banner激励式视频插屏视频广告前贴视频 以下为各广告类型,截图示例, [banner广告] [图片] [插屏广告] [图片] 视频广告 [图片] 由于插屏广告会影响用户体验,所以不建议放太多场景使用。 具体不同类型广告体验,可以扫码 [图片] 首页模块-->>插屏广告使用说明-->>视频广告关于我们-->>banner广告 ## 哪种广告类型收益相对最大 [图片] 在10月30号,将banner广告同一替换为激励式视频广告和视频广告,收益很明显从30元上升到90元、150元 可以看到视频广告相对于banner广告,对于收益增加是有用的。 下图是某小程序12月4号一天的收益数据 [图片] 12月4号一天,不同广告类型,收益分析 总收益 194.74+23.27+147.82=365.83 具体分拆来看 广告类型点击量总收益单个点击收益(元)banner1956194.740.099插屏广告6223.270.375激励式视频广告152147.820.972 通过上图我们对比分析,不难得出以下结论:激励式视频广告单个点击的收益最大、 当然我们不能通过单一维度来了解哪种收益最好,还要综合考虑,比如哪种广告对用户影响最小,毕竟不管哪种方式,广告的接入肯定会带来交互体验上的障碍, 我们必须在交互体验和广告收益这两者之间做好权衡。 ## 系统公告 激励式广告于7月31日支持30秒视频素材,广告流量将逐步放开,MP后台-广告位管理模块可支持选择6-15秒视频或6-30秒视频素材的功能,请流量主根据产品进行调整。程序视频广告已于9月4日正式全量上线,开通后即按广告曝光获得分成收入,进一步提升流量变现收益。小程序视频前贴广告组件已于8月30日正式全量上线,开通后即按广告曝光获得分成收入,进一步提升流量变现收益。## 官方文档 小程序广告组件流量主操作指引https://wximg.qq.com/wxp/pdftool/get.html?id=BJSyDkLqz&pa=14&name=miniprogramAds_supplier_manual应用规范https://wxa.wxs.qq.com/mpweb/delivery/legacy/pdftool/get.html?id=rynYA8o3f&pa=10&name=miniprogramAds_supplier_guidance小程序流量主应用规范https://wximg.qq.com/wxp/pdftool/get.html?id=rynYA8o3f&pa=10&name=miniprogramAds_supplier_guidance处罚标准https://wxa.wxs.qq.com/mpweb/delivery/legacy/pdftool/get.html?id=BkTGkbs2G&pa=1&name=miniprogramAds_supplier_regulation小程序视频广告流量主指引https://wximg.qq.com/wxp/pdftool/get.html?post_id=1317小程序视频前贴广告流量主指引https://wximg.qq.com/wxp/pdftool/get.html?post_id=1318## 总结三点 从纯收益的角度来讲,在各种广告类型中,视频广告(包含激励式视频广告、视频广告、视频前贴广告)要比banner广告要好,而且好很多从用户体验来讲,插屏广告是首次打开带插屏广告的页面强制弹出的,但是广告过后,在页面是不占空间的,这是区分与其他广告的地方,banner广告、激励式视频广告、视频广告、视频前贴广告都是在页面中占固定的空间的,这一点要小程序运营同学权衡。Banner广告是按点击,激励式视频、视频广告、插屏广告都是按照曝光来收取广告费用的,这一点非常重要,难怪我每次手工点击我的视频广告没有见流量的增加[哭脸.jpg]。[感谢 @ 仙森 补充于2019年12月9号] 虽然对个人开发者而言,我们开发小程序的目的是为了收益(当然也有为了情怀而开发),在了解如何收益的情况下,我们还是应该尽量把精力放在小程序本身的开发上面。 感谢 在此特别感谢,小程序运营讨论群的两位小伙伴,微信号中间两位已打码 1、@迭戈 (yang_##chun) 2、@风猫 (cs##26)
2020-12-25 - 小游戏模拟器分离以后,界面整体显示不全?
开发者工具版本: Nightly 1.03.2006112, Windows 7-64位旗舰版。 症状:在模拟器分离的状态下:整体屏幕宽,高显示不全,具体参见以下截图。 当模拟器不分离的时候显示正常,分离之后就会有上述这种情况。尝试新建了一个全新的小游戏,发现也是这种情况。请尽快提供解决方案,谢谢! [图片]
2020-06-12 - 云开发数据库和开放域同时使用问题
在小游戏的程序里能同时使用云开发的数据库和开放域吗? 我单独使用云数据库没问题,单独使用开放域也没问题, 但两个都用就会有问题。 程序开始调用wx.cloud.init()简单地初始化数据库,这时编译正常。 但是如果在game.json中增加了开放域的配置("openDataContext": "src/myOpenDataContext"),程序编译就会出错。请问这是什么原因?[图片]
2019-06-27