接口没有权限,确定 wx.config 已经调用成功了并且走到了 wx.ready 么? https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html 小程序的 JSAPI 权限和正常 H5权限位是有区别的。
小程序调用微信JSSDK问题 小程序,调用JSSDK system:access小程序,使用 JSSDK web-view 引入H5链接,H5页面已经成功获取了wx.config ,公众号相关功能都可以调用 jsApiList: [ "playVoice",//分享朋友圈接口 "getLocation", "getNetworkType", "scanQRCode", "chooseInvoice" ] 这些权限都获取了,但是发现 wx.invoke("chooseInvoice", { 'timestamp': data.timestamp, // 卡券签名时间戳 'nonceStr': data.nonceStr, // 卡券签名随机串 'signType': 'SHA1', // 签名方式,默认'SHA1' 'cardSign': data.signature // 卡券签名 } 一直失败,提示 system:access_denied 不知道什么问题,求解决方法。
2018-11-07问题总结: 开发者页面中的 web-view 组件加载后,加载下个 URL 对应的页面中,带有独立的 iframe, iframe 的加载有一定概率会引发 iOS微信上 web-view 组件错过注入 JSBridge 的时机,导致 wx.miniProgram 及其他 JSSDK api 调用无反应。 解决方案: iOS 微信预计在 6.7.5 版本修复该问题; 在这之前带有 iframe,并偶现该问题的页面,可尝试页面加载时延迟加载 iframe 若 web-view 组件上有问题的 URL 中,并没有带上 fragment ,可尝试带上 #wechat_redirect ,如 https://developers.weixin.qq.com/community/develop/doc/0006882d318250280397f77645b000#wechat_redirect,通过同步注入 JSBridge 来解决这个问题(会增加页面大约 200ms 的加载耗时)
webview里调用wx.miniProgram.navigateTo偶尔不生效在ios中,webview里面调用wx.miniProgram.navigateTo偶尔不生效,签署完合同之后,跳转到小程序内部的支付页面,有时候不能自动跳转,并且之后点击按钮多次,仍不能触发跳转。 在h5页面打印出来wx.miniProgram 是有对象存在的,但是wx.miniProgram.navigateTo就是偶尔不跳转,一般重复5次以内必有一次不跳转。 现在这个问题已经影响到公司业务发展了,合同签署之后不能直接付款,还要用户手动返回,再在付款入口去付款,体验很差。 (ps:这个功能线上之前一直在用,并且是好的,微信近几个月的新版本是不是修改了什么导致了这个问题?)
2018-11-07版本更新是指微信或者系统更新呢? 不能用的表现是什么?
蓝牙接口IOS与Android 获取deviceId 数据格式不一致手机型号 iPhone 6 运行系统 iOS 12.0.1 微信版本 6.7.3 基础库版本 2.3.0 [177] wx.getBluetoothDevices接口 [图片] 手机型号 COL-AL10armeabi-v7a 运行系统 27 微信版本 6.7.3 基础库版本 2.3.0 [177] [图片] 手机型号 ONEPLUS A6000armeabi-v7a 运行系统 28 微信版本 6.7.3 基础库版本 2.3.1 [178] [图片]
2018-10-26楼主你好,一般特征值 update 最大字节数是 512 bytes ,的确遇过没有见过 20 btyes 分包方式接收的。 确定设备没有分包 update 的逻辑么? iOS 小程序这边没有特殊封装的逻辑,一般是收到系统的 didUpdateValueForCharacteristic 就会直接将数据吐给小程序这边。
小程序蓝牙接收到数据会被分包当下位机以200ms间隔发送20字节数据时, 小程序会对接收到的有些数据分包处理,这正常吗? 如果正常的话,那么触发分包的条件是什么?
2018-10-24楼主你好,iOS 小程序 beacon 接口是依赖系统提供的 beacon 接口,系统一有数据回调小程序会立刻给事件到前端这边的。这里的确无法提高回调的频率了。
Android与IOS小程序接受ibeacon广播数据不一致?[代码]uuids: [[代码][代码]"E2C56DB5-DFFB-48D2-B060-D0F5A71096E0"[代码][代码], [代码][代码]"E2C56DB5-DFFB-48D2-B060-D0F5A71096E1"[代码][代码], [代码][代码]"E2C56DB5-DFFB-48D2-B060-D0F5A71096E2"[代码][代码], [代码][代码]"E2C56DB5-DFFB-48D2-B060-D0F5A71096E3"[代码][代码]],[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码](res) {[代码][代码] [代码][代码]console.log(res.errMsg);[代码][代码] [代码][代码]wx.onBeaconUpdate([代码][代码]function[代码] [代码](res) {[代码][代码]//监听 iBeacon 设备的更新事件 [代码][代码] [代码][代码]//console.info(res.beacons.length);[代码][代码] [代码][代码]//封装请求数据 [代码][代码] [代码][代码]var[代码] [代码]beacons = res.beacons;[代码][代码] [代码][代码]var[代码] [代码]reqContent = {};[代码][代码] [代码][代码]var[代码] [代码]bleArray = [];[代码][代码] [代码][代码]var[代码] [代码]times = [];[代码][代码] [代码][代码]for[代码] [代码]([代码][代码]var[代码] [代码]i = 0; i < beacons.length; i++) {[代码][代码] [代码][代码]var[代码] [代码]bleObj = {};[代码][代码] [代码][代码]bleObj.distance = beacons[i].accuracy;[代码][代码] [代码][代码]bleObj.uuid = beacons[i].uuid.substr(34,2);[代码][代码]//uuids[代码][代码] [代码][代码]bleObj.rssi = beacons[i].rssi;[代码][代码] [代码][代码]//bleObj.mac = beacons[i].major + ":" + beacons[i].minor;[代码][代码] [代码][代码]bleObj.major = beacons[i].major;[代码][代码] [代码][代码]bleObj.minor = beacons[i].minor;[代码][代码] [代码][代码]//bleArray.push(bleObj);[代码][代码] [代码][代码]bleArray.push(bleObj.rssi);[代码][代码] [代码][代码]bleArray.push(bleObj.uuid);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]//获取当前时间戳[代码][代码] [代码][代码]var[代码] [代码]timestamp = ([代码][代码]new[代码] [代码]Date()).valueOf();[代码][代码] [代码][代码]timestamp = timestamp / 1000;[代码][代码] [代码][代码]bleArray.push(timestamp.toString());[代码][代码] [代码][代码]reqContent.ble = bleArray;[代码][代码]//封装beacons数据[代码][代码] [代码][代码]//reqContent = bleArray[0].rssi;//封装rssi[代码][代码] [代码][代码]console.info([代码][代码]'下面是初始数据.'[代码][代码])[代码][代码] [代码][代码]console.log(reqContent);})[代码]小程序在接受来自ibeacon广播数据时,安卓接收的速率1秒10条数据,速度与ibeacon设备设置的基本一致。手机型号是坚果pro1; 但是ios打开小程序接收速率非常慢,1秒一条,ibeacon广播的速率快与慢,ios始终都是1秒一条。 求官方解答,或者小伙伴有类似情况吗
2018-10-23机型是什么? 有代码片段么?
开启蓝牙时,不停报err_code=10001手机未开启蓝牙进入小程序,然后打开蓝牙,wx.openBluetoothAdapter不停报10001错误,可以一直复现。
2018-10-08这几天会上 6.7.3 版本,到时候楼主帮忙试试新引擎效果如何,如果有比较难扫的码,可以在这个帖发出来我们一起看看。
关于微信扫码识别问题微信扫一扫存在的问题: 目前我们在小程序调用扫一扫识别密度很高的QR码,普通的手机很难识别出来结果,但iphone会好一些,这里部是说iphone好,识别二维码有很多综合因素,角度 亮度 清晰度 分辨率 手机相机等问题存在,但是二维码解码的算法 微信是存在问题的,我用相同的二维码用微信扫很散识别 用支付宝就人容易,而且我用了几个手机都是一样 支付宝的扫一扫就很好用, 我只是想说希望等对微信扫一扫算法进行优化,至少不能比支付宝差吧
2018-09-21scanType:['barCode','qrCode','datamatrix']
【已解决】iphone端微信 js调起扫一扫不支持DM编码的二维码微信自带的扫一扫 其实QRCode和Data Matrix两种格式的编码都是可以识别的,但在网页里调用微信扫一扫的时候,dm编码格式的二维码 在安卓的微信里是可以识别的, 但是ios端不能识别, 只能识别QR格式的二维码。 为什么会有这种差异设定, 后续版本能解决这个问题吗? 解决方案: 虽然文档里没有datamatrix 实际上是支持的 scanType:['barCode','qrCode','datamatrix']
2018-08-23iOS 在低功耗蓝牙传输中的 MTU 一般是 20 bytes,超出该限制蓝牙设备会拒绝写入的数据。iOS 目前不支持与设备约定 MTU 的大小。 可以确认下设备用于写入的特征值属性是否为 writeWithoutResponse ,如果是该属性,小程序在执行完 write 操作后会直接返回 success。
BLE下ISO下关于发字节长度问题,怪异 显示发送成功,实则失败现象大佬帮看看,效果已下面有图...安卓一切正常的说,ios就不清楚什么原因了,连报错都没有给我 /ios下: var test = 12345678123456781234 20个数可以正常发送, // 超出20个数发送失败,奇妙的是 writeBLECharacteristicValue回调函数成功执行表示发送成功,可实际串 //口上没有显示数据,设备也没有返回数据, //已知安卓没有这个情况出现.. 代码 var deviceId = "" ; //mac var localName = "" ; //设备名称 var exist = false ; //ios下,是否找个设备 var result = "" ; //返回的数据 var characteristicId; //蓝牙特征值的 uuid var serviceId; // 蓝牙设备服务的 uuid var rawData = [], delayTimer //停止循环获取tag // **********************~蓝牙开始~*************************** openBluetoothAdapter(e) { var that = this ; deviceId = e.target.dataset.mac; localName = e.target.dataset.localname; // 初始化小程序蓝牙模块 wx.openBluetoothAdapter({ success: (res) => { wx.showLoading({ title: '正在搜索' , icon: "loading" , }) console.log( "蓝牙初始化成功" , res); //如果当前是android,请直接连接低功耗蓝牙设备 if (that.data.android) { that.createBLEConnection(e, deviceId); } else if (!that.data.android) { // IOS,马上开始寻找附近的蓝牙设备 that.startBluetoothDevicesDiscovery(); delayTimer = setInterval( function () { if (exist) { that.createBLEConnection(e, deviceId); } else { wx.getBluetoothDevices({ success: function (res) { console.log( "每1秒取一次当前蓝牙模块生效期间所有已发现的蓝牙设备" ) console.log(res) if (res.devices.length == 0 ) { console.log( "设备数为0" ) clearInterval(delayTimer) return ; } for ( let i = 0 ; i < res.devices.length; i++) { if (res.devices[i].localName == localName) { deviceId = res.devices[i].deviceId; console.log(res.devices[i].locklName) console.log(deviceId) //开始连接 that.createBLEConnection(e, deviceId); //关掉计时器 clearInterval(delayTimer) return ; } } } }) } }, 2000 ) } }, // 初始化失败?提示用户打开蓝牙,并监听蓝牙状态 fail: (res) => { wx.showToast({ title: '请正确蓝牙开启' , icon: 'none' , duration: 2000 }) wx.onBluetoothAdapterStateChange( function (res) { // console.log('onBluetoothAdapterStateChange', res) if (res.available) { // 蓝牙适配器是否可用? // 开始搜寻附近的蓝牙外围设备 that.startBluetoothDevicesDiscovery(); } else if (!res.available) { } }) } }) }, // 获取本机蓝牙适配器状态 getBluetoothAdapterState() { wx.getBluetoothAdapterState({ success: (res) => { //console.log("本机蓝牙适配器状态"); if (res.discovering) { // 是否正在搜索设备 //监听寻找到新设备的事件 that.onBluetoothDeviceFound() } else if (res.available) { // 蓝牙适配器是否可用 // 开始搜寻附近的蓝牙外围设备 that.startBluetoothDevicesDiscovery() } } }) }, //开始搜寻附近的蓝牙外围设备 startBluetoothDevicesDiscovery() { var that = this ; console.log( "开始搜寻附近的蓝牙外围设备" ) // 开始搜寻附近的蓝牙外围设备 wx.startBluetoothDevicesDiscovery({ services: [], //只搜索主服务 UUID 为 ["???] 的设备 allowDuplicatesKey: true , success: (res) => { console.log( "开始搜寻附近的蓝牙外围设备---成功" ) //监听寻找到新设备的事件 that.onBluetoothDeviceFound() wx.getBluetoothDevices({ success: function (res) { console.log( "得到蓝牙信息" ); console.log(res); //是否有已连接设备 wx.getConnectedBluetoothDevices({ success: function (res) { //console.log(JSON.stringify(res.devices)); } }) } }) }, fail: function (err) { console.log( "搜寻附近的蓝牙外围设备" , err) } }) }, //停止搜寻附近的蓝牙外围设备。若已经找到需要的蓝牙设备并不需要继续搜索时,建议调用该接口停止蓝牙搜索。 stopBluetoothDevicesDiscovery() { wx.stopBluetoothDevicesDiscovery() }, //监听寻找到新设备的事件 onBluetoothDeviceFound() { var that = this ; wx.onBluetoothDeviceFound((res) => { // console.log(171, "新设备的事件") res.devices.forEach(device => { console.log(res.devices[ 0 ].localName) console.log(res.devices[ 0 ].advertisServiceUUIDs[ 0 ]) if (!that.data.android) { if (res.devices[ 0 ].localName == localName) { exist = true ; deviceId = res.devices[ 0 ].deviceId; console.log(deviceId) console.log( "找到匹配的设备了" ) //开始连接 //that.createBLEConnection(e, deviceId); //停止搜索 that.stopBluetoothDevicesDiscovery(); //关掉计时器 //clearInterval(delayTimer) return ; } console.log( '新设备' ) console.log(res) } }) }) }, // 断开连接 DisconnectBle: function (deviceId) { wx.closeBLEConnection({ deviceId: deviceId, success: function (res) { console.log( "正常断开" ) } }) }, //连接低功耗蓝牙设备 createBLEConnection(e, deviceId) { var that = this ; console.log( "开始连接" ) //连接低功耗蓝牙设备。 wx.createBLEConnection({ deviceId: deviceId, //android==mac,ios==uuid timeout: 5000 , success: (res) => { console.log( "连接成功" ) //获取蓝牙设备所有 service(服务) that.getBLEDeviceServices(deviceId) //连接成功,停止计时器 clearInterval(delayTimer) exist = false ; // 连接成功, 停止搜索 that.stopBluetoothDevicesDiscovery(); }, fail: function (err) { exist = false ; wx.showToast({ title: '接连失败' , icon: 'none' , duration: 2000 }) // // 断开 // that.DisconnectBle(deviceId); // // 关闭蓝牙 // that.closeBluetoothAdapter(); wx.onBLEConnectionStateChange( function (res) { // 该方法回调中可以用于处理连接意外断开等异常情况 // console.log( `device ${ res.deviceId } state has changed, connected: ${ res.connected }` ) }) } }) }, //获取蓝牙设备所有 service(服务)。 getBLEDeviceServices(deviceId) { var that = this ; wx.getBLEDeviceServices({ deviceId: deviceId, success: (res) => { for ( let i = 0 ; i < res.services.length; i++) { // if (res.services[i].isPrimary) { if (res.services[i].uuid.toUpperCase().indexOf( "0000110" ) != - 1 ) { // //蓝牙设备characteristic(特征值)信息 serviceId = res.services[i].uuid // 蓝牙设备服务的 uuid that.getBLEDeviceCharacteristics(deviceId, serviceId) break ; } } } }) }, //蓝牙设备characteristic(特征值)信息 getBLEDeviceCharacteristics(deviceId, serviceId) { var that = this ; wx.getBLEDeviceCharacteristics({ deviceId: deviceId, serviceId: serviceId, //蓝牙服务 uuid success: (res) => { console.log( '启动获取(特征值)信息' , res.characteristics) for ( let i = 0 ; i < res.characteristics.length; i++) { let item = res.characteristics[i] characteristicId = item.uuid; if (item.properties.notify || item.properties.indicate) { // 启用低功耗蓝牙设备特征值变化时的 notify 功能,须设备的特征值支持notify或者indicate才可以成功调用 wx.notifyBLECharacteristicValueChange({ deviceId: deviceId, serviceId: serviceId, characteristicId: characteristicId, state: true , success: function (res) { //// 向蓝牙设备发送一个0x00的16进制数据 setTimeout( function () { that.writeBLECharacteristicValue(deviceId, serviceId, characteristicId); }, 2000 ) }, complete: function () { wx.onBLECharacteristicValueChange( function (characteristic) { console.log( '对比,解密:' ) let buffer = characteristic.value let getData = ab2hex(buffer) console.log(getData) if (getData == '01' ) { // 断开 that.DisconnectBle(deviceId); setTimeout( function () { that.closeBluetoothAdapter(); }, 500 ) } else { //定义设备没找到 } }) } }) } } }, fail(res) { console.error( 'getBLEDeviceCharacteristics' , res) } }) }, // 向蓝牙设备发送一个0x00的16进制数据 writeBLECharacteristicValue(deviceId, serviceId, characteristicId) { var that = this ; // 向蓝牙设备发送一个0x00的16进制数据 var test = '12345678' ; //0x12,0x34 IOS:16(1) 24(2) 22(1 没有返回值) 20(1正常) //ios下: var test = 12345678 123456781234 20个数可以正常发送, // 超出20个数发送失败,奇妙的是 writeBLECharacteristicValue回调函数成功执行表示发送成功,可实际串 //口上没有显示数据,设备也没有返回数据, //已知安卓没有这个情况出现.. let buffer = hexStringToArrayBuffer( test ) console.log( "开始向蓝牙设备发送一个0x00的16进制数据" , buffer) console.log( 'uuid:' , deviceId, ' 蓝牙设备服务的 uuid:' , serviceId, '蓝牙特征值的 uuid:' , characteristicId) //向低功耗蓝牙设备特征值中写入二进制数据。注意:必须设备的特征值支持write wx.writeBLECharacteristicValue({ deviceId: deviceId, serviceId: serviceId, characteristicId: characteristicId, value: buffer, success: function (res) { setTimeout( function () { wx.hideLoading() }, 2000 ) console.log(res) console.log( "成功向低功耗蓝牙设备特征值中写入二进制数据" ) }, fail: function (err) { console.log( '写入二进制数据--失败' ) console.log(err.errCode); }, complete: function () { } }) }, onBLEConnectionStateChange() { wx.showToast({ title: '蓝牙正在断开' , icon: 'loading' , duration: 3000 }) }, //关闭蓝牙模块,使其进入未初始化状态 closeBluetoothAdapter() { wx.openBluetoothAdapter({ success: function (res) { wx.closeBluetoothAdapter({ success: function (res) {} }) } }) }, }) function inArray(arr, key, val) { for ( let i = 0 ; i < arr.length; i++) { if (arr[i][key] === val) { return i; } } return - 1 ; } // 十六进制字符串===>ArrayBuffer function hexStringToArrayBuffer(str) { if (!str) { return new ArrayBuffer( 0 ); } var buffer = new ArrayBuffer(str.length); //创建str.length字节的内存 let dataView = new DataView(buffer) let ind = 0 ; for ( var i = 0 , len = str.length; i < len; i += 2 ) { //parseInt()将str 转换成 16进制 数值 //substr()在字符串中抽取从 start 下标开始的指定数目的字符, //var str="ABCDCF" //document.write(str.substr(2,4)) //==>CDCF let code = parseInt(str.substr(i, 2 ), 16 ); // DataView 向内存的位置写入数据 dataView.setUint8(ind, code) ind++ } return buffer; } // ArrayBuffer转16进度字符串示例 function ab2hex(buffer) { var hexArr = Array.prototype.map.call( new Uint8Array(buffer), function (bit) { return ( '00' + bit.toString( 16 )).slice(- 2 ) } ) return hexArr.join( '' ); } //去年空格 function Trim(sText) { return sText.replace( new RegExp( "(^[\\s]*)|([\\s]*$)" , "g" ), "" ); } 第一次 [图片] 第二次: [图片]
2018-08-14你好,从线上数据来讲,11.4版本蓝牙连接成功率并没有上升,目前你是遇到了多台11.4手机出现连接经常失败问题么?
小程序蓝牙在ios11.4上经常连接失败使用小程序蓝牙时,能正常搜索出蓝牙,但是在进行蓝牙连接时,ios11.4系统连接不稳定,经常出现连接失败的情况,安卓系统和ios11.4以下系统能正常连接
2018-08-13