微信開發之八 頁面獲取周圍beacon設備

 

--注意:微信測試號不具有這個功能javascript

 

步驟一:綁定域名   注意不要加http://html

 

 

步驟二:引入js文件前端

--在須要調用JS接口的頁面引入以下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.jsjava

[html] view plain copy
  1. <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>  

步驟三:經過ajax獲取參數,完成config接口注入權限驗證配置

 

--ajax請求ajax

[html] view plain copy
  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的獲取在前一節中講過,這裏就帶過json

 

[html] view plain copy
  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.     }  

 

 

 

[java] view plain copy
  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接口處理成功驗證api

 

[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獲取, 查看示例

 

 



 

90後前端妹子,愛編程,愛運營,愛折騰。堅持總結工做中遇到的技術問題,堅持記錄工做中所所思所見,歡迎你們一塊兒探討交流。

相關文章
相關標籤/搜索