支付寶小程序API 藍牙

2020-09-16 15:49 更新

藍牙 API 概覽

  • 錯誤碼信息及解決方案,請參見下文 藍牙 API 錯誤碼對照表。
  • 常見問題及解決方法,請參見下文 藍牙 API FAQ。

版本需求

藍牙類型 支付寶客戶端版本需求 Android 或 iOS 版本需求
BLE 低功耗藍牙 支付寶客戶端 10.0.18 或更高版本,若版本較低,建議做 兼容處理。 Android: 5.0 及以上版本iOS:無版本需求
傳統(tǒng)藍牙 支付寶客戶端 10.0.18 或更高版本,若版本較低,建議做 兼容處理my.startBluetoothDevicesDiscovery 方法的 allowDuplicatesKey 和 interval 參數(shù),從支付寶客戶端 10.0.20 版本開始支持。 -
iBeacon 支付寶客戶端 10.1.8 或更高版本,若版本較低,建議做 兼容處理。 -

基本流程

低功耗藍牙流程圖

image

傳統(tǒng)藍牙流程圖

image

藍牙 API
藍牙類型 名稱 功能說明
低功耗藍牙 my.connectBLEDevice 連接低功耗藍牙設備。
my.disconnectBLEDevice 斷開與低功耗藍牙設備的連接。
my.getBLEDeviceCharacteristics 獲取藍牙設備所有 characteristic(特征值)。
my.getBLEDeviceServices 獲取所有已發(fā)現(xiàn)的藍牙設備,包括已經(jīng)和本機處于連接狀態(tài)的設備。
my.notifyBLECharacteristicValueChange 啟用低功耗藍牙設備特征值變化時的 notify 功能。
my.offBLECharacteristicValueChange 取消監(jiān)聽低功耗藍牙設備的特征值變化的事件。
my.offBLEConnectionStateChanged 取消低功耗藍牙連接狀態(tài)變化事件的監(jiān)聽。
my.onBLECharacteristicValueChange 監(jiān)聽低功耗藍牙設備的特征值變化的事件。
my.onBLEConnectionStateChanged 監(jiān)聽低功耗藍牙連接的錯誤事件,包括設備丟失,連接異常斷開等。
my.readBLECharacteristicValue 讀取低功耗藍牙設備特征值中的數(shù)據(jù)。
my.writeBLECharacteristicValue 向低功耗藍牙設備特征值中寫入數(shù)據(jù)。
傳統(tǒng)藍牙 my.closeBluetoothAdapter 關閉本機藍牙模塊。
my.getBluetoothAdapterState 獲取本機藍牙模塊狀態(tài)。
my.getBluetoothDevices 獲取所有已發(fā)現(xiàn)的藍牙設備,包括已經(jīng)和本機處于連接狀態(tài)的設備。
my.getConnectedBluetoothDevices 獲取處于已連接狀態(tài)的設備。
my.offBluetoothAdapterStateChange 移除本機藍牙狀態(tài)變化的事件的監(jiān)聽。
my.offBluetoothDeviceFound 移除尋找到新的藍牙設備事件的監(jiān)聽。
my.onBluetoothDeviceFound 搜索到新的藍牙設備時觸發(fā)此事件。
my.onBluetoothAdapterStateChange 監(jiān)聽本機藍牙狀態(tài)變化的事件。
my.openBluetoothAdapter 初始化小程序藍牙適配器。
my.startBluetoothDevicesDiscovery 開始搜尋附近的藍牙外圍設備。
my.stopBluetoothDevicesDiscovery 停止搜尋附近的藍牙外圍設備。
iBeacon my.getBeacons 獲取已經(jīng)搜索到的 iBeacon 設備。
my.onBeaconServiceChange 監(jiān)聽 iBeacon 服務的狀態(tài)變化。
my.onBeaconUpdate 監(jiān)聽 iBeacon 設備的更新事件。
my.startBeaconDiscovery 開始搜索附近的 iBeacon 設備。
my.stopBeaconDiscovery 停止搜索附近的 iBeacon 設備。

示例代碼

//初始化
my.openBluetoothAdapter({
  success: (res) => {
    console.log(res);
  }
});


//注冊發(fā)現(xiàn)事件
my.onBluetoothDeviceFound({
  success: (res) => {
    let device = res.devices[0];


    //連接發(fā)現(xiàn)的設備
    my.connectBLEDevice({
      deviceId: deviceId,
      success: (res) => {
        console.log(res)
      },
      fail:(res) => {
      },
      complete: (res)=>{
      }
    });


    //停止搜索
    my.stopBluetoothDevicesDiscovery({
      success: (res) => {
        console.log(res)
      },
      fail:(res) => {
      },
      complete: (res)=>{
      }
    });
  }
});

    
//注冊連接事件
my.onBLEConnectionStateChanged({
  success: (res) => {
    console.log(res);
    if (res.connected) {
        //開始讀寫notify等操作
        my.notifyBLECharacteristicValueChange({
          deviceId: deviceId,
          serviceId: serviceId,
          characteristicId: characteristicId,
          success: (res) => {
            console.log(res)
          },
          fail:(res) => {
          },
          complete: (res)=>{
          }
        });
    }
  }
});


//注冊接收read或notify的數(shù)據(jù)
my.onBLECharacteristicValueChange({
  success: (res) => {
    console.log(res);
  }
});


