提供了把Wi-Fi设备配置上家庭路由器以及局域网内已联网设备的发现能力,具体方案包括一键广播配网(P2P)、设备热点配网、蓝牙辅助配网、手机热点配网、设备间相互配网、二维码配网等。本配网SDK主要提供设备发现、设备配网、获取设备端token等能力。
依赖SDK |
概述 |
API 通道 |
提供云端API通道能力,需要完成该SDK的初始化 |
身份认证 |
提供云端API通道身份认证(需要零配发现能力的时候需要该依赖) |
Breeze-biz SDK |
提供蓝牙辅助配网支持,依赖breeze-biz SDK |
引入方式
- Maven仓库地址
// 阿里云仓库地址,包括了阿里云IoT的SDK
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases/"
}
- Gradle依赖
compile ('com.aliyun.alink.linksdk:ilop-devicecenter:1.7.7.1'){
transitive = true
}
// 当您需要蓝牙辅助配网能力,还需添加以下依赖
// compile ('com.aliyun.alink.linksdk:breeze-biz:1.2.0')
- 混淆配置
在proguard-rules.pro文件中,加入以下代码,排除不需要被混淆的类和方法。
-keep public class com.aliyun.alink.business.devicecenter.** {*;}
-keep public class com.aliyun.alink.linksdk.alcs.coap.**{*;}
设备发现
配网SDK提供了局域网内设备发现的能力,可发现的设备如下。
- 已配网设备
- 进入配网模式的待配网设备
- 设备热点待配网设备
- 蓝牙辅助配网待配网设备
- 通过已配设备发现局域网内的待配设备
设备发现相关API,请参见LocalDeviceMgr。
- 启动设备发现。
发现本地的已配网设备、零配发现的待配网设备、符合adh_{pk}_{mac}
格式的设备热点设备或者combo待配设备。发现的待配设备信息可以作为后续设备配网的入参信息。如果您需要过滤发现的设备(如过滤已配网的设备、不支持的设备等),请参见本地发现设备列表信息过滤。
// 开始发现设备
// enumSet是需要使用的防发现方式 EnumSet<DiscoveryType>,请根据需要选择发现方式,并添加对应的依赖
// 第三个参数是获取零配或智能路由器发现的待配设备,请求时需要携带的参数
LocalDeviceMgr.getInstance().startDiscovery(context, enumSet, null, new IDeviceDiscoveryListener() {
@Override
public void onDeviceFound(DiscoveryType discoveryType, List<DeviceInfo> list) {
// 发现的设备类型
// LOCAL_ONLINE_DEVICE 当前和手机在同一局域网已配网在线的设备
// CLOUD_ENROLLEE_DEVICE 零配或智能路由器发现的待配设备
// BLE_ENROLLEE_DEVICE 发现的是蓝牙Wi-Fi双模设备(蓝牙模块广播的subType=2即为双模设备)
// SOFT_AP_DEVICE 发现的设备热点
// BEACON_DEVICE 一键配网发现的待配设备
// 注意:发现蓝牙设备需添加breeze-biz SDK依赖
}
});
- 停止设备发现。
停止发现本地已配网设备和待配网设备。调用该接口会清除已发现设备列表,确保与启动设备发现startDiscovery()
成对调用。
// 停止设备发现
LocalDeviceMgr.getInstance().stopDiscovery();
设备配网
配网设备可以是本地发现的待配设备,也可以是通过扫码等其他途径获取的待配设备。更多配网方式请参见Android App Native开发配网。设备配置添加相关API说明,参见配网服务。
- 设置待配网设备的信息。
// 启用全球配网时,ProvisionConfigParams的设置只需在配网前调用一次即可,无需每次配网前都调用
ProvisionConfigParams params = new ProvisionConfigParams();
params.enableGlobalCloudToken = true;
ProvisionConfigCenter.getInstance().setProvisionConfiguration(params);
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = "xx"; // 商家后台注册的productKey,不可为空
deviceInfo.deviceName = "xxx";// 设备名,可为空
deviceInfo.productId = "xxx";// 产品ID,蓝牙辅助配网时必配
deviceInfo.id= "xxx";// 设备热点的ID,在发现热点设备返回到App时会携带这个字段
// 设备热点配网:ForceAliLinkTypeSoftAP
// 蓝牙辅助配网:ForceAliLinkTypeBLE
// 二维码配网:ForceAliLinkTypeQR
// 手机热点配网:ForceAliLinkTypePhoneAP
// 一键配网:ForceAliLinkTypeBroadcast
// 零配:ForceAliLinkTypeZeroAP
deviceInfo.linkType = "ForceAliLinkTypeNone"; // 默认为一键配网
// 如果当前App需要全球使用,且涉及到切换账号的数据中心,配网SDK可以按照以下设置传递数据中心的信息
// getStoredShortRegionId接口由IoTSmart所在的SDK提供
RegionInfo regionInfo = new RegionInfo();
regionInfo.shortRegionId = Integer.parseInt(RegionManager.getStoredShortRegionId());
deviceInfo.regionInfo = regionInfo;
//设置待添加设备的基本信息
AddDeviceBiz.getInstance().setDevice(deviceinfo);
可能用到的其他参照信息如下。
- 开始设备配网。
调用startAddDevice
接口进入配网流程。
说明 配网过程需要位置权限和位置服务(GPS),在调用开始配网接口之前,请确保App已获得相关权限。如使用手机热点方式配网,App还需额外获得WRITE_SETTINGS的权限。
// 开始添加设备
AddDeviceBiz.getInstance().startAddDevice(context, new IAddDeviceListener(){
@Override
public void onPreCheck(boolean b, DCErrorCode dcErrorCode) {
// 参数检测回调
}
@Override
public void onProvisionPrepare(int prepareType) {
if (prepareType == 1) {
// 一键配网、蓝牙辅助配网、设备热点配网、二维码配网、手机热点配网会走到prepareType==1的流程
// 可以交互引导用户输入Wi-Fi的ssid、password信息,获取到ssid、password信息
// 之后调用toggleProvision接口开始配网,参见第三步“输入账号密码”
} else if (prepareType == 2) {
// 手机热点配网时会走到该流程,收到这个回调后,先引导用户开启指定热点,例如ssid为aha,password为12345678
// 确保热点开启后,可以交互引导用户输入Wi-Fi的ssid、password信息,获取到ssid、password信息
// 之后调用toggleProvision接口开始配网,参见第三步“输入账号密码”
}
}
@Override
public void onProvisioning() {
// 配网中
}
@Override
public void onProvisionStatus(ProvisionStatus provisionStatus) {
// 二维码配网
// provisionStatus=ProvisionStatus.QR_PROVISION_READY表示二维码ready了
// ProvisionStatus.QR_PROVISION_READY.message() 获取二维码内容
// 注意:返回二维码时已开启监听设备是否已配网成功的通告,并开始计时,UI端应提示用户尽快扫码,
// 如果在指定时间配网超时了,重新调用开始配网流程并刷新二维码。
// 设备热点配网
// 只有需要提示用户需要手动连接设备热点或者恢复Wi-Fi连接的场景才会回调,
// 比如android 10,或者非android 10发现或连接设备热点失败。
// provisionStatus=ProvisionStatus.SAP_NEED_USER_TO_CONNECT_DEVICE_AP 表示需要用户手动连接设备热点,
// provisionStatus=ProvisionStatus.SAP_NEED_USER_TO_RECOVER_WIFI 表示需要用户手动恢复到配网之前的Wi-Fi,
// 针对android 10不支持的场景,可以根据这两个事件增加交互,让用户处理。
}
@Override
public void onProvisionedResult(boolean b, DeviceInfo deviceInfo, DCErrorCode errorCode) {
// 处理配网结果,如果配网成功后包含token,请使用配网成功带的token做绑定。
}
});
配网回调接口,请参见 IAddDeviceListener。
- 输入账号密码。
在收到onProvisionPrepare
回调后,引导App用户输入Wi-Fi的ssid和password,并调用此方法传入ssid、password、timeout信息启动配网。
String ssid = "ssid"; // 手机热点配网的时候注意 要先获取ssid,然后再开启热点,否则无法正确获取到ssid
String password = "xxxxxxxx";
int timeout = 60; //单位秒,目前最短只能设置为60秒
AddDeviceBiz.getInstance().toggleProvision(ssid, password, timeout);
- 停止配网。
// 停止配网
AddDeviceBiz.getInstance().stopAddDevice();
获取设备绑定Token
Wi-Fi设备或以太网设备绑定时,除了需要productKey、deviceName,还需要设备端的token。以下提供从设备端获取绑定token的方法。
说明 以太网设备还需要先获取到设备的productKey、deviceName,可以使用startDiscovery
接口去获取。
// 获取设备绑定的token
LocalDeviceMgr.getInstance().getDeviceToken(context, productKey, deviceName, 60*1000, 5*1000, new IOnDeviceTokenGetListener() {
@Override
public void onSuccess(String token) {
// TODO bind
}
@Override
public void onFail(String reason) {
}
});
在插件中使用配网能力
如果需要在插件中使用配网能力,您需要向BoneMobile容器中注册配网API。请您在插件加载前,调用如下注册代码。
说明 插件配网面板不支持蓝牙辅助配网,且设备热点配网不支持Android10及以上版本。
BonePluginRegistry.register("BoneAddDeviceBiz",BoneAddDeviceBiz.class);
BonePluginRegistry.register("BoneLocalDeviceMgr",BoneLocalDeviceMgr.class);
BonePluginRegistry.register("BoneHotspotHelper",BoneHotspotHelper.class);
在文档使用中是否遇到以下问题
更多建议
匿名提交