- app.js 调用updateManager.applyUpdate() 没有出现提示更新弹框?
app.js 里面 会调用updateManager.applyUpdate(), 发布新版本上线后,本人(开发者)打开之前小程序 原来会出现更新弹框点击确定会更新刷新页面,最近两次发新版本没有出现弹框,是什么原因? 不确定用户打开小程序是否还有更新弹框?
2022-03-16 - 怎么把小程序放到公众号自动回复里面?
并且生成自己想要的文字,点击就能跳转至小程序里面。 如下图: [图片]
2022-06-11 - 社区每周 | 打开半屏小程序接口调整、获取附近 Wi-Fi 列表增加用户授权通知、渲染框架更新
各位微信开发者: 以下是打开半屏小程序接口增加 tap 事件触发时机要求、获取附近 Wi-Fi 列表增加用户授权的通知、小程序渲染框架更新及上周我们在社区收到的问题反馈的处理进度,希望与大家一同打造更好的小程序生态! 打开半屏小程序接口增加 tap 事件触发时机要求 为进一步规范能力使用、提升用户体验,从基础库 2.28.1 版本起,对调用 打开半屏小程序接口(wx.openEmbeddedMiniProgram)增加 tap 事件触发时机,即用户手动点击触发方可成功调用打开半屏小程序接口。对于非 tap 事件触发的接口调用,将自动切换为普通的小程序跳转小程序。 获取附近 Wi-Fi 列表增加用户授权的通知 为进一步规范开发者调用涉及用户信息相关接口或功能、保障用户合法权益,自 2022 年 12 月 26 日起,小程序调用 wx.getWifiList 接口时,需要获取用户位置信息 授权(scope.userLocation)。若用户未授权位置信息,回调结果将显示 12006 的错误码及 “auth deny” 的错误提示,不再返回附近 Wi-Fi 列表的信息。 以上调整将对 iOS 和安卓全量客户端版本生效;同时对所有小程序、小游戏和插件生效。请开发者关注并适配用户授权情况,避免对业务造成影响。详情查看原公告 《获取附近 Wi-Fi 列表增加用户授权的通知》 小程序渲染框架更新 微信团队在 WebView 渲染的基础上,更新 小程序渲染框架,提供更多贴近原生用户体验的新能力。近期重点更新能力如下: 支持小程序页面背景颜色调整支持 rem 单位,便于开发者更好调整相对大小支持 sticky 粘性布局组件,优化布局排列设计支持 aria component,满足视障人群访问小程序的需求scroll-view 组件下拉刷新增加 willRefresh 事件和 bounce 优化scroll-view 组件支持 custom type、scrollend 事件和 scrolling reasonscroll-view 组件新增 scroll-into-view-alignment、scroll-into-view-within-extent、cache-extent 属性同时小程序渲染框架已修复多项能力,请点击查看 更新日志,了解更多小程序渲染框架详情。 上周问题反馈和处理进度(11.14-11.18) 已修复的问题安卓微信 8.0.30 版本出现调用 camera 组件显示 mode="scanCode" 不能扫码的问题 查看详情 微信服务器向公众号推送消息或事件时,解析 DNS 时发现无效域名的问题 查看详情 微信团队 2022年11月25日
2022-11-25 - swiper 轮播图圆角滑动变会变成直角然后再回到圆角
你好,我用swiper 实现轮播图 swiper圆角 图片滑动的时候会先变成直角然后变成圆角,怎么解决?
2018-09-19 - 关于showToast和showLoading接口的调整通知
在showToast接口文档中的“bug&tips”部分提到:“使用 wx.hideToast/wx.hideLoading 都可以关闭提示框” 在新版本中调整为:必须配对使用。即showToast只能用hideToast隐藏,同showLoading。 对于有此特殊用法的小程序,请及时修改一下。带来不便之处,请见谅。
2017-11-27 - 微信开发者工具下载的 sourcemaps 怎么用。
什么是 Sourcemaps uglifyjs、bable 等工具会对 源代码 进行编译处理生成编译后的代码(下称目标代码),而 sourcemaps 就是保留了目标代码在源代码中的 位置信息 --------- 大神分割线 --------- 如何解读 Sourcemaps Sourcemaps 是一个 json [代码]{ "version": 3, "sources": ["a.js", "b.js"], // 源文件列表,这个表示是由 a.js 和 b.js 合并生成 "names": ["myFn", "test"], // 如果开启了变量名混淆,这里会保留变量名在源文件中名字信息 "sourcesContent: [], // 可选项,保存源码信息,顺序与 sources 字段对应,chrome 的 sources 面板中源码使用了这个字段的内容进行展示 "sourceRoot": "", // 源文件所在的目录信息 "file": "dist.js", // 可选,编译后的文件名 "mappings": "" // 这个是重点,是目标代码和源文件的位置的映射关系 } [代码] mappings 目标文件"行"的信息 mappings 是使用 ; 分隔的,每个部分对应目标代码的行 如: “;AAAA;AAAA,BBBB;;” 本例子目标文件有 4 行 第 0 行和第 3 行没有源文件对应信息,所以这两行是编译过程中加入的代码 目标文件的"列"信息 如: “AAAA,CAEA,CAEA;” ‘,’ 表示行内的位置信息分隔符 本例表示目标文件的这一行有三个有效的位置信息。 位置信息的第一位表示目标文件的列的 偏移 信息 本例中,表示列的信息是 ‘A’、‘C’、‘C’,对应的数字为 0、+1、+1,(vlq 编码,在线编解码工具) 注意,这个是偏移信息; 列数从 0 开始,依次累加偏移值可以算出当前的位置信息对应的真正的列 所以本例中表示的是目标文件的第 n 行中的第 0 列,第 1 列,第 2 列(没错是第 2 列) 源文件的信息 如:‘AAAA;ACAA;ADAA;’ 位置信息的第二位表示源文件的信息,本例子中是 ‘A’、‘C’、‘D’,对应数字是 0、+1、-1 如果 sourcemaps 中的 sources 字段只有一个文件的话,那么位置信息中第二位一直是 A(不需要偏移) 假设 sourcemaps 中 sources: [‘a.js’, ‘b.js’] 本例的意思是 AAAA: 目标文件第 0 行第 0 列 对应 第 0 个文件 a.js ACAA; 目标文件第 1 行第 0 列 对应 第 1 个文件 b.js ADAA; 目标文件第 2 行第 0 列 对了 第 0 个文件 a.js (偏移是 -1 又回到了 a.js) 源文件的行信息 位置信息的第三位表示源文件中的行的信息, 理解了位置偏移的概念,我们很容易理解 如:‘AACA,CACA;AACA;‘ 那么 AACA: 目标文件的第 0 行第 0 列 对应 第 0 个文件的第 1 行 CACA: 目标文件的第 0 行第 0+1 列 对应 第 0 个文件的第 1+1 行 AACA:目标文件的第 1 行第 0 列 对应 第 0 个文件的第 1 行 (注意:’;’ 后的行列偏移信息归 0) 源文件中的列信息 位置信息的第四位表示源文件中的列的信息 如:'AAAA,CAAC;' 那么 AAAA: 目标文件的第 0 行第 0 列 对应 第 0 个文件的第 0 行第 0 列 CAAC: 目标文件的第 0 行第 0+1 列 对应 第 0 个文件的第 0 行第 0+1 列 位置信息的第五位 第五位表示变量的偏移,对应 sourcemaps 中的 names 字段,表示目标文件中的变量名对应域源文件中的变量 如:’AAAA,CAACC;AAAAD;' sourcemaps 中 names 字段是 [‘a’, ‘b’] 那么 AAAA: 目标文件的第 0 行第 0 列 对应 第 0 个文件的第 0 行第 0 列,没有变量的信息 CAACC: 目标文件的第 0 行第 0+1 列 对应 第 0 个文件的第 0 行第 0+1 列,有变量信息,变量在源文件中是 ‘b’ (0+1=1) AAAAD: 目标文件的第 1 行第 0 列 对应 第 0 个文件的第 0 行第 0 列,有变量信息,变量在源文件中是 ‘a’ (1-1=0) --------- 大神分割线 --------- 怎么使用 Sourcemaps Q: 线上小程序报错,我怎么通过 sourcemaps 还原到源代码中? A: 如报错 appservice.js 1:15000, 表示目标文件第一行 第 15000 列位置报错。根据上文介绍的,通过 mappings 字段算。 Q: 不会。 A: 如果你会写代码的话,参考下边 [代码]import fs = require('fs') import {SourceMapConsumer} from 'source-map' async function originalPositionFor(line, column) { const sourceMapFilePath = '如果你不真的替换的成 sourcemaps 在硬盘中的位置,那你还是放弃自己写代码吧。 ' const sourceMapConsumer = await new SourceMapConsumer(JSON.parse(fs.readFileSync(sourceMapFilePath, 'utf8'))) return sourceMapConsumer.originalPositionFor({ line, column, }) } originalPositionFor(出错的行,出错的列) [代码] Q: 不会写代码 A: 下载最新版的开发者工具,菜单-设置-拓展设置-调试器插件 [图片] [图片] Q: 为啥都是 null? A: 每个小程序版本都应该对应一个sourcemap文件。 运营中心那里下载的 sourcemap 是对应线上最新的小程序版本。但运营中心的报错集合了多个小程序版本。拿旧小程序版本的报错信息,和最新版本的 sourcemap,是匹配不出的。开发者工具和ci 上传的时候,会提示下载对应版本的 sourcemap 信息,可以自助保存。 [图片] Q: 怎么确定有没有版本对应上 A: 下载的 sourcemap 中有个 wx 字段,标明了该 sourcemap 文件对应小程序版本号。 [图片] [图片] 前提 1.确保发生错误的小程序版本和下载回来的 sourcemap 版本是一致的。 a. 下载 sourceMap 文件,可在 mp 后台或开发者工具上传成功弹窗下载 2.确保 map 文件和发生错误的 js 文件是对应的。sourcemap 的目录和文件说明 a. APP 是主包,FULL 是整包(仅在不支持分包的低版本微信中使用),其他目录是分包 b. 每个分包下都有对应的 app-service.js.map 文件。 c. 如果是使用了按需注入特性(app.json中配置了lazyCodeLoading),那么每个分包下还会有 appservice.app.js.map(对应分包下非页面的js),和所有页面的 xxx.js.map 以上事情都确保正确之后,还是出现行列号匹配不出来的情况。那就需要进一步排查。 线上运行的小程序 sourcemap 文件是怎么生成的? 处理流程:源码 [ a.js a.js.map b.js b.js.map ] -> 开发者工具(JS转 ES5,压缩)-> 微信后台(合并 js 文件)[ appservice.app.js appservice.app.js.map]。 注意:如果源码在交给工具之前是经过了 webpack 等打包工具的处理,那源码这里需要有 map 文件。否则不需要存在 map 文件。 可以看出,map 文件经过三个步骤的处理,每个步骤都有可能导致出错,因此开发者需要先排查,是否是前两个步骤出错导致的 map 文件失效的。 如何排查前两个步骤产生的 map 文件是否有问题。 1.排查 a.js.map 文件是否有问题。 a. 可以在 a.js 的代码中写一下 throw new Error(‘test sourcemap’)。 b. 使用了 webpack 的情况下,要构建为生产环境的版本。 c. 在开发者工具模拟器中运行对应的页面,看看控制台中的报错,错误行列号是否能正常映射到源文件。 2.排查 开发者工具(JS转 ES5,压缩)步骤是否有问题。 在排查完第一步的基础上,点击预览,用微信上扫码预览,并打开调试 vConsole 功能,检查 vConsole 中是否有报错信息,检查报错信息中的行列号是否能正常映射到源文件。 如何排查 微信后台(合并 js 文件)是否有问题。 a. 一定要先排查完前两个步骤再来排查这一步,一般情况下,这一步是不会出错的。 b. 如果有问题,也只会导致 map 文件中的行号信息出现偏移。比如 Error 信息中显示报错地址是 100: 200,行号是 100。那么你可能直接用 100: 200 在 map 文件中搜索不出信息,但是如果 用 150: 200 就可以搜索出来,说明行号偏移了 50。那其他报错也可以偏移 50 后再进行搜索就找到结果。 c. 怎么排查偏移了多少?可以结合 error.message 的内容,初步判断大概错误的内容是什么。把对应的 map 文件放到这个网站上 source-map-visualization 进行搜索,找出哪些相同列号的地方。再结合 error.message 的内容进行判断。 d. 如果排查到是这一步导致的问题,请在社区上联系我们,我们会在后续版本进行修复。 依旧排查不出原因? 先整理一下按照上述步骤排查的结论,再在社区上联系我们协助
2023-02-10 - miniprogramRoot的设置会影响开发者工具右键文件夹是否显示新建component?
由于上传的是编译压缩后的代码,所以miniprogramRoot设置的是dist/,导致除了dist/下的文件夹外(比如平时开发时的目录src/),其他文件夹在右键时不会显示新建component和新建page。 官方能否解决这个开发者工具的问题,使得开发者工具打开的项目目录下右键文件夹都能显示新建component和新建page。 当前使用mac,不确定windows下是否会有这个问题。
2022-02-25 - 关于“人工智能生成合成内容需增加显著标识”公告
根据国家互联网信息办公室、工业和信息化部、公安部、国家广播电视总局联合印发的《人工智能生成合成内容标识办法》第四条、第五条规定,人工智能生成合成内容需增加显著标识。 所有人工智能生成合成内容,如:AI问答、AI换脸、AI绘画、AI创作类目等类型,除补充对应【深度合成-AI问答/AI换脸/AI绘画/AI创作】类目外,还需在AI生成内容显著位置进行标注,明确标注“AI生成、人工智能生成”或同等含义字样。 正面示例1: 内容:小程序涉及人工智能、深度学习、大模型技术内容生成AI咨询问答。 类目:深度合成-AI问答 页面显著标识:"本服务为AI生成内容,结果仅供参考" [图片] 正面示例2: 内容:小程序涉及人工智能技术创作小说,基于大模型小说创作 类目:深度合成-AI问答、文娱-小说 页面显著标识:“素材涉及AI生成” [图片] 正面示例3: 内容:基于算法模型,AI人脸编辑与替换技术生成的图片 类目:深度合成-AI换脸 页面显著标识:“图片由AI生成” [图片] 违规案例1: 内容:基于AIGC技术利用大模型的智能写作 类目:深度合成-AI问答 需在AI生成内容显著位置进行标注,明确标注“AI生成、人工智能生成”或同等含义字样。 [图片] 违规案例2: 内容:基于AI大模型驱动的视频换脸生成 类目:深度合成-AI换脸 问题点: ① 需在AI生成内容显著位置进行标注,明确标注“AI生成、人工智能生成”或同等含义字样; ② ios暂不支持虚拟支付 [图片] 违规案例3: 内容:基于AI大模型驱动的视频换脸生成 类目:深度合成-AI换脸 问题点: ① 需在AI生成内容显著位置进行标注,明确标注“AI生成、人工智能生成”或同等含义字样; ② ios暂不支持虚拟支付 [图片] 违规案例4: 内容:上传一张照片并选择一段视频模板,借助AI换脸技术,一键生成定制化短视频 类目:深度合成-AI换脸 问题点: 需在AI生成内容显著位置进行标注,明确标注“AI生成、人工智能生成”或同等含义字样。 [图片] 平台将于2025年9月1日正式落实要求,请各位开发者合理安排版本迭代计划,以免影响小程序正常运营。
10-29 - 小程序用户隐私保护指引常见问题
小程序用户隐私保护指引常见问题 在调用隐私接口、使用隐私组件的之前,需要先更新完善用户隐私保护指引。在完善用户隐私保护指引的过程当中,开发者可能会遇到一些问题: 小程序用户隐私保护指引在哪里完善? 小程序用户隐私保护指引审核通过了,查看协议内容是空白的? 小程序用户隐私保护指引因用户信息授权描述不明确、不清晰,本次审核不通过? 小程序用户隐私保护指引审核通过,调用接口还是报错? 一、设置入口 (1)自主开发的小程序 官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/ 【入口1】登录小程序后台(https://mp.weixin.qq.com)—> 左下角头像 —> 账号设置 —> 服务内容声明,即可找到【用户隐私保护指引】的设置入口。(当前仅适用于已发布上线的小程序) [图片] 部分浏览器会阻止弹出式窗口,如果点击「去完善」后页面没有反应,可以先在浏览器地址栏查看下是不是被阻止弹窗了。 比如Safari浏览器,需要点击下刷新按钮旁边的图标,才会打开新的页面。 [图片] 【入口2】在提交小程序代码审核的时候,页面底部「用户隐私保护指引设置」一栏,选择「采集用户隐私」,即可更新完善用户隐私保护指引,代码审核通过且发布上线后即可生效。 [图片] (2)第三方代开发的小程序 官方文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/product/privacy_setting.html 小程序授权给第三方平台代开发后,是无法在小程序后台配置用户隐私保护指引的,小程序后台没有配置入口,需要联系所在第三方平台通过接口配置。 如果你是第三方平台开发者,可以参考以下步骤操作: 1、提交代码。 2、调用「获取小程序用户隐私保护指引」接口([代码]getPrivacySetting[代码]),查看[代码]privacy_list[代码]字段,这里显示的是代码检测出来的用户信息类型,查看需要补充哪些权限描述。 3、调用「设置小程序用户隐私保护指引」接口([代码]setPrivacySetting[代码])更新用户隐私保护指引。 4、 (选) 调用「获取小程序用户隐私保护指引」接口([代码]getPrivacySetting[代码]),核对[代码]setting_list[代码]字段内容。 5、提交代码审核,审核通过后,发布上线。 注意事项 修改用户隐私保护指引中的内容,在调用接口的时候, 请求参数中的[代码]privacy_ver[代码]传 2 或者不传(默认是2开发版) 更新开发版。 接口调用成功后,过一段时间就会在开发版、体验版生效;如果想要在正式版生效, 需要重新提交代码审核,审核通过且发布上线后即可生效 。 二、内容空白 看到有不少开发者会遇到小程序用户隐私保护指引审核通过了,查看内容是空白的,出现这个问题一般是因为小程序未发布上线。 小程序后台账号设置页面的【用户隐私保护指引】更新的是现网版本,如果你的小程序未发布上线,即你小程序还没有现网版本的【用户隐私保护指引】,因此审核通过后是不会生效的,页面也不会显示你之前提交审核时填写过的内容。 只能等待小程序发布上线后,才可以在小程序后台账号设置页面更新【用户隐私保护指引】。 后续发版的时候,可以直接在代码提审页面底部完善用户隐私保护指引,审核通过且发布上线即可生效。 [图片] 若小程序未发布上线,是测试不了隐私相关功能的。不要在[代码]app.json[代码]文件里面配置 [代码]"__usePrivacyCheck__": true[代码] ,可以配置 [代码]"__usePrivacyCheck__": false[代码] ,一般来说是可以不检测隐私协议,正常调用隐私接口的。 如果还是报错112,那么就只能将小程序发布上线,完善用户隐私保护指引后再试。 三、审核驳回 开发者需要自行检查下所有填写的描述是否符合对应的隐私接口/组件,特别要注意标有【仅写入】权限(仅写入,无读取)。 1、描述明确不是要求写得多,从用户角度出发,简要说明与隐私接口/组件有直接联系的用途即可。 2、尽量避免有相同描述。 文章下方整理了部分权限描述示例,供开发者参考。 常见驳回场景 🌟 1、相册(仅写入)权限 绝大多数开发者是因为这个权限描述被驳回的。 【相册(仅写入)权限】是用于保存图片或保存视频,是没有上传、发布、读取等功能的,大部分开发者的描述填写了上传图片、编辑个人信息、发布、扫码等与该接口权限不符的内容,可参考填写:保存XX图片、保存XX视频。 2、访问你的摄像头 【访问你的摄像头】权限没有直接上传的功能,建议填写的描述与拍照、拍摄相关,可参考填写:拍照上传XX图片、拍摄上传XX视频。 以下内容摘抄自官方知识库:https://developers.weixin.qq.com/community/develop/doc/0002ac0d014ca0e20c3db5cea51809 隐私接口授权信息描述存在不明确、空白、填写无意义内容、乱填写、填写过于简洁含糊等情况; 示例①:小程序涉及多个隐私信息接口类型,信息类型填写存在不清晰且多个接口原因一致 [图片] [图片] 示例②:小程序隐私信息接口类型存在填写无意义的内容,填写“为了收集信息而收集信息”并未清晰描述信息接口原因 [图片] 示例③:小程序隐私信息接口类型存在填写“不清楚、不知道”、“111、AAA、!@#¥”等乱填接口原因 [图片] 示例④:内容过于简洁或含糊,仅填写“使用、定位、开发”等内容,无法清晰了解到使用接口原因 [图片] 若隐私接口暂未使用,建议自查代码,删除隐私接口相关代码,后续需要使用再上架代码并填写具体的使用说明再提审。 正确描述示例 [图片] 填写参考示例 这里我整理了官方专员在社区中回复的参考示例,开发者需要根据自己小程序实际业务来填写。(以下每个权限都列举了不同的例子,选择其中1个适合自己的描述修改即可) 【相册(仅写入)权限】,可参考填写:保存xxx图片、保存xxx视频。 【访问你的摄像头】,可参考填写:拍照上传xxx图片、拍摄上传xxx视频。 【收集你的地址】,可参考填写:辅助填写地址信息、推荐附近xxx。 【收集你选中的照片或视频信息】,可参考填写:上传xxx图片、上传xxx视频。 【访问你的麦克风】,可参考填写:实名认证时读数验证、录制xxx语音。 【收集你的微信昵称、头像】,可参考填写:同步头像或昵称、修改个人头像或昵称。 【收集你选中的文件】,可参考填写:上传xxx。 【读取你的剪切板】,可参考填写:复制xxx、粘贴xxx。 【收集你的位置信息】,可参考填写:显示到xxx的距离、获取周边店铺信息、推荐附近XX、辅助填写XX地址信息、打卡签到。 【收集你的手机号】,可参考填写:售后联系、方便商家联系。 【收集你的微信运动步数】,可参考填写:好友步数排行、步数兑换XX。 四、审核通过,调用接口还是报错 小程序用户隐私保护指引审核通过后,需要一定的时间生效,可以过一段时间再进入小程序尝试。 若审核通过超过1个小时,调用接口/组件还是报错[代码]112[代码],可以删除开发版、体验版、正式版小程序后重试。 若还是有问题,可能是以下原因: (一)未正确声明隐私类型 比如:需要调用[代码]wx.chooseLocation[代码]接口,只声明了「收集你的位置信息」权限,未声明该接口所需要的「收集你选择的位置信息」权限。(这两个权限相差两个字,容易混淆) 开发者可参考【小程序用户隐私保护指引内容介绍】文档,使用网页搜索功能,找到对应的隐私接口/组件描述。 (二)小程序未发布 目前未发布小程序无法更新用户隐私保护指引内容(第三方平台代开发小程序除外),自行开发的小程序可参考文章上面第二点内容。 如有相关问题,可以前往「小程序版块」发帖反馈,在帖子中详细描述所遇到的问题,建议补充出现问题的小程序AppId、相关截图。 本文仅供参考使用,希望能够帮助各位开发者顺利完善用户隐私保护指引,确保合规使用隐私接口和组件。
09-25 - 小程序加急审核流程上线
为优化小程序审核体验,配合各位开发者解决小程序的紧急迭代需求。平台上线了加急审核流程,开发者可根据自身业务情况进行审核加速申请。 1.加急申请入口 符合条件用户在审核提交页面【审核加急】,选择【加急】并填写【“加急类型”“ 加急说明”】情况后提交审核。 [图片] 2.加急次数说明 (1)非个人主体类型:每个自然年有3次申请加急机会 (2)个人主体类型:每个自然年有1次申请加急机会 注:①提审勾选加急后,如在审核前撤回,机会不被消耗;如加急审核单已被审核,无论审核结果通过/不通过,加急机会都将被消耗。请开发者谨慎合理使用加急机会; ②如勾选加急后,审核单被驳回。开发者在12小时内再次提交审核或者通过驳回站内信内的【前往反馈页面】提交反馈,可获得相对加急的审核队列。 3.加急审核时间段与审核时长 (1)非个人主体类型:00:00-23:59 (2)个人主体类型:9:00-22:00 审核时长:正常加急审核预计2小时内完成。请开发者结合审核工作时间及加急单等待时长综合评估提审加急单的时间。 注意:如遇节假日如春节假期前等加急提审队列拥挤,或小程序代码包含复杂逻辑等特殊情况,将无法保证加急审核在2小时内完成。 4. 以下情形的代码提审单暂不支持加急审核 选择国内主体的以下类目或选择海外主体后首次提交代码审核,需报属地网信部门复核,预计审核时长7天左右,暂不支持加急审核。 [图片] 加急审核机会是根据平台审核资源调配,配合开发者遇重大提审节点快速审核迭代的体验优化。每个小程序的加急额度是有限的,请提交前自行检查,确保加速版本的小程序符合法律法规和平台规则,避免浪费有效加急机会。同时,开发者也可以通过小程序评测达标来获取更多的加急机会。 加急审核机制上线后,我们会根据开发者的使用额度情况及审核资源情况等,对目前加速审核机制进行动态调整与优化。
2022-07-26 - 【好文】小程序动态换肤解决方案 - 本地篇
小程序动态换肤方案 – 本地篇 需求说明 在开发小程序的时候,尤其是开发第三方小程序,我们作为开发者,只需要开发一套模板,客户的小程序对我们进行授权管理,我们需要将这套模板应用到对方的小程序上,然后进行发版审核即可; 但是个别客户的小程序需要做 [代码]定制化配色方案[代码],也就是说,不同的小程序个体需要对页面的元素(比如:按钮,字体等)进行不同的配色设置,接下来我们来讨论一下怎么实现它。 方案和问题 一般来说,有两种解决方案可以解决小程序动态换肤的需求: 小程序内置几种主题样式,通过更换类名来实现动态改变小程序页面的元素色值; 后端接口返回色值字段,前端通过 [代码]内联[代码] 方式对页面元素进行色值设置。 当然了,每种方案都有一些问题,问题如下: 方案1较为死板,每次更改主题样式都需要发版小程序,如果主题样式变动不大,可以考虑这种; 方案2对于前端的改动很大,[代码]内联[代码] 也就是通过 [代码]style[代码] 的方式内嵌到[代码]wxml[代码] 代码中,代码的阅读性会变差,但是可以解决主题样式变动不用发版小程序的问题。 ps:我一直在尝试如何在小程序里面,通过js动态修改stylus的变量问题,这样就可以解决上面说的问题了,后期如果实现了,一定周知各位 本文先重点描述第一种方案的实现,文章末尾会贴上我的 [代码]github项目[代码] 地址,方便大家尝试。 前期准备 本文采用的是 [代码]gulp[代码] + [代码]stylus[代码] 引入预编译语言来处理样式文件,大家需要全局安装一下 [代码]gulp[代码],然后安装两个 [代码]gulp[代码] 的插件 [代码]gulp-stylus[代码](stylus文件转化为css文件) [代码]gulp-rename[代码](css文件重命名为wxss文件)。 gulp 这里简单贴一下gulpfile文件的配置,比较简单,其实就是借助 [代码]gulp-stylus[代码] 插件将 [代码].styl[代码] 结尾的文件转化为 [代码].css[代码] 文件,然后引入 [代码]gulp-rename[代码] 插件对文件重命名为 [代码].wxss[代码] 文件; 再创建一个任务对 [代码].styl[代码] 监听修改,配置文件如下所示: [代码]var gulp = require('gulp'); var stylus = require('gulp-stylus'); var rename = require('gulp-rename'); function stylusTask() { return gulp.src('./styl/*.styl') .pipe(stylus()) .pipe(rename(function(path) { path.extname = '.wxss' })) .pipe(gulp.dest('./wxss')) } function autosTask() { gulp.watch('./styl/*.styl', stylusTask) } exports.default = gulp.series(gulp.parallel(stylusTask, autosTask)) [代码] stylus 这里会分为两个文件,一个是主题样式变量定义文件,一个是页面皮肤样式文件,依次如下所示: 主题样式变量设置 [代码]// theme1 theme1-main = rgb(254, 71, 60) theme1-sub = rgb(255, 184, 0) // theme2 theme2-main = rgb(255, 158, 0) theme2-sub = rgb(69, 69, 69) // theme3 theme3-main = rgb(215, 183, 130) theme3-sub = rgb(207, 197, 174) [代码] 页面皮肤样式 [代码]@import './define.styl' // 拼接主色值 joinMainName(num) theme + num + -main // 拼接辅色值 joinSubName(num) theme + num + -sub // 遍历输出改变色值的元素类名 for num in (1..3) .theme{num} .font-vi color joinMainName(num) .main-btn background joinMainName(num) .sub-btn background joinSubName(num) [代码] 输出: [代码].theme1 .font-vi { color: #fe473c; } .theme1 .main-btn { background: #fe473c; } .theme1 .sub-btn { background: #ffb800; } .theme2 .font-vi { color: #ff9e00; } .theme2 .main-btn { background: #ff9e00; } .theme2 .sub-btn { background: #454545; } .theme3 .font-vi { color: #d7b782; } .theme3 .main-btn { background: #d7b782; } .theme3 .sub-btn { background: #cfc5ae; } [代码] 代码我写上了注释,我还是简单说明一下上面的代码:我首先定义一个主题文件 [代码]define.styl[代码] 用来存储色值变量,然后会再定义一个皮肤文件 [代码]vi.styl[代码] ,这里其实就是不同 [代码]主题类名[代码] 下需要改变色值的元素的属性定义,元素的色值需要用到 [代码]define.styl[代码] 预先定义好的变量,是不是很简单,哈哈哈。 具体使用 但是在具体页面中需要怎么使用呢,接下来我们来讲解一下 页面的 [代码]wxss[代码] 文件导入编译后的 [代码]vi.wxss[代码]文件 [代码]@import '/wxss/vi.wxss'; [代码] 页面的 [代码]wxml[代码] 文件需要编写需要改变色值的元素,并且引入变量 [代码]theme[代码] [代码]<view class="intro {{ theme }}"> <view class="font mb10">正常字体</view> <view class="font font-vi mb10">vi色字体</view> <view class="btn main-btn mb10">主色按钮</view> <view class="btn sub-btn">辅色按钮</view> </view> [代码] 页面 [代码]js[代码] 文件动态改变 [代码]theme[代码]变量值 [代码] data: { theme: '' }, handleChange(e) { const { theme } = e.target.dataset this.setData({ theme }) } [代码] 效果预览 [图片] 项目地址 项目地址:https://github.com/csonchen/wxSkin 这是本文案例的项目地址,为了方便大家浏览项目,我把编译后的wxss文件也一并上传了,大家打开就能预览,如果觉得好,希望大家都去点下star哈,谢谢大家。。。
2020-04-23 - 【深度合成-AI绘画、深度合成-AI换脸、深度合成-AI问答】修改指引说明
代码审核环节,将会对小程序运营的内容与所选类目是否相符进行核实,当小程序服务内容涉及深度合成技术 (如: AI问答、AI换脸视频、AI绘画等) ,需补充对应的服务类目:深度合成-AI问答类目、深度合成-AI换脸类目、深度合成-AI绘画、深度合成-AI创作类目;且属个人主体尚未开放服务类目,建议申请企业主体类型小程序,否则代码审核环节将面临因类目/内容不符被驳回情形。 一、深度合成服务,你需要了解: [图片] 注意:申请类目资质时,若当地存在不需要办理相关资质即可从事相关服务内容,建议可提供包含但不限于当地的政策/法规/主管部门等情况材料说明直接申请类目,类目侧会根据提供的材料进一步评估反馈。 二、应用场景示例与整改指引: 1、【深度合成-AI问答】类目:适用于提供图片深度合成技术(如:AI问答)等相关服务。 示例: [图片] 2、【深度合成-AI绘画】类目:适用于提供图片深度合成技术(如:AI绘画)等相关服务。 示例: [图片] 3、【深度合成-AI换脸】类目:适用于提供视频深度合成技术(如:AI换脸视频)等相关服务。 示例: [图片] 4、【深度合成-AI创作】类目:适用于提供文本深度合成技术(如:AI创作)等相关服务。 示例: [图片] 整改建议(2选1): 1、涉及深度合成服务,需补充选择对应的:深度合成- AI问答、Al换脸、AI绘画、AI创作类目,并在AI生成页面增加显著说明“AI生成、人工智能生成”或同等含义字样。 2、或自查代码,确保移除提供文本深度合成技术(如:AI问答)等内容及相关分类标签。 注:境外主体、个人主体的小程序服务内容涉及深度合成技术 (如: AI问答、AI换脸视频、AI绘画等) ,属个人主体尚未开放服务类目。 本文档为深度合成-AI绘画、深度合成-AI换脸、深度合成-AI问答、深度合成-AI创作类目的介绍说明,如存在上述问题应及时调整、修整,避免后续存在上诉问题审核失败;若仍有其他疑惑,可以通过以下咨询入口反馈: 1、微信开放社区-交流专区-小程序发帖咨询-提出问题-运营相关问题 2、代码审核驳回站内信通知-客服咨询入口(客服咨询入口目前正在测试开放阶段,若无客服入口,建议前往开放社区发帖咨询) 我们会根据新出现的问题、相关法律法规更新或产品运营的需要及时对其内容进行修改并更新,制定新的规则,保证微信用户的体验。建议开发者反复查看以便获得最新信息,定期了解更新情况。
10-29 - 微信团队邀请开发者内测小程序「聊天工具」模式
各位开发者: 为更好地支持开发者在微信聊天场景服务用户,小程序开始内测「聊天工具」模式。该模式下,开发者可以让用户更方便地发起和参与小程序群任务,在群打卡、群问卷、群拼单、群办公、群抽奖等多种群协作场景上有更好的体验。 主要更新能力如下: 1.发起群任务更方便 在小程序内发起群任务时,可直接多选群内聊天成员,并支持一次性@参与成员进行提醒,协作效率提升 [图片] 2.群任务进度及时同步 在用户参与/完成任务后,小程序动态消息卡片、群系统消息实时更新任务进度,方便参与人员了解任务进度 [图片] 3.聊天内容可回到小程序 可从小程序内发送文本、提醒、图片、表情、视频等消息内容到聊天中,并支持从消息“小尾巴”回到小程序 [图片] 现邀请小程序开发者内测小程序「聊天工具」模式。为了保证更良好的性能体验,开发者需基于skyline、使用独立分包开发(代码包体积不超过 500K)并提审,审核通过后,「聊天工具」模式可发布给用户使用;该分包也可被普通模式打开,详见接入指引。开发者适配过程中若发现问题,可进入微信开放社区主页发表标题包含「聊天工具」的问答帖子反馈交流。 小游戏开发者内测接入指引以后续公告为准。 微信团队 2025 年 3 月 11 日
03-11 - 《微信红包封面防掉坑指南》
不收藏好,2023年要用的时候你肯定找不到。 春节不经意间又悄悄溜走了,用不完的红包封面找谁退钱呀? 谁让你不用企业微信的红包皮?免费的 不废话了,下面汇总一下红包封面那些不该掉的坑! 收藏好,以免下一年又手忙脚乱;被同事嫌弃、被老板嫌弃、还被邻居的猫嫌弃… 最痛恨的是被收红包的人嫌弃! :( 一、规则坑 1、第一坑:用不完的红包封面不能退款。 2、第二坑:微信红包封面收费、企业微信红包封面不收费。 3、公众号发放红包封面的坑: 记得选下面两个 发放方式:领取链接 领取方式:一个链接多人领取 温馨提醒:如果在公众号中发放出去没有被领取完,可以在后台回收。 未发完的封面可通过封面兑换卡,兑换成其他样式的封面继续发放。 (这个值得点赞) [图片] 4、制作过程的坑。 因为很多公司都是用素材库,大概率不能通过审核。所以得让美工MM提前准备原创素材! 有预算的也可以请原画师设计一个独一无二的。 5、有效期的坑。 红包封面购买后,只有6个月的有效期。(为什么要跟移动、联通、电信学?不过还好了,不是一个月有效期。) 二、运营坑 众所周知,封面的图形元素是不能搞太多广告。所以设置小程序、公众号或视频号是运营方面 唯一的路。不知道怎么玩,可以先看看官方提供的案例。 https://cover.weixin.qq.com/cgi-bin/mmcover-bin/readtemplate?t=page/index#/case 1、小程序 封面故事 中关联注册主体的小程序。 2、公众号 封面故事 中关联注册主体的公众号。 3、视频号 封面故事 中关联注册主体的视频号。 [图片] 三、其它 1、除了以上,其实红包封面也可以在开发方面搞点事情。详看官方文档: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/redpacketcover/redpacketcover.getAuthenticationUrl.html 2、公众号发微信红包封面功能开通。 开通路径:公众号后台 >新功能>未开通>微信红包封面>去开通。 当然,必须已在微信红包封面开放平台注册好账号了。 最后放一下微信红包封面的登录链接: https://cover.weixin.qq.com/
2022-02-18 - onShow和onHide生命周期会重复触发
具体表现: [图片] 原因及影响: 多次成对回调属于Android系统行为,app层面没法规避,对开发者的逻辑没有太大影响。
2021-03-22 - 微信可回溯技术方案指南
一、方案背景 各相关行业监管层面发布通知规定,要求行业所属业务应用按照规定完成销售的可回溯能力: 1. 证监会【第175号令】《公开募集证券投资基金销售机构监督管理办法》第三十三条 基金销售机构应当建立健全档案管理制度,妥善保管投资人的开户资料和与基金销售业务有关的其他资料。投资人身份资料自业务关系结束当年计起至少保存 20 年,与基金销售业务有关的其他资料自业务发生当年计起至少保存20 年。2. 中国银保监会发布《关于规范互联网保险销售行为可回溯管理的通知》 保险机构通过销售页面管理和销售过程记录等方式,对在自营网络平台上销售保险产品的交易行为进行记录和保存,使其可供查验。可回溯资料应当至少包括销售页面,投保人、被保险人在相关销售页面上的操作轨迹和投保期间保险机构通过在线服务体系向投保人解释说明保险条款的有关信息。互联网保险销售行为可回溯资料保管期限自保险合同终止之日起计算,保险期间在一年以下的不得少于五年,保险期间超过一年的不得少于十年。遇消费者投诉、法律诉讼等纠纷的,应当至少保存至纠纷结束后三年。互联网保险销售行为可回溯资料应当可以还原为可供查验的有效文件,销售页面应当可以还原为可供查验的有效图片或视频 二、方案要求功能 客户端采集 页面访问记录:记录用户访问的每一个页面及其停留时间。用户行为记录:记录用户在全部页面中的所有操作,包括点击、滑动、输入等行为。数据加密传输:确保用户行为数据在构建和传输过程中加密。标签标记:在特定操作或页面打标签,便于后续查询和回溯。隐私保密:对用户支付密码等非业务相关的用户隐私信息进行自动隐藏。服务端存储 高效存储:采用优化的数据格式,保证高性能和低存储需求。数据安全:数据存入自有数据库,符合安全合规要求。数据备份:定期对存储的数据进行多重备份,防止数据丢失。数据恢复:支持对深度备份的数据取回并100%恢复可读。数据检索:提供高效的数据检索功能,支持按时间、标签等条件快速查找回溯数据。管理端能力 回溯管理系统:提供回溯管理系统,支持对回溯数据的查看和管理。灵活查询:按时间、标签、用户等条件灵活查询回溯数据。可视化回放:对上报的回溯记录进行回放,清晰还原用户操作现场。权限控制:对回溯数据的访问权限进行控制,确保只有授权人员可以查看。数据导出:将回溯数据导出为多种格式,便于存档和分析。 三、实现方案对比 [图片] 微信可回溯服务价值点: 性能好、接入快:一行代码对接,用户无感知,性能无影响;多端页面统一回溯,无需额外工作量。安全合规、成本可控:用户数据直接存到自有服务,深度优化存储技术,成本低。全面高效可视化回溯:微信生态中所有页面都支持回溯,并生成流畅的可视化现场还原。 四、微信可回溯方案详述 1. 客户端采集 微信可回溯在控制台配置之后,就能够自动采集基本数据;管理员直接在控制台配置采集规则,线上实时生效。提供专门的SDK,可以上报自定义用户ID、用户属性、自定义事件、标注标签等。小程序 Helper支持针对用户隐私进行自定义遮罩和屏蔽,灵活控制采集区域。隐私文档[图片] 2. 记录上报 微信可回溯不会保存所采集的应用中的用户数据,会将数据传输至开发者指定的存储系统/体验存储空间中。所有记录在上报之前都会进行加密,开发者团队在收到记录后可以选择直接保存,再读取时再解密,也可以自己换密。 开发者团队有条件可以自己建立多重深度备份机制,并自己实现深度备份的取回流程。3. 管理控制 微信可回溯为开发者团队提供全套可嵌入的管理系统,查询操作便捷。开发者团队可以根据自身业务需求自己包装更适合自身的业务管理系统。回溯控制支持API方式,方便开发者团队实现自动化或跨系统的控制机制。[图片] 五、如何接入 可回溯已经开放申请,有意向的行业开发者团队可填写以下资料申请接入:可回溯能力接入申请 可回溯目前仅支持保险或理财等合规类目小程序采购接入,其他类目小程序可以接入相似的“体验分析”可视化日志能力: 体验分析官网:https://dev.weixin.qq.com/products/analytics?utm_source=donut_saas
2024-09-11 - 关于微信安卓端网页字体适配的通知
为了提供给用户更好的阅读体验,微信安卓版 7.0.10 版本起,网页的字体会跟随微信设置里的字体大小更改而变化。 若调整字体变大或变小后,部分未适配网页的排版会出现显示错乱,建议未进行适配的开发者尽快完成对“ 字体大小” 的适配。 查看网页在字体不同大小下展示效果的方法: 方法1:"设置">"通用">“字体大小">进行字体大小修改后查看对应网页显示效果。 方法2:在微信内访问对应网页右上角”…">底部菜单栏选择调整字体">进行字体大小修改后查看对应网页显示效果。 另外,对于现有的显示问题,我们提供以下方案让开发者临时将字体还原标准大小。同时,开发者可以在页面中提示用户在右上角”…”更多菜单中修改字体到合适的大小。 下列方案可以将字体还原标准大小,但我们仍然建议后续做字体适配来提高用户的阅读体验。 『字体还原标准大小』方案: 我们提供了一个 JSAPI 用于设置字体大小,只需将字体大小等级设置为 2 (标准)即可,代码示例如下: document.addEventListener("WeixinJSBridgeReady", function () { WeixinJSBridge.invoke("setFontSizeCallback", { fontSize: '2' }); }, false); 此外,若页面是用 rem 单位进行排版的(目前该做法更容易导致页面不可用),可以反向重置 font-size 的数值达到还原字体标准大小的目的,此方法在效果上也比较理想。代码示例如下: // 以下代码思路来源网络。同时代码放在 body 标签开头位置效果最佳 var $dom = document.createElement('div'); $dom.style = 'font-size: 10px'; document.body.appendChild($dom); // 计算出放大后的字体 var scaledFontSize = parseInt(window.getComputedStyle($dom, null).getPropertyValue('font-size')); document.body.appendChild($dom); // 计算原字体和放大后字体的比例 var scaleFactor = 10 / scaledFontSize; // 取 html 元素的字体大小 var originRootFontSize = parseInt(window.getComputedStyle(document.documentElement, null).getPropertyValue('font-size')); // 由于设置 font-size 后实际会变大,故 font-size 需设置为更小一级 document.documentElement.style.fontSize = originRootFontSize * scaleFactor * scaleFactor + 'px';
2020-01-14 - URL Scheme 和 URL Link 优化公告
为了帮助开发者更好地为用户提供服务,降低开发者使用 URL Scheme 和 URL Link 的成本,自 2023 年 12 月 19 日起,微信团队将对 URL Scheme 和 URL Link 进行如下优化: 1、新增明文 URL Scheme,开发者无需调用接口可自行拼接并且生成明文 Scheme; 2、取消 URL Scheme 和 URL Link 打开端一人一链的限制,支持同一条链接被多名用户访问; 3、新增打开端限制:每个小程序每天 URL Scheme 和 URL Link 总打开次数上限为 300 万次。 一、新增明文 URL Scheme开发者无需调用平台接口,可自行根据如下格式拼接 appid 和 path 等参数,作为 URL Scheme 链接。 weixin://dl/business/?appid=*APPID*&path=*PATH*&query=*QUERY*&env_version=*ENV_VERSION* 其中各参数含义如下: [图片] 注意: 1、为保护开发者,通过明文 URL Scheme 拉起的小程序(页面)必须要提前在「小程序管理后台 -> 设置 -> 隐私与安全 -> 明文 scheme 拉起此小程序」中进行声明; 小程序:配置能够通过明文 scheme 进入的小程序页面[图片] 小游戏:打开开关即可通过明文 scheme 拉起小游戏[图片] 2、通过明文 URL Scheme 打开小程序的场景值为 1286; 3、明文 URL Scheme 不受每天 50 万次的生成量限制; 4、明文 URL Scheme 没有有效期的概念,可长期有效; 5、明文 URL Scheme 没有一人一链的打开限制,支持一条链接同时被多名用户访问。 二、原 URL Scheme 升级为加密 URL Scheme,并支持自行拼接参数目前已对外提供的 URL Scheme 能力平滑升级为加密 URL Scheme,取消一人一链的限制,支持开发者自行在链接后拼接参数*CUSTOM PARAMETER*。 注意:之前通过平台接口生成的 URL Scheme 可继续使用,链接自动可支持多人打开。 URL Scheme格式 weixin://dl/business/?t=*TICKET*&cq=*CUSTOM PARAMETER* 其中参数含义如下: [图片] 注意:加密 URL Scheme 打开小程序的场景值保持不变,仍为 1065。 三、原 URL Link 升级为加密 URL Link,并支持自行拼接参数目前已对外提供的 URL Link 能力平滑升级为加密 URL Link,取消一人一链的限制,支持开发者自行在链接后拼接参数*CUSTOM PARAMETER*。 注意:之前通过平台接口生成的 URL Link 可继续使用,链接自动可支持多人打开。 URL Link格式: https://wxaurl.cn/*TICKET*?cq=*CUSTOM PARAMETER* 其中参数含义如下: [图片] 注意:加密 URL Link 打开小程序的场景值保持不变,微信外打开的场景值为 1194;微信内打开会调整为开放标签打开小程序,场景值为 1167。 四、调用规则调整1、加密 URL Scheme 和 URL Link 取消一人一链,支持一条链接同时被多名用户访问,生效后之前生成的链接被多名用户访问时,不会再报错; 2、每个小程序每天能够生成加密 URL Scheme 和 URL Link 共计 50 万条的限制不变,额外增加每个小程序每天在微信外,能够通过链接打开小程序共计 300 万次的打开量限制,其中链接包括加密 URL Scheme、加密 URL Link 和明文 URL Scheme ;若链接打开小程序的次数超过 300 万次/天,则无法通过链接在微信外拉起小程序; 3、URL Scheme (加密和明文)和 URL Link (加密)仅支持非个人主体小程序使用; 4、注意事项:平台有安全策略防止开发者的链接被黑灰产大量打开,可能导致达到访问上限无法正常通过链接打开小程序的问题; 5、查询方式:开发者可复用现有的查询方式对 URL Scheme 和 URL Link 进行打开额度查询和链接状态查询。 [图片]
2023-12-19 - 关于禁止小程序JavaScript解释器使用规范要求
为进一步提升小程序的安全性和用户体验,目前平台对提审的小程序均需进行安全检测,在检测过程中,发现有小程序采用内置 JavaScript 解释器(如eval5、estime、evil-eval等)的方式,动态执行JS代码、对小程序wxml代码进行热更新。对于使用解释器的小程序,平台将自2022年7月6日开始在代码审核环节进行驳回,请各位开发者于7月6日前完成自查、修复。 具体违规案例 一、动态下发代码执行 某小程序引入JS解释器模块,在预埋场景下触发动态执行代码的逻辑,从而从服务端后台拉取要动态执行的代码或字段,在JS解释器中动态执行代码; [图片] 二、小程序页面文件热更新 下面这个例子为某小程序引入 JS 解释器模块执行小程序热更新; [图片] 三、其他情况 部分数值计算类小程序会引入解释器来执行数学表达式运算功能,对于数值计算,请使用其他方式,不得使用解释器提供的动态eval代码执行能力实现; [图片] 四、修复指引 若小程序在代码提审阶段因存在解释器被要求整改,请根据代码提审反馈,自查相应的文件,在删除相应的解释器文件后重新提交代码审核; 其他常见问题 Q1: 小程序中解释器文件是第三方包依赖引入的,这种如何处理? A1: 平台不允许开发者使用JS解释器来动态执行代码,若小程序代码中存在JS解释器逻辑,请根据小程序审核驳回细节自行移除或联系依赖提供者、服务商移除后再次提交审核; Q2: 经过自查后提交代码仍提示存在解释器,这种如何处理? A2: 请确保提交的小程序代码中不存在解释器文件以及JavaScript 代码解析模块非正常使用,若仍存在问题,请提交客服复查。
2022-06-23 - Android微信内网页音频自动播放能力调整
各位开发者: 微信内网页在不经过用户允许的情况下自动播放音频,会导致用户没有预期、用户体验差等问题。此外,音频自动播放可能会在用户不知情的情况下给用户带来较大的流量消耗。基于此,微信公众平台将对微信内网页自动播放音频能力进行如下调整: 自2020年04月28日起,用户打开微信内网页时将无法自动播放音频。必须在得到用户手动允许(比如触摸屏幕,单击按钮等)的情况下,才能播放音频,开发者可以提前进行适配调试。 具体的适配调试方法如下: 1、下载安装包:http://dldir1.qq.com/weixin/android/wechat_0x27000C70_1620_autoplay.apk 2、扫描二维码安装浏览器内核 [图片] 3、打开网页,点击右上方菜单,第二行最后一项禁止自动播放(注:再点一次可以变回允许自动播放) [图片] 4、退出页面,重新进入即可体验禁止自动播放的效果。 附测试用例:https://docs.qq.com/sheet/DWlduYWxhVEFkRkVa?tab=BB08J2&c=B12A0F0 微信团队 2020年03月30日
2020-03-30 - 关于不再提供“小程序打开App技术服务”的通知
微信小程序为开发者提供了打开App的技术服务,希望通过开发者的合理应用,能为微信用户提供更好的使用体验。平台在鼓励小程序提供优质内容与服务的同时,也十分关注用户在小程序内的流畅体验。 近期,收到大量用户投诉,在小程序使用过程中,正常使用流程被阻断、被引导跳转至app情况,此类情况严重影响了小程序用户体验;并且,相关功能设计容易被用户认为小程序功能支持不完善,实际是开发者滥用接口能力,限制了用户正常使用流程。 违规示例1:下图用户正常观看视频过程中,页面操作后提示跳回app,影响继续观看视频内容。 [图片] 违规示例2:下图用户浏览商品评价过程中,中途被引导打开app,影响继续浏览商品页面。 [图片] 以上行为,违反了《微信小程序平台运营规范》5.15,属于滥用接口能力行为,微信小程序应当合法、合规、正当、善意地使用腾讯提供的各项功能、接口和能力等,使用时应当遵循微信小程序相关的协议规则,保护微信用户和其他第三方的合法权益,并符合腾讯对微信小程序所提倡的各项要求和建议。不得自行或协助他人滥用、不正当使用、非善意使用上述功能、接口、能力等。 为优化用户体验,平台将于2021年5月20日之后不再提供“小程序打开App技术服务”,为避免影响小程序线上服务及用户体验,请开发者及时对小程序进行开发调整,避免回收后影响服务流程。 微信小程序希望能为用户提供完整、流畅的使用体验,希望开发者合理应用各项功能、接口和能力,共同维护良好的用户体验。
06-30 - 小程序帐号登录规范要求与修改指引
为更好地保护用户隐私信息,优化用户体验,平台对小程序内的帐号登录功能进行规范。“帐号登录功能”是指开发者在小程序内提供帐号登录功能,包括但不限于进行的手机号登录,getuserinfo形式登录、邮箱登录等形式。一、登录规范规则,你需要了解:[图片] 一、「体验范围开放」与「体验范围特定」区分与对应整改建议:1、“体验范围开放”定义:①直接打开即可体验 ②有账号限制,但有注册流程是对外开放 整改建议: ①授权个人信息功能后置,给与用户充分了解、体验功能服务后,再由用户主动点击进一步功能触发登录授权 ②授权同时,亦同时支持给与用户取消登录的权利 案例解析: ①范围开放-登录规范违规案例解析 违规点:服务范围开放,首页打开即要求授权登录,用户未体验功能服务强制要求授权登录,登录规范不合规。 [图片] ②范围开放-登录环节无取消/拒绝登录按钮案例解析 违规点:体验范围开放,用户体验功能服务后自主触发登录,提供取消/拒绝登录按钮,但点击取消/拒绝登录按钮无响应,仍强制要求登录,无法取消/拒绝登录。 [图片] 2、体验范围特定 定义: 体验范围提供给特定人员使用、对外无开放注册流程,例如为学校系统、员工系统、社保卡信息系统等提供特定服务的小程序 整改建议: ①首页有明显的使用范围(特定范围)说明 ②首页即要求授权来拉取身份鉴定类,需要为用户提供暂不登录/取消登录选项按钮 案例解析: ①特定范围-登录违规案例解析 违规点:打开首页即要求授权登录,无任何说明,不符合登录规范要求 [图片] 这是一份动态更新的文档,辅助开发者了解登录规范要求,避免开发者因登录规范问题审核失败导致无法按期发布上线,开发者如有其他疑问,可以通过目前开放的咨询渠道反馈: 1、微信开放社区-交流专区-小程序发帖咨询-提出问题-运营相关问题 2、驳回站内信通知-客服咨询入口(MP代码审核客服入口正处于灰度开放中,若未获得灰度测试入口,开发者可前往社区发帖咨询) 我们会根据新出现的问题、相关法律法规更新或产品运营的需要及时对其内容进行修改并更新,制定新的规则,保证微信用户的体验。建议开发者反复查看以便获得最新信息,定期了解更新情况。
2020-12-24 - 关于小程序隐私保护指引设置的公告
为规范开发者的用户个人信息处理行为,保障用户的合法权益,自2023年9月15日起,对于涉及处理用户个人信息的小程序开发者,微信要求,仅当开发者主动向平台同步用户已阅读并同意了小程序的隐私保护指引等信息处理规则后,方可调用微信提供的隐私接口。 开发者首先需确定小程序是否涉及处理用户个人信息,如涉及,则需配置用户隐私授权弹窗,且仅有在平台《小程序用户隐私保护指引》中声明了所处理的用户个人信息,才可以调用平台提供的对应接口或组件。(隐私相关接口) 隐私协议设置整体流程参考下方指引: 一、设置《小程序用户隐私保护指引》 开发者需在「小程序管理后台」设置《小程序用户隐私保护指引》 [图片] [图片] 二、填写《小程序用户隐私保护指引》 [图片] 只有在指引中声明所处理的用户个人信息,才可以调用平台提供的对应接口或组件。若未声明,对应接口或组件将无法调用成功。隐私接口与对应的处理的用户个人信息关系可见:小程序用户隐私保护指引内容介绍 三、配置用户隐私授权弹窗 微信提供了wx.onNeedPrivacyAuthorization(function callback) 接口,意为用户触发了一个微信侧未记录过同意的隐私接口调用,开发者可通过响应该事件选择提示用户的时机。此外,微信还提供了 wx.requirePrivacyAuthorize(Object object) 接口,可用于模拟触发 onNeedPrivacyAuthorization 事件。 小程序开发者可自行设计提示方式与触发时机,详细文档可查看隐私协议开发指南。 仅有在指引中声明所处理的用户个人信息,才可以调用平台提供的对应接口或组件。若未声明,对应接口或组件将直接禁用。 [图片] (参考样例) 四、如要进行代码提审,开发者需先自行声明是否有采集用户隐私,如有,则需在提审页面-「用户隐私保护设置」选择“采集用户隐私” [图片]
2023-09-18 - getAccountInfoSync在审核时的miniProgram.envVersion值是什么?
wx.getAccountInfoSync().miniProgram.envVersion 在审核中返回是什么 因为需要在审核中调用预发布环境接口发版后调用正式版接口所有想知道如何判断处于审核中
2022-02-14 - 关于规范公众号模板消息的公告
公众号的模板消息能力旨在方便开发者为用户提供服务凭证通知。近期平台发现,部分公众号下发的模板消息涉及包括但不限于商品营销、服务推广等内容。且利用颜色/表情符号诱导用户查看、点击。上述行为损害了用户消息接收体验,给用户带来极大困扰,引起大量用户投诉。 违规案例1:消息主要为服务凭证通知内容,但尾部/备注字段下发与服务凭证无关的营销推广内容,并结合自定义颜色、emoji表情符号诱导用户点击。 [图片] 违规案例2:利用正常服务模板下发纯营销推广内容,实际内容与模板服务场景不一致,并结合自定义颜色、emoji表情符号诱导用户点击。 [图片] 为进一步规范模板消息下发行为,给用户提供更优质的消息接收体验。2023年3月30日起,平台将会进一步规范模板消息内容,规则如下: 1、限制部分消息内容展示(运营者可暂不修改,继续使用,发送时会自动过滤相关内容展示。) 1)尾部/备注字段不支持展示; 2)自定义颜色内容展示为默认颜色; 3)emoji表情符号展示为“□”。 [图片] 2、拦截纯营销类消息下发 对于纯为营销推广的模板消息,平台将会进行拦截。 3、加大对发送纯营销类消息帐号的限制力度 平台除了拦截纯营销类消息外,还会对发送该类消息的帐号采取限制添加模板、限制模板跳转等能力封禁措施。 以上规范生效时间如下: 即日起,平台会逐步落实纯营销类消息的拦截措施; 自2023年3月30日开始,去除尾部/备注内容、自定义颜色、表情符号。 模板消息为服务场景下产生的即时服务通知,希望开发者们合理、正确使用模板消息相关接口能力,优化内容展示形态,避免下发营销推广内容,共同维护模板消息良好的消息生态,共同提升用户模板消息相关的服务体验。
2023-09-18 - H5网页跳转小程序
现在小程序越来越普遍了,从H5网页(要在微信浏览器下打开的)跳转到相应小程序的场景也越来越多。至此微信提供了相应的微信开放标签让网页开发者可安全便捷地使用微信或系统的能力,为微信用户提供更优质的网页体验。 需要注意的是,微信开放标签有最低的微信版本和最低的系统版本要求。 微信版本要求为:7.0.12及以上系统版本要求为:iOS 10.3及以上、Android 5.0及以上 对于符合微信或系统最低版本要求但仍无法使用微信开放标签的场景,将会在下方使用步骤中的[代码]wx.config[代码]权限验证成功后触发[代码]WeixinOpenTagsError[代码]事件告知开发者。仅无法使用微信开发标签,JS-SDK其他功能不受影响。可通过如下方法监听并进行回退兼容: document.addEventListener('WeixinOpenTagsError', function (e) { console.error(e.detail.errMsg); // 无法使用开放标签的错误原因,需回退兼容。仅无法使用开放标签,JS-SDK其他功能不受影响 }); 根据目前已知的错误场景,回退兼容建议如下: iOS15底层 WebKit 接口发生变更,微信版本8.0.8以下(不包括8.0.8)无法使用开放标签,可引导用户升级最新版本微信;开放标签依赖Web Components方案,极少部分 Android 系统可能由于版本太低而不支持,可引导用户升级系统固件。H5网页跳转小程序有如下步骤: 1.在微信公众号(已认证的服务号)绑定“JS接口安全域名” 如果是公众号身份的网页,需要绑定安全域名。登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 如果是使用小程序云开发静态网站托管的小程序网页,则不需绑定安全域名即可直接使用(即跳过该"步骤一:绑定JS接口安全域名")。 2.引入JS文件 在需要调用 JS 接口的页面引入如下 JS 文件:http://res.wx.qq.com/open/js/jweixin-1.6.0.js (支持https) 如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https) 备注:支持使用 AMD/CMD 标准模块加载方法加载。 注意:js文件必须使用1.6.0版本以上 3.通过config接口注入权限验证配置并申请所需开放标签 与使用 JS-SDK 配置方式相同,所有需要使用开放标签的页面必须先注入配置信息,并通过[代码]openTagList[代码]字段申请所需要的开放标签,否则将无法使用(同一个 url 仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用。目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。开放标签的申请和 JS 接口的申请相互独立,因此是可以同时申请的。 wx.config({ debug: true, // 开启调试模式,调用的所有 api 的返回值会在客户端 alert 出来,若要查看传入的参数,可以在 pc 端打开,参数信息会通过 log 打出,仅在 pc 端时才会打印 appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名 jsApiList: [], // 必填,需要使用的 JS 接口列表 openTagList: [] // 可选,需要使用的开放标签列表,例如['wx-open-launch-app'] }); 注意:如果使用的是小程序云开发静态网站托管的域名的网页,可以免鉴权直接跳任意合法合规小程序,调用 wx.config 时 appId 需填入非个人主体的已认证小程序,不需计算签名,timestamp、nonceStr、signature 填入非空任意值即可。 4.通过ready接口处理成功验证 wx.ready(function () { // config信息验证后会执行 ready 方法,所有接口调用都必须在 config 接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在 ready 函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在 ready 函数中 }); 5.通过error接口处理失败验证 wx.error(function (res) { // config信息验证失败会执行 error 函数,如签名过期导致验证失败,具体错误信息可以打开 config 的debug模式查看,也可以在返回的 res 参数中查看,对于 SPA 可以在这里更新签名 }); 接口调用说明所有接口通过wx对象(也可使用jWeixin对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数: success:接口调用成功时执行的回调函数。fail:接口调用失败时执行的回调函数。complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。trigger: 监听Menu中的按钮点击时触发的方法,该方法仅支持Menu中的相关接口。备注:不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回。 以上几个函数都带有一个参数,类型为对象,其中除了每个接口本身返回的数据之外,还有一个通用属性errMsg,其值格式如下: 调用成功时:"xxx:ok" ,其中xxx为调用的接口名 用户取消时:"xxx:cancel",其中xxx为调用的接口名 调用失败时:其值为具体错误信息 使用说明 所使用的标签允许提供插槽,由于插槽中模版的样式是和页面隔离的,因此需要注意在插槽中定义模版的样式。插槽模版及样式均需要通过[代码]<script type="text/wxtag-template"></script>或<template></template>[代码]进行包裹。另外,对于具名插槽还需要通过[代码]slot[代码]属性声明插槽名称,下文标签插槽中的 default 插槽为默认插槽,可不声明插槽名称。 对于标签事件,均可通过[代码]event.detail[代码]获得详细信息。如果无特殊说明,下文标签事件说明中的返回值均指代[代码]event.detail[代码]中的内容。 另外,需要注意以下几点: 页面中与布局和定位相关的样式,如[代码]position: fixed; top -100;[代码]等,尽量不要写在插槽模版的节点中,请声明在标签或其父节点上;对于有 CSP 要求的页面,需要添加白名单[代码]frame-src https://*.qq.com webcompt:[代码],才能在页面中正常使用开放标签。(CSP相关内容可查看以下几篇文章:https://zhuanlan.zhihu.com/p/142987601、https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy)开放对象已认证的服务号,服务号绑定“JS接口安全域名”下的网页可使用此标签跳转任意合法合规的小程序。已认证的非个人主体的小程序,使用小程序云开发的静态网站托管绑定的域名下的网页,可以使用此标签跳转任意合法合规的小程序。代码 参考:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/staticstorage/jump-miniprogram.html https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>H5跳转小程序</title> <!-- weui 样式 --> <link rel="stylesheet" href="https://res.wx.qq.com/open/libs/weui/2.4.1/weui.min.css"> <!-- 页面样式 start --> <style> /* --------START reset.css------- */ * { margin: 0; padding: 0; } html, body { background-color: #fff; } a { text-decoration: none; } a, button, input, span, div { -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } li { list-style-type: none; } /* --------END reset.css------- */ .hidden { display: none; } .full { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } .public-web-container, .wechat-web-container, .wechat-web-container wx-open-launch-weapp, .desktop-web-container { display: flex; flex-direction: column; align-items: center; } .public-web-container p, .wechat-web-container p, .desktop-web-container p { position: absolute; top: 40%; } .public-web-container a { position: absolute; bottom: 40%; } .wechat-web-container wx-open-launch-weapp { position: absolute; bottom: 40%; left: 0; right: 0; } .wechat-web-container .open-btn { display: block; margin: 0 auto; padding: 8px 24px; width: 200px; height: 45px; border: none; border-radius: 4px; background-color: #07c160; color: #fff; font-size: 18px; text-align: center; } </style> <!-- 页面样式 end --> </head> <body> <!-- 页面容器 start --> <div id="h5OpenMiniprogram"> <!-- <template> --> <!-- 页面内容 start --> <div class="page full"> <!-- 移动端微信外部浏览器 --> <div id="public-web-container" class="hidden"> <p>正在打开“小程序名字”</p> <a href="javascript:" id="public-web-jump-button" class="weui-btn weui-btn_primary weui-btn_loading" onclick="openWeapp()"> <span id="public-web-jump-button-loading" class="weui-primary-loading weui-primary-loading_transparent"> <i class="weui-primary-loading__dot"></i> </span> 打开小程序 </a> </div> <!-- 微信内部浏览器 --> <div id="wechat-web-container" class="hidden"> <p>点击以下按钮打开“小程序名字”</p> <!-- username:必填,所需跳转的小程序原始id,即小程序对应的以gh_开头的id; path:非必填,所需跳转的小程序内页面路径及参数(默认小程序的初始页面【即首页】) --> <wx-open-launch-weapp id="launch-btn" username="gh_XXX" path="/pages/XXX"> <!-- 第一种: 不适用于Vue.js开发的项目,template标签会冲突 --> <template> <style> .open-btn { display: block; margin: 0 auto; padding: 8px 24px; width: 200px; height: 45px; border: none; border-radius: 4px; background-color: #07c160; color: #fff; font-size: 18px; text-align: center; } </style> <button class="open-btn">打开小程序</button> </template> <!-- 第二种:几乎适用于所有前端框架开发的项目 --> <!-- <script type="text/wxtag-template"> <style> .open-btn { display: block; margin: 0 auto; padding: 8px 24px; width: 200px; height: 45px; border: none; border-radius: 4px; background-color: #07c160; color: #fff; font-size: 18px; text-align: center; } </style> <button class="open-btn">打开小程序</button> </script> --> </wx-open-launch-weapp> </div> <!-- 桌面端 --> <div id="desktop-web-container" class="hidden"> <p>请在手机打开网页链接</p> </div> </div> <!-- 页面内容 end --> <!-- </template> --> </div> <!-- 页面容器 end --> <!-- 引入jQuery --> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script> <!-- 调试用的移动端 console --> <script src="https://cdn.jsdelivr.net/npm/eruda"></script> <script> eruda.init(); </script> <!-- 公众号 JSSDK --> <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> <!-- 云开发 Web SDK --> <script src="https://res.wx.qq.com/open/js/cloudbase/1.1.0/cloud.js"></script> <script> function docReady(fn) { document.addEventListener('WeixinOpenTagsError', function (e) { console.error(e.detail.errMsg); // 无法使用开放标签的错误原因,需回退兼容。仅无法使用开放标签,JS-SDK其他功能不受影响 }); if (document.readyState === "complete" || document.readyState === "interactive") { fn(); } else { document.addEventListener("DOMContentLoaded", fn); } } docReady(async function () { var ua = navigator.userAgent.toLowerCase(); var isWXWork = ua.match(/wxwork/i) == "wxwork"; var isWeixin = !isWXWork && ua.match(/micromessenger/i) == "micromessenger"; console.log("isWeixin", isWeixin, isWXWork); var isMobile = false; var isDesktop = false; if (navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|IEMobile)/i)) { isMobile = true; } else { isDesktop = true; } if (isWeixin) { var containerEl = document.getElementById("wechat-web-container"); containerEl.classList.remove("hidden"); containerEl.classList.add("full", "wechat-web-container"); // 公众号网页需要绑定安全域名 // 获取签名,timestamp、nonceStr、signature $.ajax({ url: "请求地址", dataType: "json", success: function (res) { console.log("WeChatConfig", res); if (res.id === 1) { var data = res.items; // 根据实际情况返还的数据进行赋值 wx.config({ // debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印 appId: data.appId, // 必填,公众号的唯一标识 timestamp: data.timestamp, // 必填,生成签名的时间戳 nonceStr: data.nonceStr, // 必填,生成签名的随机串 signature: data.signature, // 必填,签名 jsApiList: ["chooseImage"], // 必填,需要使用的JS接口列表(此处随意一个接口即可) openTagList: ["wx-open-launch-weapp"], // 可选,需要使用的开放标签列表,例如['wx-open-launch-app'] }); /** * config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后。 * config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。 * 对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中 * */ wx.ready(function (res2) { console.log("ready", res2); var launchBtn = document.getElementById("launch-btn"); launchBtn.addEventListener("ready", function (e) { console.log("开放标签 ready"); }); launchBtn.addEventListener("launch", function (e) { console.log("开放标签 success"); }); launchBtn.addEventListener("error", function (e) { console.log("开放标签 fail", e.detail); }); }); // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名 wx.error(function (err) { console.log("error", err); }); } } }) // 小程序云开发静态网站托管的网页 // var launchBtn = document.getElementById("launch-btn"); // launchBtn.addEventListener("ready", function (e) { // console.log("开放标签 ready"); // }); // launchBtn.addEventListener("launch", function (e) { // console.log("开放标签 success"); // }); // launchBtn.addEventListener("error", function (e) { // console.log("开放标签 fail", e.detail); // }); // wx.config({ // // debug: true, // 调试时可开启 // appId: "", // 非个人主体的已认证的小程序APPID // timestamp: 0, // 必填,填任意数字即可 // nonceStr: "nonceStr", // 必填,填任意非空字符串即可 // signature: "signature", // 必填,填任意非空字符串即可 // jsApiList: ["chooseImage"], // 必填,随意一个接口即可 // openTagList: ["wx-open-launch-weapp"], // 填入打开小程序的开放标签名 // }); } else if (isDesktop) { // 在 pc 上则给提示引导到手机端打开 var containerEl = document.getElementById("desktop-web-container"); containerEl.classList.remove("hidden"); containerEl.classList.add("full", "desktop-web-container"); } else { var containerEl = document.getElementById("public-web-container"); containerEl.classList.remove("hidden"); containerEl.classList.add("full", "public-web-container"); // 云函数 // 因未开通云开发环境,此处不做处理 // var c = new cloud.Cloud({ // identityless: true, // 必填,表示是未登录模式 // resourceAppid: "小程序 AppID", // 资源方 AppID // resourceEnv: '云开发环境 ID', // 资源方环境 ID // }); // await c.init(); // window.c = c; // var buttonEl = document.getElementById("public-web-jump-button"); // var buttonLoadingEl = document.getElementById("public-web-jump-button-loading"); // try { // await openWeapp(() => { // buttonEl.classList.remove("weui-btn_loadin"); // buttonLoadingEl.classList.add("hidden"); // }) // } catch (error) { // buttonEl.classList.remove("weui-btn_loadin"); // buttonLoadingEl.classList.add("hidden"); // throw error; // } } }); async function openWeapp(onBeforeJump) { console.log("未开通云开发环境", onBeforeJump); // 因未开通云开发环境,此处不做处理 // var c = window.c; // const res = await c.callFunction({ // name: "public", // data: { // action: "getUrlScheme", // }, // }); // console.warn(res); // if (onBeforeJump) { // onBeforeJump(); // } // location.href = res.result.openlink; } </script> </body> </html> 错误提示 (1)没有在“JS接口安全域名”设置 [图片] 成功提示 (1)微信开发者工具 [图片] (2)真机:会有要打开小程序的名字 [图片]
2024-03-06 - 小程序用户头像昵称获取规则调整公告
更新时间:2022年11月9日由于 PC/macOS 平台「头像昵称填写能力」存在兼容性问题,对于来自低于2.27.1版本的访问,小程序通过 wx.getUserProfile 接口将正常返回用户头像昵称,插件通过 wx.getUserInfo 接口将正常返回用户头像昵称。 更新时间:2022年9月28日考虑到近期开发者对小程序用户头像昵称获取规则调整的相关反馈,平台将接口回收的截止时间由2022年10月25日延期至2022年11月8日24时。 调整背景在小程序内,开发者可以通过 wx.login 接口直接获取用户的 openId 与 unionId 信息,实现微信身份登录,支持开发者在多个小程序或其它应用间匿名关联同一用户。 同时,为了满足部分小程序业务中需要创建用户的昵称与头像的诉求,平台提供了 wx.getUserProfile 接口,支持在用户授权的前提下,快速使用自己的微信昵称头像。 但实践中发现有部分小程序,在用户刚打开小程序时就要求收集用户的微信昵称头像,或者在支付前等不合理路径上要求授权。如果用户拒绝授权,则无法使用小程序或相关功能。在已经获取用户的 openId 与 unionId 信息情况下,用户的微信昵称与头像并不是用户使用小程序的必要条件。为减少此类不合理的强迫授权情况,作出如下调整。 调整说明自 2022 年 10 月 25 日 24 时后(以下统称 “生效期” ),用户头像昵称获取规则将进行如下调整: 自生效期起,小程序 wx.getUserProfile 接口将被收回:生效期后发布的小程序新版本,通过 wx.getUserProfile 接口获取用户头像将统一返回默认灰色头像,昵称将统一返回 “微信用户”。生效期前发布的小程序版本不受影响,但如果要进行版本更新则需要进行适配。自生效期起,插件通过 wx.getUserInfo 接口获取用户昵称头像将被收回:生效期后发布的插件新版本,通过 wx.getUserInfo 接口获取用户头像将统一返回默认灰色头像,昵称将统一返回 “微信用户”。生效期前发布的插件版本不受影响,但如果要进行版本更新则需要进行适配。通过 wx.login 与 wx.getUserInfo 接口获取 openId、unionId 能力不受影响。「头像昵称填写能力」支持获取用户头像昵称:如业务需获取用户头像昵称,可以使用「头像昵称填写能力」(基础库 2.21.2 版本开始支持,覆盖iOS与安卓微信 8.0.16 以上版本),具体实践可见下方《最佳实践》。小程序 wx.getUserProfile 与插件 wx.getUserInfo 接口兼容基础库 2.27.1 以下版本的头像昵称获取需求:对于来自低版本的基础库与微信客户端的访问,小程序通过 wx.getUserProfile 接口将正常返回用户头像昵称,插件通过 wx.getUserInfo 接口将正常返回用户头像昵称,开发者可继续使用以上能力做向下兼容。对于上述 3,wx.getUserProfile 接口、wx.getUserInfo 接口、头像昵称填写能力的基础库版本支持能力详细对比见下表: [图片] *针对低版本基础库,兼容处理可参考 兼容文档 请已使用 wx.getUserProfile 接口的小程序开发者和已使用 wx.getUserInfo 接口的插件开发者尽快适配。小游戏不受本次调整影响。 最佳实践小程序可在个人中心或设置等页面使用头像昵称填写能力让用户完善个人资料: [图片] 微信团队 2022年5月9日
2023-09-26 - 公众号JS接口安全域名额度调整
为满足公众号的业务需求,方便开发者更灵活地使用和管理相关功能,2020年8月4日起,平台将公众号的JS接口安全域名额度由3个提升为5个,一个自然月内最多可修改次数由3次提升为5次。公众号开发者可在配置的域名下调用微信开放的JS接口。 功能入口:MP后台-设置-公众号设置-功能设置-JS接口安全域名。 [图片]
2020-08-04 - 地理位置接口新增与相关流程调整
一、地理位置接口新增说明 由于精确地理位置接口只允许部分类目的小程序申请使用,为了满足开发者在更多场景使用地理位置接口,自 2022 年 7 月 14 日起,新增获取模糊地理位置接口(wx.getFuzzyLocation)。同时为保障用户合法权益,该接口调用前需进行准入开通申请,该接口准入规则与 wx.chooseLocation 一致。 wx.getFuzzyLocation 接口说明: 1、该接口返回的是经过模糊处理的经纬度坐标; 2、该接口支持返回 wgs84 或 gcj02 两种类型的坐标; 3、该接口需要用户授权 scope.userFuzzyLocation。 二、app.json 的配置指引 为了开发者能够正常使用获取模糊地理位置等接口,以及后续对于代码提审环节的优化(见「三、地理位置接口使用流程」),自 2022 年 7 月 14 日起,开发者在使用地理位置相关接口时(共计 8 个,见表1),需要提前在 app.json 中进行配置。 1、需配置的接口列表 [图片] 表1 2、配置规则 1)在代码中使用的地理位置相关接口(共计 8 个,见表1),开发者均需要在 app.json 中 requiredPrivateInfos 配置项中声明,代码格式如下: [图片] 2)表1中模糊位置信息(序号1)和精确位置信息(序号2-5)是互斥的,即声明了模糊位置信息就无法声明精确位置信息。若同时声明模糊位置信息和精确位置信息,则在编译代码时出现错误; 3)注意:自 2022 年 7 月 14 日后发布的小程序,如果未在 app.json 中声明表1中的相关接口,则小程序调用这些接口(表1)时会出现错误,在 2022 年 7 月 14 日之前发布的小程序不受影响; 4)对于第三方开发者,需要在上传代码时通过参数在 ext.json 中声明其需调用的地理位置相关接口,配置规则和普通小程序的配置规则相同。 三、地理位置接口使用流程 自 2022 年 7 月 14 日起,开发者如需在最新版本发布后使用地理位置相关接口,除需完成接口权限开通外,还需在 app.json(或ext.json)配置环节,具体如下: 1、接口权限开通 以下 8 个接口需完成准入开通流程:wx.getFuzzylocation、wx.getLocation、wx.onLocationChange、wx.chooseAddress、wx.choosePoi、wx.chooseLocation、wx.startLocationUpdate、wx.startLocationUpdateBackground 1)普通开发者:需要在 “小程序管理后台 -「开发」-「开发管理」-「接口设置」” 中完成权限申请; 2)第三方开发者:可通过 apply_privacy_interface 接口完成权限申请。 2、app.json(或 ext.json)配置 1)普通开发者:需在 app.json 中声明其需调用的地理位置相关接口,具体配置流程见「二、app.json 的配置指引」; 2)第三方开发者:需要在上传代码时通过参数在 ext.json 中声明其需调用的地理位置相关接口(配置方式:可通过 commit 接口配置)。 同时,为了提升开发者体验,平台在代码提审环节会协助开发者对地理位置接口进行检测,如检测出代码中包含未完成准入开通的地理位置接口,平台将再次提醒开发者确认是否需使用相关接口。 1)普通开发者:若无需使用,开发者可在提审时确认不使用该接口,即可正常进行代码提审。小程序审核通过且新版本发布完成后,平台将对小程序确认不使用的接口关闭使用权限; 2)第三方开发者:若无需使用,可在提审时通过参数声明不使用该接口(声明方式:可通过 submit_audit 接口配置),即可正常进行代码提审,审核通过后发布上线,将对其声明不使用的接口关闭使用权限。 以上调整将仅对所有小程序生效。 微信团队 2022年6月1日
2023-09-26 - 选择地理位置接口调整公告
各位开发者: 为确保选择地理位置接口的合理使用,自 2022 年 6 月 13 日起,wx.choosePoi 和 wx.chooseLocation 接口规则进行以下调整: wx.choosePoi 和 wx.chooseLocation 接口的使用将不再需要用户授权 scope.userLocation,满足使用条件的开发者可直接调用,详情可访问 授权;若开发者调用 wx.choosePoi 和 wx.chooseLocation 接口,需在小程序用户隐私保护指引中,声明收集用户选择的位置信息的目的,详情可访问 用户隐私保护指引填写说明;wx.choosePoi 接口的回调信息中,latitude 和 longitude 字段将不返回真实的经纬度信息,全部返回 ( 0 , 0 ),详情可访问 接口文档。 以上调整将对所有小程序、小游戏和插件生效。 微信团队 2022年5月13日
2022-05-13