怎样利用微信小程序蓝牙bug

作者:小飞燕 发布时间:2021-03-11 07:08:05

导语本文整理了全网深受用户关注的个怎样利用微信小程序蓝牙bug经验知识,可以帮助您全面了解代理怎么做,小白也能成为高手,跟随小编一起来看一看吧!

虽然微信小程序蓝牙的开启让很多人兴奋不已,毕竟它的开启让小程序的功能完善了一大步,但是因为蓝牙模块还处于起步阶段,所以还是有很多bug。如何才能利用微信小程序的蓝牙bug玩新花样?开发者还是需要熟悉和掌握蓝牙的相关知识,大家一起学习吧。

微信小程序蓝牙的开发是指基于蓝牙4.0的低功耗蓝牙开发。

通常在不懂蓝牙或者对蓝牙略知一二的朋友眼里,ble往往等同于蓝牙4.0,其实不然。

蓝牙4.0是协议,4.0是协议版本号,蓝牙4.0是sig 2021年6月发布的蓝牙标准。它有两种模式:

1.ble(bluetooth lower energy)只能与4.0协议设备通信,节能且只收发少量数据的设备(如手环、智能体温计)称为低功耗蓝牙;

2.br/edr(基本速率/增强数据速率),向后兼容(能与3.0/2.1/2.0通信),适用于收发数据较多的设备(如耳机、手机、平板等)。这种模式常被称为“传统蓝牙”或“经典蓝牙”;

可以理解为蓝牙4.0协议包含ble,属于蓝牙4.0协议的一部分。

对于小程序蓝牙相关的开发人员来说,要重点学习低功耗的蓝牙,即ble。

1.关贸总协定,当有人提到关贸总协定时,你可以想象它是可行的。

ble技术基于属性传输协议gatt进行通信。简单来说,可以看作是属性传输的应用层协议。

每个设备中有很多“服务”,服务中有很多“特征值”,每个特征有不同的权限(读、写、通知)。

在实际的微信小程序在蓝牙中的数据存储和交换中,是通过读取、写入和通知这些“特征”来实现的。

需要注意的是,除了蓝牙技术联盟定义为标准服务和特性的,硬件设备的开发者也可以自行定义,这是蓝牙开发过程中的一个难点。软件开发者需要从硬件开发者(厂商)那里了解服务的相关功能和特性,比如mi band。哪些服务和特性用来读取步数,哪些用来设置手环振动模式,这些都需要软件开发人员和硬件开发人员之间的沟通和合作。

ble功能的实现都需要特性的操作,主要包括三种类型:

1、读取特征值

2.写特征值

3.特征值变更通知

例如,mi波段的步进计数功能可以通过两种方式实现:

1.每隔一段时间读出步数。

2.实时显示步数,即每一步都更新。

显然,1是通过读取特征值实现的,2是通过通知特征值的变化实现的。分析值值后,即可得出相应的步骤。

了解了ble的基础知识后,可以通过mi band连接微信小程序的例子,进一步熟悉蓝牙小程序的开发:

1.因为我们不是小米的开发者,所以只能对小米运动app进行反编译,获取一些可用的特征数据(step uuid、power uuid、vibration uuid)。

2.通过wx.openbluetoothadapter初始化蓝牙设备。

3.通过wx.getbluetoothadapterstate获取本机蓝牙状态

4.通过wx搜索外设蓝牙。开始蓝牙设备搜索,因为外围设备中必须有其他蓝牙设备。

5.搜索到的蓝牙设备可以通过wx.onbluetoothdevicefound搜索回调事件获得。如果是mi波段生成(设备名称:mi1a),记录设备信息。

6.通过wx.createbleconnection连接到mi波段蓝牙设备

7.通过wx.getbledeviceservices获取蓝牙设备的所有服务服务

8.由于mi频段有很多业务服务,所以需要对每一个业务服务进行循环,通过wx.getbledevicecharacteristics进行格式化、打包、录制,获取业务服务的特性。

