zoukankan      html  css  js  c++  java
  • 微信开发之八 页面获取周围beacon设备

    原文链接:https://blog.csdn.net/qq_37936542/article/details/78912197

    --注意:微信测试号不具备这个功能


    步骤一:绑定域名   注意不要加http://




    步骤二:引入js文件

    --在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js

    1. <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>  

    步骤三:通过ajax获取参数,完成config接口注入权限验证配置


    --ajax请求

    1. var url = location.href.split('#')[0];  
    2.        $.ajax({  
    3.             type:"GET",  
    4.             url:"signature.action?url=" + url,  
    5.             dataType:"json",  
    6.             success:function(data){  
    7.               if (data){  
    8.                  wx.config({  
    9.                   debug: false,  
    10.                   appId: data.appid,  
    11.                   timestamp: data.timestamp,  
    12.                   nonceStr: data.nonceStr,  
    13.                   signature: data.signature,  
    14.                   jsApiList: [// 这个必须要配置,不然会报权限不足的错误  
    15.                      'checkJsApi',   
    16.                      'getNetworkType',//网络状态接口  
    17.                      'openLocation',//使用微信内置地图查看地理位置接口    
    18.                      'getLocation', //获取地理位置接口    
    19.                      'startSearchBeacons',//开启扫描周边设备  
    20.                      'stopSearchBeacons'//停止扫描    
    21.                   ]  
    22.                  });  
    23.                 }  
    24.             }  
    25.         });  



    --后台代码


    注:jsapi-ticket的获取在前一节中讲过,这里就带过


    1. @RequestMapping(value = "signature"method = RequestMethod.GET)  
    2.     @ResponseBody   
    3.     public Map<String, String> createSignature(@RequestParam String url)   
    4.     {  
    5.       System.out.println("RestFul of createSignature parameters url:"+url);  
    6.         
    7.       return SignatureUtil.sign(tokenService.getJsapi_ticket(), url);  
    8.     }  




    1. public static Map<String, String> sign(String jsapi_ticket, String url) {  
    2.             Map<String, String> ret = new HashMap<String, String>();  
    3.             String nonce_str = create_nonce_str();  
    4.             String timestamp = create_timestamp();  
    5.             String str;  
    6.             String signature = "";  
    7.        
    8.             //注意这里参数名必须全部小写,且必须有序  
    9.             str = "jsapi_ticket=" + jsapi_ticket +  
    10.                       "&noncestr=" + nonce_str +  
    11.                       "×tamp=" + timestamp +  
    12.                       "&url=" + url;  
    13.        
    14.             try  
    15.             {  
    16.                 MessageDigest crypt = MessageDigest.getInstance("SHA-1");  
    17.                 crypt.reset();  
    18.                 crypt.update(str.getBytes("UTF-8"));  
    19.                 signature = byteToHex(crypt.digest());  
    20.             }  
    21.             catch (NoSuchAlgorithmException e)  
    22.             {  
    23.                 e.printStackTrace();  
    24.             }  
    25.             catch (UnsupportedEncodingException e)  
    26.             {  
    27.                 e.printStackTrace();  
    28.             }  
    29.        
    30.             ret.put("url", url);  
    31.             ret.put("jsapi_ticket", jsapi_ticket);  
    32.             ret.put("nonceStr", nonce_str);  
    33.             ret.put("timestamp", timestamp);  
    34.             ret.put("signature", signature);  
    35.             ret.put("appid", WeChatInfo.WX_APPID);  
    36.        
    37.             return ret;  
    38.         }  
    39.           
    40.         private static String byteToHex(final byte[] hash) {  
    41.             Formatter formatter = new Formatter();  
    42.             for (byte b : hash)  
    43.             {  
    44.                 formatter.format("%02x", b);  
    45.             }  
    46.             String result = formatter.toString();  
    47.             formatter.close();  
    48.             return result;  
    49.         }  
    50.        
    51.         private static String create_nonce_str() {  
    52.             return UUID.randomUUID().toString();  
    53.         }  
    54.        
    55.         private static String create_timestamp() {  
    56.             return Long.toString(System.currentTimeMillis() / 1000);  
    57.         }  
    58.            

    步骤四:通过ready接口处理成功验证


    [javascript] view plain copy
    1. wx.ready(function(){  
    2.     // 蓝牙扫描接口     
    3.     wx.startSearchBeacons({  
    4.     ticket:"",  //摇周边的业务ticket, 系统自动添加在摇出来的页面链接后面  
    5.     success: function(res){  
    6.         wx.onSearchBeacons({  
    7.         complete:function(data){  
    8.         alert(JSON.stringify(data));    
    9.         showBeacon(data.beacons);//处理返回的beacon数组  
    10.          }  
    11.       });  
    12.      },  
    13.         fail:function(res){  
    14.            var errmsg = JSON.stringify(res.errMsg);  
    15.                var arr = errmsg.split(':');  
    16.            var errmsgBody = arr[1];  
    17.            if(errmsgBody.substr(0, 9) == "bluetooth"){  
    18.                 alert("蓝牙未打开,请打开后重试!");  
    19.            } else if(errmsgBody.substr(0, 8) == "location"){  
    20.                 alert("手机位置未打开,请打开后重试!");  
    21.            }else{  
    22.                 alert(JSON.stringify(res));  
    23.            }  
    24.          }  
    25.      });  
    26. });  
    [javascript] view plain copy
    1. wx.error(function(res){//验证错误时执行的函数  
    2. alert(JSON.stringify(res));  
    3.  });  

    [javascript] view plain copy
    1.   


    函数详解:

    1.开启查找周边ibeacon设备接口

    wx.startSearchBeacons({
       ticket:"",
       complete:function(argv){
       //回调函数
       }
    });

    返回参数说明

    打开成功返回:“startSearchBeacons:ok”;


    打开后未stop再次打开 :“startSearchBeacons:already started”;


    蓝牙未打开返回 :“startSearchBeacons:bluetooth power off”;


    地理位置服务未打开返回: “startSearchBeacons:location service disable”;


    系统不支持返回 :“startSearchBeacons:system unsupported”。


    2. 关闭查找周边ibeacon设备接口

    wx.stopSearchBeacons({
       complete:function(res){
       //回调函数
       }
    });
    返回说明


    关闭成功返回“stopSearchBeacons:ok”;


    3.监听周边ibeacon设备接口(这个函数写在startSearchBeacons的回调函数里面)

    wx.onSearchBeacons({
       complete:function(argv){
       //回调函数
       }
    });


    返回数据为数组

    onSearchBeacons:
    {
       "beacons":[
                   {
                   "major":10008,
                   "minor":57686,
                   "uuid":"FDA50693-A4E2-4FB1-AFCF-C6EB07647825",
                   "accuracy":"0.235344",
                   "rssi":"-66",
                   "proximity":"1",
                   "heading":"288.1355"
                   },
                   {
                   "major":10008,
                   "minor":57687,
                   "uuid":"FDA50693-A4E2-4FB1-AFCF-C6EB07647825",
                   "accuracy":"0.349124",
                   "rssi":"-49",
                   "proximity":"2",
                   "heading":"288.1355"
                   }
                   ]
    }
    参数说明


    参数 说明
    UUID、major、minor UUID、major、minor
    accuracy 距离,单位为米
    proximity 精度,0:CLProximityUnknown, 1:CLProximityImmediate, 2:CLProximityNear, 3:CLProximityFar
    rssi 接收信号的强度指示

    heading 接收信号时设备的方向(安卓设备返回有此字段,iOS无);iOS设备若需要获取方向,可以利用HTML5标准API获取, 查看示例


    文末福利:

    福利一:前端,Java,产品经理,微信小程序,Python等10G资源合集大放送:https://www.jianshu.com/p/e8197d4d9880

    福利二:微信小程序入门与实战全套详细视频教程

    【领取方法】

    关注 【编程微刊】微信公众号:

    回复【小程序demo】一键领取130个微信小程序源码demo资源。

    回复【领取资源】一键领取前端,Java,产品经理,微信小程序,Python等资源合集10G资源大放送。


    image

    90后前端妹子,爱编程,爱运营,爱折腾。
    坚持总结工作中遇到的技术问题,坚持记录工作中所所思所见,欢迎大家一起探讨交流。



  • 相关阅读:
    使用python内置模块os和openpyxl搜索指定文件夹下Excel中的内容
    python实现DNA序列字符串转换,互补链,反向链,反向互补链
    PandaSeq安装报错ltld required, install libtool library
    使用MySQL客户端登录Ensemble数据库查询相关信息
    第118天:移动端开发——视口
    第117天:Ajax实现省市区三级联动
    第116天: Ajax运用artTemplate实现菜谱
    第115天:Ajax 中artTemplate模板引擎(一)
    第114天:Ajax跨域请求解决方法(二)
    第113天:Ajax跨域请求解决方法
  • 原文地址:https://www.cnblogs.com/wangting888/p/9701625.html
Copyright © 2011-2022 走看看