- 不同页面通过订阅消息事件的方式互相通信
业务背景是tabbar有一个新增的功能,在不同的页面都可以操作新增,保存后首页以及个人中心页面的清单数据都要马上更新,但又不想通过调用接口的方式更新。因此自己搞了一个简单的消息事件订阅,比如A,B,C三个页面同时订阅更新事件,那么在D页面操作了更新动作后就会通知A,B,C三个页面。 代码示例: event.js //事件集合 const eventInfo = {}; /** * 注册消费者 * 相同事件、相同消费者名称时会被覆盖 * @param eventName 事件名称 * @param callback 回调事件 */ const on = (eventName, callback) => { const pages = getCurrentPages(); const consumerName = pages[pages.length - 1].route; if (!eventInfo[eventName]) { console.warn("广播事件不存在,不处理", eventName, consumerName); return; } const consumerInfo = eventInfo[eventName]; consumerInfo[consumerName] = callback; console.log("注册消费者完毕=>", eventName, consumerName); } /** * 取消消费者 * @param eventName 事件名称 */ const off = (eventName) => { const pages = getCurrentPages(); const consumerName = pages[pages.length - 1].route; if (!eventInfo[eventName]) { console.warn("广播事件不存在,不处理=>", eventName, consumerName); return; } const consumerInfo = eventInfo[eventName]; delete consumerInfo[consumerName]; console.log("取消消费者完毕=>", eventName, consumerName); } /** * 推送事件消息 * @param eventName 事件名称 * @param data 消息体 */ const emit = (eventName, data = {}) => { if (!eventInfo[eventName]) { console.warn("广播事件不存在,不处理=>", eventName, data); return; } const consumerInfo = eventInfo[eventName]; const consumerNames = Object.keys(consumerInfo); consumerNames.forEach(consumerName => { if (typeof consumerInfo[consumerName] == 'function') { console.log("推送事件消息完毕=>", eventName, consumerName, data); consumerInfo[consumerName](data); } else { console.warn("消费者没有回调函数,不处理=>", eventName, consumerName, data); } }) } /** * 批量推送事件消息 * @param eventNames * @param data */ const emitBatch = (eventNames, data) => { eventNames.forEach(eventName => { emit(eventName, data); }) } /** * 初始化 */ const init = () => { try { console.log("初始化广播通道"); const eventNames = Object.keys(EVEN_NAME); eventNames.forEach(eventName => { eventInfo[eventName] = []; }) } catch (e) { console.error("初始化广播通道出现异常:", e) } } /** * 事件列表 * @type {{REFRESH_CARD_LIST: string, REFRESH_USER_INFO: string}} */ const EVEN_NAME = { RELOAD_CARD_LIST: "RELOAD_CARD_LIST",//重新加载清单数据 RELOAD_USER_INFO: "RELOAD_USER_INFO",//重新加载用户信息 SAVE_CARD_LIST: "SAVE_CARD_LIST",//保存清单 JOIN_INFO_FINISH: "JOIN_INFO_FINISH",//共享完成 JOIN_INFO_FINISH_CONFIRM: "JOIN_INFO_FINISH_CONFIRM",//共享完成确认 } module.exports = {init, on, off, emit, emitBatch, EVEN_NAME} 订阅消息: event.on(event.EVEN_NAME.RELOAD_CARD_LIST, data => { console.log("接收到刷新清单事件推送", data); this.loadData(); }); event.on(event.EVEN_NAME.RELOAD_USER_INFO, data => { console.log("接收到刷新用户信息事件推送", data); auth.setUserInfo2Data(app, this).then(); }); event.on(event.EVEN_NAME.JOIN_INFO_FINISH, data => { console.log("接收到共享记录完成事件推送", data); this.loadData(); auth.setUserInfo2Data(app, this).then(); this.toast.showToast({text: "清单共享成功啦"}); }) 发送消息: event.emit(event.EVEN_NAME.SAVE_CARD_LIST, e);
2024-02-07 - 微信小游戏CPS流量合作
开发者,你好: 为拓展更多用户发现路径,帮助优质游戏内容能被更多用户体验到,微信小游戏平台开启了“CPS合作”,接入更多打开场景。欢迎各位开发者加入,通过CPS模式与服务商(即流量渠道,下文称“服务商”,如APP/小程序/公众号/社群/其他应用等)合作获得收益。 1【参与合作】游戏自愿参与CPS流量合作,在MP平台CPS模块选择签约加入; 2【用户发现路径拓展】对参与的游戏,服务商将依据自身的产品逻辑、为用户展示小游戏。成功由服务商场景进入的用户可视为“合作新增流量” 3【结算规则】服务商推广带来的用户所产生的流水定义为“合作流水”(新增用户 & 30天回流用户),合作流水的按比例(新增用户默认为30%)将结算给服务商 4【未来】平台将不断丰富接入的流量方,帮助优质小游戏内容能被更多用户发现 开发者可登录PC端MP后台,通过CPS模块参与。 【常见QA】 1、参与CPS流量合作的流程? 开发者需通过 ①通过MP平台【成长】模块 -- ”CPS合作“系统完成CPS签约; ②通过【功能】模块 -- ”游戏运营工具箱“板块,上传(或更新)基础运营素材,需提交 封面图、游戏简介、宣传语、宣传视频、和宣传图;③与服务商进行结算(在结算单生成时自动进行),可通过CPS系统查看运营情况,并通过虚拟支付2.0系统查看结算信息 。 只有完成CPS签约的游戏、才有可能被服务商选择并进行推广,以产生成CPS合作结果。 2、参与CPS流量合作能获得什么? 平台将除小游戏自然流量外、需服务商(流量渠道)方付出营运与成本、为小游戏贡献新增流量和收入的模式定义为CPS流量合作。 【服务商】(如视频号、应用宝、QQ浏览器等)付出营运、流量等成本;获得对应小游戏合作流水的流量服务费。 【开发者】可获得服务商方提供的新增流量和收入;需付出流量服务费(默认为合作流水的30%)。 (当阶段开发者只需确认参与意愿,及维护运营素材。分发/运营工作由流量方完成。产生合作流水则按流量服务费结算看。不产生合作流水,则无费用负担。) 3、CPS流量合作如何结算?会影响正常收入吗? 小游戏收入流水ALL=原常规收入流水(自然流量+开发者买量部分)+CPS合作流水(在服务商场景打开小游戏的注册用户所贡献的流水) --------- CPS合作流水与原收入流水不互相影响。原收入流水将持续按分成政策结算(内购64,广告55)。针对CPS合作流水,将在结算后再扣除流量服务费->给服务商(默认流量服务费30%,内购334,广告235) 4、什么场景才叫服务商流量?如何选择服务商?现有服务商有哪些? 平台将除小游戏自然流量外、接入CPS体系并付出营运与成本、为小游戏贡献新增流量和收入的场景,定义为服务商。 现有服务商中含视频号、应用宝、QQ浏览器等(合作服务商会在MP后台陆续更新)。 5、CPS流量合作能为我带来多大增量? CPS合作的规模主要取决于服务商的拓展和贡献。对于小游戏原有流水规模,CPS合作都是增量场景。(开发者付出流量服务费从服务商获得合作流水,类比于付出买量预算获得用户) 平台会撮合更多服务商接入,服务商会基于自身的流量策略来分配给各小游戏。 是否展示小游戏/如何展示,取决于服务商策略,接入CPS合作不代表至少能获得xx流量。 6、我已经确认了参与CPS流量合作,还需要做些什么吗? 当阶段开发者需要做的:① 签约加入CPS合作;② 维护游戏运营素材;③设定合适的CPS分成比例(新增用户默认为30%,回流用户默认为0%);④查看CPS运营结果和结算信息;⑤ 若参与视频号CPS合作,欢迎开发者引入外站优质作者参与; [图片] 7.小游戏平台会从CPS流量合作中进行分成吗? CPS流量合作是小游戏平台提供的一项中立的技术与能力,由开发者与流量方之间自行决定是否参与合作、合作分成比例。小游戏平台本身不会参与CPS流量合作行为,既不会干预也不会因此参与分成。 8. 视频号CPS短视频任务要如何参与?怎样计算分成? 视频号CPS短视频能力,目前在逐步开放中。其分成模式与CPS合作相同。 开发者可先进行CPS签约,设定分成比例(新进和回流均支持),并完成运营素材的上传。平台将逐步邀约开启CPS短视频任务。 同时为了鼓励开发者已经建联或运营的作者进入视频号创作,平台提供激励计划帮助获量。 外站优质内容在视频号也有很好的观看消费,欢迎作者们入驻。 任何疑问欢迎前往微信小游戏开发者社区发帖提问,或者通过智能客服联系我们。
2024-03-22 - 小程序搜索优化指南(SEO)
2019年上半年微信发布了基于小程序页面的搜索,为了让我们更好地发现及理解小程序的页面,结合过去一段时间来我们遇到的各种情况,我们强烈建议各位开发者花一些宝贵的时间认真阅读本文:) 爬虫访问小程序内页面时,会携带特定的 user-agent "mpcrawler" 及场景值:1129 1. 小程序里跳转的页面 (url) 可被直接打开。 小程序页面内的跳转url是我们爬虫发现页面的重要来源,且搜索引擎召回的结果页面 (url) 是必须能直接打开,不依赖上下文状态的。特别的:建议页面所需的参数都包含在url 2. 页面跳转优先采用navigator组件。 小程序提供了两种页面路由方式: a.navigator 组件 b. 路由 API,包括 navigateTo / redirectTo / switchTab / navigateBack / reLaunch 建议使用 navigator 组件,若不得不使用API,可在爬虫访问时屏蔽针对点击设置的时间锁或变量锁。 3.清晰简洁的页面参数。 结构清晰、简洁、参数有含义的 querystring 对抓取以及后续的分析都有很大帮助,但是将 JSON 数据作为参数的方式是比较糟糕的实现。 4. 必要的时候才请求用户进行授权、登录、绑定手机号等。 建议在必须的时候才要求用户授权(比如阅读文章可以匿名,而发表评论需要留名)。 5. 我们不收录 web-view 中的任何内容。 我们暂时做不到这一点,长期来看,我们可能也做不到。 6. 利用 sitemap 配置引导爬虫抓取,同时屏蔽无搜索价值的路径。 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html 7. 设置一个清晰的标题和页面缩略图。 页面标题和缩略图对于我们理解页面和提高曝光转化有重要的作用。 通过wx.setNavigationBarTitle或 自定义转发内容onShareAppMessage对页面的标题和缩略图设置,另外也为 video、audio 组件补齐 poster /poster-for-crawler属性。 8. 使用页面路径推送能力 可极大丰富微信可以收录的内容,进而提高小程序内容的曝光机会。请参考: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/search/search.submitPages.html
2020-01-14 - 「代金券」产品介绍
一、简介 商户可通过接入微信支付营销API,获取代金券的全过程解决方案,在商户已有的平台实现制券、发券、查券、修改等功能。同时可享受返佣所获得的收益,及微信支付代金券的特有能力和优势。 ● 能力:微信场景内投放、安全防刷机制,品牌曝光 ● 优势:高触达性、高服务连接能力 二、功能介绍 ■ 功能强大,满足大多数营销需求 微信支付代金券支持全场满减券、单品满减券、单品换购券,满足大多数日常营销需求。 ■ 流程完善,复杂逻辑全搞定 营销活动除了基础的制券、发券,还包含使用优惠计算、退款、对账等复杂的流程。微信支付提供了完整的方案,可供商户/服务商使用。 ■ 场景灵活,自定义场景发券 商户可以在任意场景(例如:小程序、H5、APP等)调用API发券,也可以定义活动形式(例如:全员发券、新用户发券、抽奖发券等)。 ■ 更好的触达 可插入卡包,在券过期前,用户会收到过期提醒,提升核销转化率。 ■ 安全防刷机制 结合微信强大的安全防刷能力,阻止黑产的不法行为,为营销资金保驾护航。 三、API相关限制 1、可调用接口的角色:每个接口的限制不同,可参考每个接口的规则。 2、调用时mchid和APPID需要有绑定关系,可在【微信支付商户平台—>产品中心—>开发配置】进行绑定,APPID和openid需要有对应关系。 四、操作指引 1、创建代金券批次 通过创建代金券批次接口,或登录微信支付商户平台创建代金券批次(操作路径:【微信支付商户平台—>营销中心—>创建全场/单品代金券】)。 可创建代金券的类型包含预充值和免充值两种类型。 ● 预充值代金券适用于第三方出资策划的活动,例如:满100减10. 指订单金额100元,用户实付90元,商户实收100元。 ● 免充值适用于商户策划的活动,例如:满100减10。 指订单金额100元,用户实付90元(用户领券后,在支付中直接核销10元),商户实收90元。 2、激活代金券批次 制券成功后,通过调用激活接口激活代金券批次。 说明:如果是预充值代金券,激活时从商户账户余额中锁定本批次的营销资金。 3、发放代金券 通过商户平台/API完成制券后,调用发放代金券接口进行代金券发放。 4、支付中自动核销券 用户领券后,在支付过程中自动核销券中所示金额,实付金额=订单总金额-代金券金额。 当一个券被核销后,微信支付侧会推送通知给商户/服务商服务器(前提是商户已设置接收通知的URL地址)。通知信息包括券ID、核销信息、单品信息等。 5、管理代金券 可通过查询、修改相关接口进行代金券管理。 6、营销事件推送 当营销相关事件发生时,向商户配置的服务器地址发送通知。目前支持核销通知。商家需要设置接收通知的URL地址,并在商户平台开通营销事件推送的能力,即可接收到相关通知。具体内容参见《核销事件回调通知》。 说明:如果不能收到推送信息,请按照【准备工作】自查,重点检查【API密钥设置】。 可点击查看制券环节的课程视频↓↓↓ [视频]
2021-10-12