9.再次循环显示打包的服务和特性,并匹配上面提到的步骤uuid、power uuid和振动uuid。如果它们匹配,我们将分别记录相应的服务和特征数据。

10.根据上面得到的数据,我们可以在微信小程序和mi band之间交换数据,比如读取手环的步数,发送震动通知,读取手环的剩余电量等等。

以mi band为例,我告诉你如何使用微信小程序的蓝牙bug,而不是导致蓝牙小程序开发失败的bug。这样才能获得足够好的使用小程序的体验。激动吗?来试试吧!

这里是小程序表单提交和开发相关事宜开头的标题,这里是结尾的标题。

关于小程序的形式形式,小编之前已经介绍了开发步骤,但仍有一些重要问题需要注意。接下来我们来看一下小程序表单提交和开发的相关问题。

1.与之前的web php网站相比,小程序个人理解为只是把web放到微信上,使用小程序的固定格式进行布局、事件触发、数据传输和读取,服务器可以用后端语言编写,但所有数据都必须以json的形式返回给小程序。

2.昨天写了登录注册和忘记密码的功能,本质上是一个表单提交操作。所以拿注册函数来写这个例子。

3.目录地图

js文件是逻辑控制的,主要是因为它发送请求,接收数据,json用于此页面的本地配置,并覆盖全局app.json配置。

wxss用于页面样式设置。

wxml是一个页面,相当于html

4.样式和json文件暂时被忽略。我只想看一下表格的提交情况

5.wxml文件代码

注册

注册

忘记密码

6.需要理解几个关键点

a.a.form需要与submit事件绑定。在applet中,属性是bindsubmit。

bindsubmit="formsubmit "这里的formsubmit属性值可以命名为符合规范的任意值,相当于以前html中的onsubmit="formsubmit "。是一个函数名,提交时触发函数事件formsubmit,这个函数是用js写的。

b其他属性和前面的html类似。注意表单必须有name="value ",后端处理和之前一样。比如name="username" php可以用$ _ post ['username']来接收。

c.因为applet没有输入提交按钮,所以每个表单中都应该有一个提交按钮。

此按钮用于打开提交事件。

7.index.js代码

页面({

数据: {

},

formsubmit:函数(e) {

if(e . detail . value . mobile . length==0 | | e . detail . value . password . length==0){

wx.showtoast({

标题:“手机号码或密码不能为空!”,

图标: '加载',工期: 1500

})

settimeout(函数{

wx.hidetoast

},2000)

} else if(e . detail . value . mobile . length!=11){

wx.showtoast({

标题:“请输入11位数字的手机号码!”,

图标: '加载',工期: 1500

})

settimeout(函数{

wx.hidetoast

},2000)

} else if(e . detail . value . password . length 6 | | e . detail . value . password . length;20){

wx.showtoast({

标题:“请输入6-20个密码!”,

图标: '加载',工期: 1500

})

settimeout(函数{

wx.hidetoast

},2000)

} else if(e . detail . value . password!=e.detail.value.repassword){

wx.showtoast({

标题:“两次输入不一致的密码!”,

图标: '加载',工期: 1500

})

settimeout(函数{

wx.hidetoast

},2000)

}else{

wx.request({

url : ' https://shop . yun apply.com/home/log in/register ',header: {

内容类型' : ' application/x-www-form-url encoded '

},

方法: '发布',data : { mobile : e . detail . value . mobile,password : e . detail . value . password },成功:功能(res) {

if(res.data.status==0){

wx.showtoast({

title: res.data.info,图标: '加载',工期: 1500

})

}else{

wx.showtoast({

title: res.data.info,//登录成功。

图标: '成功',工期: 1000

})

}

}

})

}

},

})

8.应该指出的是

页面是放置js对象的必要方法,用于在加载页面时呈现效果

data: {},data对象,设置页面中的数据,前端可以通过读取这个对象中的数据来显示。

formsubmit:函数小程序中的方法都是方法名: function,其中函数可以传入一个参数作为触发当前时间的对象

下面是函数的执行。因为验证太多,我只拿出一部分来理解。