//開始搜索
my.startBluetoothDevicesDiscovery({
  services: ['fff0'],
  success: (res) => {
    console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});


//斷開連接
my.disconnectBLEDevice({
  deviceId: deviceId,
  success: (res) => {
    console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});


//注銷事件
my.offBluetoothDeviceFound();
my.offBLEConnectionStateChanged();
my.offBLECharacteristicValueChange();


//退出藍牙模塊
my.closeBluetoothAdapter({
  success: (res) => {
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

藍牙 API 錯誤碼對照表

錯誤碼 說明 解決方案
10000 未初始化藍牙適配器。 調(diào)用 my.openBluetoothAdapter,進行藍牙適配器初始化。
10001 當前藍牙適配器不可用。 檢查當前設備對 BLE 的支持情況,并開啟藍牙功能。
10002 沒有找到指定設備。 檢查 deviceId,并確認已開啟目標藍牙外設的廣播。
10003 連接失敗。 檢查 deviceId,并確認已開啟目標藍牙外設的廣播。
10004 沒有找到指定服務。 檢查 serviceId,并確認目標外設已擁有該服務。
10005 沒有找到指定特征值。 確保 characteristicId 正確、檢查目標外設特定 service 下已具備該特征。
10006 當前連接已斷開。 連接斷開,重新連接。
10007 當前特征值不支持此操作。 檢查特征值具備讀、寫、通知等功能。
10008 其余所有系統(tǒng)上報的異常。 其他未知錯誤,具體問題具體分析。
10009 Android 系統(tǒng)特有,系統(tǒng)版本低于 4.3 不支持 BLE。 提示用戶該安卓系統(tǒng)版本不支持使用 。
10010 沒有找到指定描述符。 使用正確的 serviceId、characteristicId。
10011 設備 ID 不可用,或為空。 使用正確的 deviceId。
10012 服務 ID 不可用,或為空。 使用正確的 serviceId。
10013 特征 ID 不可用,或為空。 使用正確的 characteristicId。
10014 發(fā)送的數(shù)據(jù)為空或格式錯誤。 確保寫數(shù)據(jù)或者 HEX 轉(zhuǎn)化正確。
10015 操作超時。 重新操作。
10016 缺少參數(shù)。 檢查調(diào)用的參數(shù),并重新操作。
10017 寫入特征值失敗。 寫失敗。確保外設特征支持寫操作,不要斷開連接。
10018 讀取特征值失敗。 讀失敗。確保外設特征支持讀操作,不要斷開連接。

藍牙 API FAQ

Q:調(diào)用 my.writeBLECharacteristicValue 的返回值是空對象嗎?

A:不是,調(diào)用此 API 返回的是您寫入成功的值。

Q:調(diào)用 my.onBLECharacteristicValueChange 為何監(jiān)聽不到?一定要先寫入才能監(jiān)聽到嗎?

A:是的,調(diào)用此 API 需要先寫入才能監(jiān)聽到。為防止多次注冊事件監(jiān)聽導致一次事件多次回調(diào),建議每次調(diào)用 on 方法監(jiān)聽事件之前,先調(diào)用 off 方法,關閉之前的事件監(jiān)聽。

Q:調(diào)用 my.writeBLECharacteristicValue 為何報錯10014?

A:10014 錯誤是由于發(fā)送的數(shù)據(jù)為空或者格式錯誤導致,建議檢查寫入的數(shù)據(jù)或 HEX 轉(zhuǎn)化是否有錯誤。

Q:調(diào)用 my.writeBLECharacteristicValue 寫入特征值,使用 16 進制的數(shù)組可以嗎?

A:不可以,寫入特征值需要使用 16 進制的字符串,并限制在 20 字節(jié)內(nèi)。

Q:安卓和 iOS 獲取到的 deviceId 格式分別是什么樣的?

A:

  • Android 獲取到的是藍牙的 mac 地址。如:11:22:33:44:55:66
  • iOS 獲取到的是藍牙的 UUID。如:00000000-0000-0000-0000-000000000000

Q:調(diào)用 my.startBluetoothDevicesDiscovery 接口為何搜索不到設備?

A:請確保設備已發(fā)出廣播。若接口傳入 services,請確保設備的廣播內(nèi)容中包含 service 的 UUID。

Q:調(diào)用藍牙 API 時如果不開啟 GPS 定位,部分機型會報錯:定位服務未開啟。連接不了藍牙?

A:小程序藍牙功能需要依賴 GPS 定位,因為大概 5 分之一的手機藍牙需要依賴 GPS。 建議接入藍牙時先引導用戶打開 GPS 定位服務。

Q:如何解決連接設備失敗?

A:請確保傳入的 deviceId 正確,并且設備發(fā)出的信號足夠強。在信號弱的情況下,可能會出現(xiàn)連接設備失敗。

Q:如何解決寫 / 讀數(shù)據(jù)失敗?

A:

  • 請確保傳入的 deviceId、serviceId、characteristicId 格式正確。
  • deviceId 已連接上(可調(diào)用 my.onBLEConnectionStateChanged 監(jiān)聽連接狀態(tài)的變化;調(diào)用 my.getConnectedBluetoothDevices 獲取處于已連接狀態(tài)的設備。)
  • 在連接狀態(tài)下寫入方法。
  • 檢查 characteristicId 屬于此 service。
  • 此特征值支持寫 / 讀。

Q:如何收到數(shù)據(jù)通知?

A:

Q:為何事件回調(diào)會多次被調(diào)用?

A:由于多次匿名函數(shù)注冊監(jiān)聽了同一事件。所以建議在每次調(diào)用 on 方法監(jiān)聽事件之前,先調(diào)用 off 方法關閉之前的事件監(jiān)聽。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號