- 部分Android7.0用户 websocket 线上版本无法连接问题
部分Android7.0用户 websocket 线上版本无法连接问题,仅真机连接测试时可用,请问官方这个问题什么时候能够解决?
2019-01-21 - 微信Android7.0.4版本,小程序建立websocket连接一直超时
微信Android7.0.4版本,小程序建立websocket连接一直超时,微信Android7.0.3版本可以建立连接,iOS各版本均可建立连接。 如下图微信Android7.0.4建立websocket连接超时,报connect response time out [图片] 如下图微信Android7.0.3可建立websocket连接 [图片]
2019-05-30 - 微信支付实名信息小程序授权接口能力【监管原因,暂停开放】
备注说明:接口因为监管原因,2019年11月10日起停止开放。 一、能力背景 互联网+国家战略发布以来,各行业紧锣密鼓推进改革。其中,众多政府民生服务,例如社保查询、公积金查询提取、医疗机构挂号、公用事业缴费等均需要用户提供实名信息。此外,手机卡实名办理、火车客运实名购票、酒店实名入住等行业实名制都在推行。 基于此,为了让用户有更好的体验,让各行业的互联网+服务更顺畅,基于微信支付实名用户基础,提供微信支付实名支付账户信息授权接口。即经过用户的授权,小程序的服务提供者可以获得用户在微信支付认证的姓名以及身份证信息。 二、接入必读 名称: getRealnameAuthInfo 功能: 经过用户授权,可获得用户在微信支付认证的姓名以及身份证信息(非身份证的其他证件信息暂不提供授权) 验证方式: 因为需要用户主动触发才能发起获取实名信息接口,所以该功能不由 API 来调用,需用 <button> 组件的点击来触发。且需要用户输入微信支付密码验证后,方可算授权。 兼容的微信版本: iOS6.5.22及Android6.5.22 及以上版本 调用必备条件: (1)小程序appid获得内测邀请后提交资质经平台审核通过; (2)小程序开通了微信支付账号; (3)向微信支付工作人员申请证书 开放范围: 现为内测邀请阶段,白名单开通。务必需按下述内容,及第三节指引,申请开通权限后再按照接口文档开发,否则无效。 开放说明: 针对小程序的业务方,小程序的主体以及类目,需要在限定的类目范围内。开展的业务也需要是国家相关法规、政策规定的需要“实名办理”的相关业务。 现阶段微信支付实名信息授权接口能力开通的主体类目限定包含: 政务:政府机构或事业单位 医疗:公立医疗机构 教育:公立教育机构 轨道交通:铁路官方,地铁官方 三、接口申请 满足第二节中描述的开放类目的小程序,可申请微信支付实名授权接口。请按照如下描述,进行接口申请。 必须完成以下两步的描述才算申请成功: 第一步. 邮件申请,开通小程序后台接口能力入口: 申请邮件请发送至腾讯工作邮箱wx_city@tencent.com。腾讯工作人员会邮件回复资料是否准确无误,并说明是否已开通小程序后台入口。 可通过通过以下路径查看是否已开通入口:通过mp.weixin.qq.com登录小程序,在设置->接口设置中,查看是否有“实名授权”的能力卡片。 邮件申请入口的资料内容如下: 微信支付实名信息授权接口内测申请表 [图片] 第二步. 线上入口申请权限: 接收到已开通线上入口的邮件回复后。可登录小程序后台,(登录mp.weixin.qq.com的小程序账号,在设置-接口能力中)完成接口权限的申请。 包括:使用类目的配置、填写相关的申请信息等。然后等待线上审核通过。 完成以上两步工作,且线上审核通过后,即可按照后续的接口文档进行开发调用。 备注:此接口一直处于内测邀请阶段。但由于近期申请流程和方式,需要根据合规监管及用户敏感隐私信息加强审核的要求,进行修改调整。因此申请流程修改调整期间,此接口暂不接受新的小程序申请;已经在使用此接口的小程序,暂不受影响。(建议正在使用的小程序,限于自身业务使用,并加强用户隐私信息保护); 正在申请中的小程序,近期请留意wx_city@tencent.com官方邮件的回复,以进一步增加说明材料。 四、接口文档 4.1使用方法及参数 使用方法为: 需要将 <button> 组件 open-type 的值设置为 getRealnameAuthInfo,当用户点击并同意之后,可以通过 bindgetRealnameAuthInfo事件回调获取到微信服务器返回的auth_token,再用auth_token调用API来获取用户加密过后的实名信息 示例: <button open-type=“getRealnameAuthInfo” bindgetRealnameAuthInfo=“authinfo” category-id="{{[99, 904]}}">实名授权</button> 调用参数为: [图片] 错误码说明: errCode:40003 errMsg:category id not exist 错误说明:添加的类目ID有误(需检查类目ID是否准确。仅需使用一级和二级类目ID即可) 4.2获取小程序类目 本节主要描述如何获取授权小程序账号的可选类目。 (1)请求方式: get(请使用https协议) https://api.weixin.qq.com/wxa/get_category?access_token=TOKEN (2)参数说明 access_token (3)返回说明(正常时返回的json示例): { “errcode”:0, “errmsg”: “ok”, “category_list” : [ { “first_class”:“工具”, “second_class”:“备忘录”, “first_id”:1, “second_id”:2, } { “first_class”:“教育”, “second_class”:“学历教育”, “third_class”:“高等” “first_id”:3, “second_id”:4, “third_id”:5, } ] } (4)返回参数说明: 参数 说明 category_list 可填选的类目列表 first_class 一级类目名称 second_class 二级类目名称 third_class 三级类目名称 first_id 一级类目的ID编号 second_id 二级类目的ID编号 third_id 三级类目的ID编号 (5)错误码说明: 返回码 说明 -1 系统繁忙 4.3获取实名信息 说明 根据小程序返回的auth_token获取用户加密过后的实名消息 使用方法 通过https POST请求,数据为json格式 请求url https://api.weixin.qq.com/cgi-bin/wxopen/getrealnameinfo?access_token={access_token} access_token说明 详见公众号开发文档, api使用的appid必须和小程序的appid保持一致 请求参数 [图片] 返回参数 [图片] 示例: #!/bin/bash TOKEN=‘xxxxxxxxxxxx’ URL=‘https://api.weixin.qq.com/cgi-bin/wxopen/getrealnameinfo’ JSON=’{ “auth_token”: “xxx”, “mch_id”: “xxx”, “cert_serialno”: “xxx”, “timestamp”: 1234444, “sign”: “xxx” }’ curl “${URL}?access_token=${TOKEN}” -d ${JSON} 返回码 返回码说明: [图片] 4.4数据加密文档说明 说明 由于实名信息属于敏感数据,不能以明文数据传输,所以开发者需要用私钥对请求进行签名(sha256后base64编码). 微信支付会对用户的姓名和身份证信息用开发者的公钥加密 ,开发者可以使用私钥解密出明文. 加密的padding算法为RSA_PKCS1_PADDING 商户号、证书序列号和私钥文件的获取详见第五部分微信支付证书指引 签名原串 cert_serialno={cert_serialno}×tamp={timestamp} 签名示例 #!/bin/bash cert_serialno='1234567890’ timestamp=[代码]date +%s[代码] private_key_file=“1900006511_rsa_private_key.pem” ori_content="cert_serialno=${cert_serialno}×tamp=${timestamp}" echo $ori_content sign=[代码]echo -n $ori_content | openssl dgst -sha256 -binary -sign $private_key_file | base64 -w 0[代码] echo “sign: $sign” 解密示例 #!/bin/sh encryted_real_name="BtqSM3KOyt+mDhJhyLCS9vsEoo3gTBupZHwS3i8daCyrUGxlEv+k7cE6U+9eiTo2DPNMouZnPSqv5vRERvwvm//JwkKdrV/xvSB4Ak7mJB+/t4Y4lV6gfeyggzN4xtdWoJfkgm0wa4V7oZGrpnexdwYuwyJYTMoz+87qJRwUfWAgF7U7trJ+b5DvCk9Y6KwT0N4j6PtDAk23k0zg06rTANzU3Mq1IWF7LVBcvSvR9nkNAPzcv06LQ70kxqQqVj5z+H+ERuILwBjuIQozCh6pO37Q3slz8UNnl7r48vw7uZe6be1fSDyf0hYE43n2DMpljnATQOMeJxp7nBrsvwDdPQ==" private_key_file=“1900006511_rsa_private_key.pem” echo -n $encryted_real_name | base64 -d | openssl rsautl -decrypt -ssl -inkey $private_key_file | iconv -f gbk -t utf-8 4.5微信支付商户申请指引 敏感数据需要使用权威CA颁发的API证书来加密。 如果已经获取到了权威CA颁发的API证书,可直接使用。 未获取到的话, 可按下面的方法操作: 证书申请或升级: 登录商户平台申请或者升级到权威CA颁发的证书。 申请指引 升级指引 查看证书序列号: 登录微信支付商户平台:pay.weixin.qq.com,进入【账户中心】->【账户设置】->【API安全】,点击“查看证书”文字按钮。 [图片] 点击查看证书,即可看到证书序列号。 [图片] 五、案例展示 案例:粤省事小程序,实名信息登录。 粤省事小程序是广东省政务一站式服务小程序,为了给用户便捷的体验,使用了微信支付实名授权功能。一方面校验使用者的身份,一方面便捷的获取用户信息,以便为用户提供个性化的政务服务。 具体实现的效果截图如下: [图片]
2022-11-22 - 「笔记」订阅消息体验踩坑
前言 10月12日夜晚社区发了公告小程序模板消息能力调整通知,正式发布了 一次性订阅消息 这一能力,所以第一时间进行了体验。 本文主要是补充一下官方未提供的使用方法,和使用中与模板消息用法的不同。 文档地址 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html 使用方法 [代码]wx.requestSubscribeMessage({ tmplIds: ["模板id1","模板id2"], success: function (res) { //成功 }, fail(err) { //失败 console.error(err); } }) [代码] 第一个坑 如果不勾选红色方框内的内容,用户每次触发订阅消息功能都会弹出授权窗口,如果用户勾选了则不会出现弹窗。 [图片] 第二个坑 目前开发者工具(v1.02.191012)不支持调试,只能通过真机调试。 [图片] 第三个坑 微信不会为开发者保存订阅次数,需要自己在后台记录用户触发的次数。 超过次数调用接口下发订阅消息会返回失败。 [图片] 第四个坑 发送模板格式和原来的模板消息格式不一致,特别是data内的内容,订阅消息的字段key是和数据类型有关,value的参数需要严格按照设置的类型提交,具体使用参考后台的模板详情。 模板消息的格式: [代码]"data": { "keyword1": { "value": "内容", "color": "#000" }, "keyword2": { "value": "内容", "color": "#000" } } [代码] 订阅消息的格式: [代码]"data": { "thing1": { "value": "内容" }, "number2": { "value": 20 } [代码] 第五个坑 订阅消息申请模板的时候,需要选择所属类目,而且只能是自己小程序相关类目,模板消息是不需要选择对应类目的。 如果删除小程序类目,则会把订阅消息模板一起删除,需谨慎操作。 [图片] 第六个坑 长期订阅消息只针对特定行业开放,所以普通开发者并无法使用。 结束 暂时就先总结这些,有其它坑再补充。
2019-10-13 - 2019-08-26
- 微信开发者工具 1.02.1905081 更新说明
下载地址https://developers.weixin.qq.com/miniprogram/dev/devtools/rc.html 增强编译新版工具增加了[代码]增强编译[代码]的选项来增强[代码]ES6转ES5[代码]的能力,启用后会使用新的编译逻辑以及提供额外的选项供开发者使用。 启用[代码]增强编译[代码]后的编译能力的对比: 特性原有逻辑增强编译Babel版本babel6babel7Presetses2015、stage0env {chrome:53, ios:8}Helpers单文件内联跨文件共享Async/Await不支持支持严格模式开关不支持支持忽略文件目录不支持支持代码压缩uglify-jsterserBabel插件-一系列proposal[代码]*[代码]polyfill大部分es6新增三个polyfill[代码]*[代码]使用[代码]preset-env[代码],支持最新的[代码]ECMAScript[代码]语法 共享helpers函数,默认放在项目[代码]@babel/runtime[代码]目录,可通过[代码]项目配置文件[代码]配置 支持async/await语法,按需注入[代码]regeneratorRuntime[代码],目录位置与helpers函数一致 文件首行是[代码]// use strict disable;[代码]时,即可禁用文件严格模式 可通过[代码]项目配置文件[代码]指定任意文件、目录不经过编译(如:miniprogram_npm) 原有逻辑是支持[代码]stage0[代码]语法的,为了向前兼容,引入了一系列proposal插件 关于polyfill,基础库中已经引入了大量的[代码]es6[代码]相关的polyfill 可参考文档,增强编译下,新增:Array.prototype.includes[代码](es7)[代码]、Object.entries[代码](es8)[代码]、Object.values[代码](es8)[代码] 开启增强编译项目详情页中,勾选[代码]增强编译[代码]选项 [图片] 打开后,即可在项目中使用最新的js语法 [图片] 工具运行时,会按需注入一些辅助函数和regeneratorRuntime, 注入的目录路径可通过配置修改,上传代码时(包括预览时)这些文件会作为代码包的一部分 [图片] 其他选项其他可选项详情请参考项目配置文档 任务通知中心任务完成后的消息通知会自动进入通知中心,通知中心入口在右下角的任务状态栏 [图片] 任务状态栏也进行了优化,以图标形式显示正在进行中的任务、失败任务数、及通知中心入口。 [图片] 控制台命令 cleanAppCache在新版中,我们升级了 nw 内核,如果回退到旧版本,会在启动旧版本时出现提示 nw 版本不匹配的弹框,如需回退且避免这种情况,可在回退前在小程序调试器输入命令 cleanAppCache,然后再安装旧版本。 上传时版本号推荐上传的对话框现在会显示版本号推荐 [图片] 控制台显示当前页面是否被索引[图片] 代码保护现在默认打开开启代码保护之后可以增加编译后的代码包的破解难度,在详情页中可以设置是否开启。 设置中增加通用设置[图片] Network 面板显示图片渲染层的图片请求现在也会展示在 Network 面板。 [图片] Nightly 快速更新机制Nightly 版本是包含我们最新能力和 bugfix 的版本。现在 Nightly 版本支持快速更新和快速回退。安装了 Nightly 版本开发者工具后,如果再进行了升级,此时可以在菜单的检查更新下会有快速回退的选项,可以快速回退到上一个版本。
2019-05-08 - 2019-03-26
- 你不知道的Virtual DOM(二):Virtual DOM 的更新
一、前言 目前最流行的两大前端框架,React 和 Vue,都不约而同的借助 Virtual DOM 技术提高页面的渲染效率。那么,什么是 Virtual DOM ?它是通过什么方式去提升页面渲染效率的呢?本系列文章会详细讲解 Virtual DOM 的创建过程,并实现一个简单的 Diff 算法来更新页面。本文的内容脱离于任何的前端框架,只讲最纯粹的 Virtual DOM 。敲单词太累了,下文 Virtual DOM 一律用 VD 表示。 这是 VD 系列文章的第二篇,以下是本系列其它文章的传送门: 你不知道的Virtual DOM(一):Virtual Dom介绍 本文将会实现一个简单的 VD Diff 算法,计算出差异并反映到真实的 DOM 上去。 二、思路 使用 VD 的框架,一般的设计思路都是页面等于页面状态的映射,即UI = render(state)。当需要更新页面的时候,无需关心 DOM 具体的变换方式,只需要改变state即可,剩下的事情(render)将由框架代劳。我们考虑最简单的情况,当 state 发生变化时,我们重新生成整个 VD ,触发比较的操作。上述过程分为以下四步: - state 变化,生成新的 VD - 比较 VD 与之前 VD 的异同 - 生成差异对象(patch) - 遍历差异对象并更新 DOM 差异对象的数据结构是下面这个样子,与每一个 VDOM 元素一一对应: [代码]{ type, vdom, props: [{ type, key, value }] children } [代码] 最外层的 type 对应的是 DOM 元素的变化类型,有 4 种:新建、删除、替换和更新。props 变化的 type 只有2种:更新和删除。枚举值如下: [代码]const nodePatchTypes = { CREATE: 'create node', REMOVE: 'remove node', REPLACE: 'replace node', UPDATE: 'update node' } const propPatchTypes = { REMOVE: 'remove prop', UPDATE: 'update prop' } [代码] 三、代码实现 我们做一个定时器,500 毫秒运行一次,每次对 state 加 1。页面的li元素的数量随着 state 而变。 [代码]let state = { num: 5 }; let timer; let preVDom; function render(element) { // 初始化的 VD const vdom = view(); preVDom = vdom; const dom = createElement(vdom); element.appendChild(dom); timer = setInterval(() => { state.num += 1; tick(element); }, 500); } function tick(element) { if (state.num > 20) { clearTimeout(timer); return; } const newVDom = view(); } function view() { return ( <div> Hello World <ul> { // 生成元素为0到n-1的数组 [...Array(state.num).keys()] .map( i => ( <li id={i} class={`li-${i}`}> 第{i * state.num} </li> )) } </ul> </div> ); } [代码] 接下来,通过对比 2 个 VD,生成差异对象。 [代码]function tick(element) { if (state.num > 20) { clearTimeout(timer); return; } const newVDom = view(); // 生成差异对象 const patchObj = diff(preVDom, newVDom); } function diff(oldVDom, newVDom) { // 新建 node if (oldVDom == undefined) { return { type: nodePatchTypes.CREATE, vdom: newVDom } } // 删除 node if (newVDom == undefined) { return { type: nodePatchTypes.REMOVE } } // 替换 node if ( typeof oldVDom !== typeof newVDom || ((typeof oldVDom === 'string' || typeof oldVDom === 'number') && oldVDom !== newVDom) || oldVDom.tag !== newVDom.tag ) { return { type: nodePatchTypes.REPLACE, vdom: newVDom } } // 更新 node if (oldVDom.tag) { // 比较 props 的变化 const propsDiff = diffProps(oldVDom, newVDom); // 比较 children 的变化 const childrenDiff = diffChildren(oldVDom, newVDom); // 如果 props 或者 children 有变化,才需要更新 if (propsDiff.length > 0 || childrenDiff.some( patchObj => (patchObj !== undefined) )) { return { type: nodePatchTypes.UPDATE, props: propsDiff, children: childrenDiff } } } } // 比较 props 的变化 function diffProps(oldVDom, newVDom) { const patches = []; const allProps = {...oldVDom.props, ...newVDom.props}; // 获取新旧所有属性名后,再逐一判断新旧属性值 Object.keys(allProps).forEach((key) => { const oldValue = oldVDom.props[key]; const newValue = newVDom.props[key]; // 删除属性 if (newValue == undefined) { patches.push({ type: propPatchTypes.REMOVE, key }); } // 更新属性 else if (oldValue == undefined || oldValue !== newValue) { patches.push({ type: propPatchTypes.UPDATE, key, value: newValue }); } } ) return patches; } // 比较 children 的变化 function diffChildren(oldVDom, newVDom) { const patches = []; // 获取子元素最大长度 const childLength = Math.max(oldVDom.children.length, newVDom.children.length); // 遍历并diff子元素 for (let i = 0; i < childLength; i++) { patches.push(diff(oldVDom.children[i], newVDom.children[i])); } return patches; } [代码] 计算得出的差异对象是这个样子的: [代码]{ type: "update node", props: [], children: [ null, { type: "update node", props: [], children: [ null, { type: "update node", props: [], children: [ null, { type: "replace node", vdom: 6 } ] } ] }, { type: "create node", vdom: { tag: "li", props: { id: 5, class: "li-5" }, children: ["第", 30] } } ] } [代码] 下一步就是遍历差异对象并更新 DOM 了: [代码]function tick(element) { if (state.num > 20) { clearTimeout(timer); return; } const newVDom = view(); // 生成差异对象 const patchObj = diff(preVDom, newVDom); preVDom = newVDom; // 给 DOM 打个补丁 patch(element, patchObj); } // 给 DOM 打个补丁 function patch(parent, patchObj, index=0) { if (!patchObj) { return; } // 新建元素 if (patchObj.type === nodePatchTypes.CREATE) { return parent.appendChild(createElement(patchObj.vdom)); } const element = parent.childNodes[index]; // 删除元素 if (patchObj.type === nodePatchTypes.REMOVE) { return parent.removeChild(element); } // 替换元素 if (patchObj.type === nodePatchTypes.REPLACE) { return parent.replaceChild(createElement(patchObj.vdom), element); } // 更新元素 if (patchObj.type === nodePatchTypes.UPDATE) { const {props, children} = patchObj; // 更新属性 patchProps(element, props); // 更新子元素 children.forEach( (patchObj, i) => { // 更新子元素时,需要将子元素的序号传入 patch(element, patchObj, i) }); } } // 更新属性 function patchProps(element, props) { if (!props) { return; } props.forEach( patchObj => { // 删除属性 if (patchObj.type === propPatchTypes.REMOVE) { element.removeAttribute(patchObj.key); } // 更新或新建属性 else if (patchObj.type === propPatchTypes.UPDATE) { element.setAttribute(patchObj.key, patchObj.value); } }) } [代码] 到此为止,整个更新的流程就执行完了。可以看到页面跟我们预期的一样,每 500 毫秒刷新一次,构造渲染树和绘制页面花的时间也非常少。 [图片] 作为对比,如果我们在生成新的 VD 后,不经过比较,而是直接重新渲染整个 DOM 的时候,会怎样呢?我们修改一下代码: [代码]function tick(element) { if (state.num > 20) { clearTimeout(timer); return; } const newVDom = view(); newDom = createElement(newVDom); element.replaceChild(newDom, dom); dom = newDom; /* // 生成差异对象 const patchObj = diff(preVDom, newVDom); preVDom = newVDom; // 给 DOM 打个补丁 patch(element, patchObj); */ } [代码] 效果如下: [图片] 可以看到,构造渲染树(Rendering)和绘制页面(Painting)的时间要多一些。但另一方面花在 JS 计算(Scripting)的时间要少一些,因为不需要比较节点的变化。如果算总时间的话,重新渲染整个 DOM 花费的时间反而更少,这是为什么呢? 其实原因很简单,因为我们的 DOM 树太简单了!节点很少,使用到的 css 也很少,所以构造渲染树和绘制页面就花不了多少时间。VD 真正的效果还是要在真实的项目中才体现得出来。 四、总结 本文详细介绍如何实现一个简单的 VD Diff 算法,再根据计算出的差异去更新真实的 DOM 。然后对性能做了一个简单的分析,得出使用 VD 在减少渲染时间的同时增加了 JS 计算时间的结论。基于当前这个版本的代码还能做怎样的优化呢,请期待下一篇的内容:你不知道的Virtual DOM(三):Virtual DOM 更新优化
2019-03-05 - 医院室内位置需求轻松Get 道易寻位置服务插件助力小程序开发
全球医疗行业室内外位置服务领导者道一循公司行业内率先上线“医院LBS位置服务”微信小程序插件,为广大医疗行业小程序开发者提供快速、便捷的LBS室内位置能力输出,可广泛应用于各种医疗信息化场景当中。 [图片] “医院LBS位置服务”插件提供医院位置信息接口,将医院院内各类科室、设施的位置数字化后提供给小程序使用。通过此插件,小程序开发者即可调用道一循覆盖医院的室内位置信息。 目前,已有近30家全国百强三甲医院上线道一循院内位置服务系统。 “医院LBS位置服务”插件为各种医疗行业 小程序应用提供位置信息输出,支持各类基于位置的应用场景。 例如在“浙江大学医学院附属儿童医院小程序”中,实现了“在线签到”功能。 STEP 1 使用微信小程序挂号成功后进入功能页面 [图片] [图片] STEP 2 小程序通过“医院LBS位置服务”插件识别用户不在就诊科室附近,不能完成报到 [图片] STEP 3 使用院内导航引导至就诊科室 [图片] [图片] STEP 4 小程序通过“医院LBS位置服务”插件识别用户已到科室附近,可以进行报到 [图片] [图片] STEP 5 自动进入排队系统进行排队 [图片] [图片] --长按识别,进入“道易寻”小程序 --
2018-09-21 - 每周社区 | 上周社区问题反馈以及功能优化更新
各位微信开发者: 大家下午好。从本周开始,我们每周收到的 问题反馈、处理进度、社区功能更新 将以公告形式同步给大家,希望和大家一同打造小程序的生态。 一、上周问题反馈和处理进度(06.25-06.29) (一)修复中的问题: 关于微信小程序设置过多监听事件后报错 查看反馈 @font-face引入新字体,仅在IOS下且为外部字体时生效。查看反馈 查看反馈 cover-view 出现 background 无法覆盖 padding 区域 查看详情 iOS下,切换input组件,键盘会重新推出且位置计算有误 查看详情 意见反馈日志读写太频繁 查看详情 安卓全屏模式下,web-view没有占满屏幕,底部有部分留白 查看详情 工具中showToast icon='none'时无法触摸穿透 查看详情 iOS页面中多个video标签,其中一个全屏退出后video展示异常 查看详情 安卓光标移动后无法移回最后 查看详情 chooseLocation 工具上偶现只返回了经纬度 查看详情 开发工具将窗体独立之后,页面刷新/切换后不渲染 查看详情 wx.pageScrollTo导致fixed元素闪动 查看详情 小程序插件页面无法配置导航栏样式 查看详情 工具上分包预下载接口分包大小计算有误 查看详情 setBackgroundColor报无权限 接口上线后未放开权限位 查看详情 工具全局查找的查找范围不包含wxs文件 查看详情 iOS下 textarea的padding无法置0 查看详情 (二)修复完成,待客户端版本上线 安卓textarea adjust-position 设置失效 查看详情 statusBarHeight安卓返回0 查看详情 安卓text长按复制失效 查看详情 (三)已修复的问题 touch事件手机上timestamp位置不一致 查看详情 (四)需求反馈 webview 业务域名 优化 查看详情 支持自定义下拉刷新圆点的位置 查看详情 开发工具素材管理支持svg 查看详情 待讨论评估支持需求: 提供微信版本和公共库版本的对应关系数据,其他类似反馈 查看详情 uploadFile支持多文件上传 查看详情 (二)近期社区能力更新 我们在社区收到了大家希望增加”关注问题“、”收藏“帖子和通知消息回答定位的需求,近期已新增优化如下能力: 1. 增加“关注问题”的能力,关注有消息变动,会收到消息通知 2. 所有帖子新增“收藏”功能 3. 在个人主页上有所体现关注和收藏功能 4. 优化消息通知回答定位 [图片] [图片] 三、《诚邀开发者共同营造社区》的反馈 1.关于社区的官方回答 我们每天都有安排相关的同学值班回复处理大家的问题。 但是我们希望通过这些改造,促进开发者们之间的交流, 问题和回答在大家思维碰撞中产生火花。而bug和需求类,由我们来处理。 [图片] 2.关于通知中心的反馈 已优化上线该问题,可以具体定位到该问题的回答、该帖子的评论。 [图片] 3.关于已知问题 关于已知问题,大家可以关注社区“已知问题”模块,看我们的已知问题和相关修复。 [图片] 4.关于社区的评论bug 大家反馈符号超过了编辑框,帮助我们发现了一个bug,我们已经修复了这个问题。谢谢大家的反馈。 [图片] 5.关于交流群 我们希望所有的交流可以在社区完成,方便更多的开发者看见这类问题。 [图片] 感谢大家的反馈,也希望大家和我们一起共同营造社区的良好氛围。 微信团队 2018.07.03
2018-07-03