if(e . detail . value . mobile . length==0 | | e . detail . value . password . length==0){

wx.showtoast({

标题:“手机号码或密码不能为空!”,

图标: '加载',工期: 1500

})

e这里是触发当前事件的对象。类似于html onclick="foo (this)"这个对象,小程序封装了很多内置的调用方法。e.detail.value.mobile是名称为“mobile”的对象的值。e.detail.value.mobile.length就是这个值的长度。

showtoast类似js中的alert,有一个弹出框,其中标题是显示信息,图标是弹出的图标状态。目前只有加载和成功两种状态。杜阿特

ion是弹出框显示在屏幕上的时间。

9.重点来了

wx.request({

url : ' https://shop.com/home/log in/register ',header: {

内容类型' : ' application/x-www-form-url encoded '

},

方法: '发布',data : { mobile : e . detail . value . mobile,password : e . detail . value . password },成功:功能(res) {

if(res.data.status==0){

wx.showtoast({

title: res.data.info,图标: '加载',工期: 1500

})

}else{

wx.showtoast({

title: res.data.info,//登录成功。

图标: '成功',工期: 1000

})

}

},

fail:function{

wx.showtoast({

标题:“服务器网络错误!”,

图标: '加载',工期: 1500

})

}

})

wx.request({})是一个小程序发起的https请求。请注意http是不可接受的。

这里

a.url是您请求的url。例如,在前端,在post表单中,action=' index.php ',这里的index.php是相对路径,applet请求的url必须是网络的路径。

例如:https://shop.com/home/login/register

b.

header: {

内容类型' : ' application/x-www-form-url encoded '

},

因为post和get传输数据的方式不同,所以post的标头必须是

内容类型' : ' application/x-www-form-url encoded '

get的标头可以是“accept”:“application/json”

c.务必指定方法:“post”默认为“get”,并保持大写

data : { mobile : e . detail . value . mobile,password : e . detail . value . password },这里的数据是指通过邮件发送到服务器的数据是以{name:value}的形式传输的

d.成功的回调函数

成功:功能(res) {

if(res.data.status==0){

wx.showtoast({

title: res.data.info,图标: '加载',工期: 1500

})

}else{

wx.showtoast({

title: res.data.info,图标: '成功',工期: 1000

})

}

}

e.success:function是请求状态被成功触发时的事件,也就是在200,需要注意的是请求成功不是操作成功,请求只是这个程序和服务器之间的连接。

fail:function是由不成功的网络请求触发的事件。

f.if(res.data.status==0){

wx.showtoast({

title: res.data.info,图标: '加载',工期: 1500

})

}else{

wx.showtoast({

title: res.data.info,//登录成功。

图标: '成功',工期: 1000

})

}

这里的一段代码与php后端程序有关。具体流程如下。

1.post使用数据到https://shop.com/home/login/register.的接口如果你用过thinkphp你就知道是home模块登录控制下的注册方式

2.2.register方法根据来自post和数据库的数据执行二次验证。如果操作成功,返回什么,如果操作失败,返回什么?

3.后端php代码如下:

logincontroller.class.php主计长

/**

*用户注册

*/

公共功能寄存器

{

if (is_post) {

$ user=d(' user ');

if(!$ user-;create($_post,4)) {

$ this-;错误($ user-;geterror,”,true);

} else {

if($ user-;注册){

$ this-;成功('注册成功!','',true);

}else{

$ this-;错误('注册失败!','',true);

}

}

}

}

模型

usermodel.class.php的注册方法

公共功能寄存器

{

$ mobile=i(' post . mobile ');

$ password=i(' post . password ');

$ res=d(' user ')-;add(array(

mobile '=;$mobile,密码'=;md5($password),modify time '=;日期(' y-m-d h:i:s ')

));

return $ res

}

除了小程序表单表单的提交过程,以上提到了表单开发的一些要点,很重要。希望大家认真阅读学习。如果想获得更多相关信息,请关注源社网的小节目频道。

查看全文

猜你喜欢

微商怎么找货源

频道查询入口

微商代理怎么做