談一談微信硬件公眾號遇到的坑

簡介

微信的硬件平臺。主要是可以使一些硬件設備通過某種連接手段(Wi-Fi或者藍牙)使得設備和手機(微信客戶端)通信,從而微信作為展示和交互平臺,讓用戶進行簡單的設備功能體驗。

接入和開發

接入流程官方文檔比較清楚,我采用的是微信硬件云標準接入流程 —— 設備直連微信硬件云通道.如果是第一次接觸微信開發可能看文檔還會摸不著頭腦,那就去找教程博客看一看吧。我寫這篇文章主要是記錄一下自己遇到的一些問題,用以提醒自己和未來的開發者們。我的后臺代碼的非業務模塊在前面博客中開源了,歡迎大家一起交流。

遇到的那些坑

  1. 準備
    首先,大家一般都是需要申請一個微信測試號來開發的。測試號一個微信號(不是公眾號)可以申請一個,在填接口配置信息時要注意你的服務器地址一定時80端口開頭的。

  2. 設備授權的流程
    微信官方給出的新接口授權流程如下:


    新接口設備授權流程

    我依然用的是舊接口:

舊接口接入流程

二者的區別就在于deviceId是自己決定還是微信硬件平臺自動幫你生成好。但其實新版的接入方案還是需要deviceId去更新設備屬性的,還是避免不了將設備Mac地址等信息去做交互。如果是對傳輸數據沒有嚴格安全要求的設備我建議還是可以用老的那一套,流程更簡單。

  1. 傳輸協議
    這一塊是硬件那邊寫入硬件設備的程序中的協議。里面包含了和公眾號有關的信息,也就是說,想要讓公眾號與設備連接,必須有一個與該公眾號有關的參數(具體我也不是很清楚),參數為公眾號(一般為gh_開頭)。如果沒有該協議基礎,你的手機公眾號界面將一直處于正在連接...未連接...的狀態

  2. 設備功能服務器啟用

設備功能服務器設置

微信這里有個專門的設備服務器,如果開啟該服務器所有關于設備的消息都會轉發到該地址上。但是,這里的消息都是json格式的..不是xml所以要注意和普通公眾號區別開來。還有就是通過jsapi直接與設備通信的時候消息也會轉發到這個地址上來,往往頁面接收沒有那么靈敏的時候可以從這里看看是否接收到數據。

  1. JS接口安全域名及網頁授權域名
  • 首先這兩個域名都是不含https://或者http://,在測試號中可以設置ip加任意端口號,也支持二級域名,如127.0.0.1:9010/home/,但是正式的公眾號里面一定要配域名。經常我們在做網頁授權時頁面報錯為request url參數錯誤這就說明你配的域名是有問題的。或者是你訪問的鏈接,例如:
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx927546bf00000000&redirect_uri=http://127.0.0.1:9010/&response_type=code&scope=snsapi_userinfo&state=syncwt#wechat_redirect
    其中的url:http://127.0.0.1:9010/
    應該是你真實訪問的地址。但如果你訪問的地址就是
    http://127.0.0.1:9010,微信oauth2跳轉的安全鏈接同樣也是
    https://open.weixin.qq.com/connect/oauth2/authorize?appid= wx927546bf00000000&redirect_uri=http://127.0.0.1:9010/&response_type=code&scope=snsapi_userinfo&state=syncwt#wechat_redirect
    在做后臺驗證的時候就一定要注意了。
  • 另外硬件平臺的JSapi遇到的坑也是很多的。。因為這東西根本就不完善。所有關于設備數據有關的接口不能在前臺彈窗alert,否則微信就會卡死只能強制殺死程序了。另外這幾個接口的官方文檔挺模糊的..有一些描述為必填的參數實際上是接收參數,也不知道它要表達的意思。jsapi是分為調用接口和事件接口的,調用的為h5主動調用微信api,事件為被動收到時間通知,但前臺通知沒有后臺清楚,很難判斷是否確實觸發了事件。換句話說,它的事件對h5的通知并不是完全及時和完整的。這就是個大坑了。。所以在調試設備數據的時候要考慮微信jspai這方面的缺點,真的不一定是你的程序代碼有問題。
  • 安卓設備無法調用jsapi的問題。
    安卓手機在調用jsapi的時候拋出sendDataToWXDevice{"errmsg":"sendDataToWXDevice:fail"}的錯誤,我嘗試在不同頁面去調用還會有access_denied的權限問題。第一個問題要檢查設備在連接頁面是否處于連接上的狀態(很多時候是連接中,雖然調用jsapi可以得到設備列表),這還是屬于安卓藍牙模塊不穩定的原因。后者是安卓對jsapi的域名支持問題,他只支持你配置的域名一級目錄。比如,你配置為www.example.com,但你的業務場景調用在www.example.com/home/這就會拋出那個異常。真的坑。。
  1. 安卓設備對微信藍牙模塊的支持問題
    經測試發現,大部分安卓機器對微信公眾號端的藍牙連接不是很友好,主要體現在進入公眾號后連接藍牙速度慢。甚至出來不了連接的提示文字(即無法連接藍牙,如小米的紅米系列)。還有部分設備(如華為部分機型)在綁定設備時點擊綁定之后沒有相應,雖然服務端已經發送了綁定消息。但用戶無法進入公眾號,體驗太差了。。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 微信硬件平臺 概述 微信硬件平臺介紹 微信硬件平臺是微信在連接人、連接企業和服務之后,推出的連接硬件設備的物聯網解...
    Raaaaamsey閱讀 21,983評論 2 18
  • 給提問的開發者的建議:提問之前先查詢 文檔、通過社區右上角搜索搜索已經存在的問題。 寫一個簡明扼要的標題,并且...
    極樂叔閱讀 13,699評論 0 3
  • 文|蘇吉兒 一個人一生會有很多朋友,有兒時青梅竹馬的朋友,童年時兩小無猜形影不離的朋友,有年輕時學生時代的同進同出...
    蘇吉兒閱讀 396評論 0 1
  • 早上醒來,看到房面上的瓦被一層霜蓋滿了,我才想起在院子里的花,花葉是不是凍了,出去一看還可以,我就打算搬進屋里來...
    任梓晨閱讀 206評論 0 0
  • 世界需要一個本源,這個本源是世界的來源。因為世間萬物都在不停的生滅變化,在這個變動不居的世界,人類不免疑惑,我從哪...
    北池魚閱讀 1,675評論 33 22