649
iPhone_iPad_Mac_手機_平板_蘋果apple
JAVA-SDK使用(MQTT)__SDK使用參考_設備端接入手冊_阿裏雲物聯網套件-阿裏雲
本文以JAVA版SDK為例,演示如何讓設備通過MQTT協議連接到阿裏雲IoT,並通過PUB/SUB實現一個簡單的M2M通信。
使用示例
- 第一步: 首先通過設備認證,獲取到對應的配置信息.
- 第二步: 通過獲取到的公鑰證書來配置TLS/SSL,與阿裏雲進行連接.
- 第三步: 通過MQTT協議與阿裏雲進行設備通信.
請使用JDK7來跑DEMO程序.運行DEMO之前,請首先修改
com.alibaba.iot.demo.util.Config
類,將對應的配置信息填寫完整。
第一步
獲取證書,利用IotAuthUtil
類來處理. 具體的流程參考設備認證的流程.
//Step 1: 獲取配置信息
System.out.println("開始獲取配置信息!");
if (Config.deviceName.equals(Config.deviceName2))
{
System.out.println("設備1和設備2不能相同!");
return;
}
Map<String, String> result = IotAuthUtil.auth(Config.deviceName, Config.deviceSecret);
//1.1 得到公鑰的BASE64編碼以後的字符串數據
String pubKey = result.get("pubkey");
//1.2 得到連接的目的地IP與端口
String servers = result.get("servers");
String targetServer = servers.substring(0, servers.indexOf("|"));
//1.3 得到BASE64字符串解碼以後的公鑰證書文件
byte[] pubKeyByteContent = Base64Util.decode(pubKey);
//1.4 得到設備的ID
String deviceId1 = result.get("deviceId");
result = IotAuthUtil.auth(Config.deviceName2, Config.deviceSecret2);
String deviceId2 = result.get("deviceId");
System.out.println("獲取配置成功! 接入地址: " + targetServer);
第二步
配置TLS/SSL信息.
InputStream is = new ByteArrayInputStream(pubKeyByteContent);
InputStream caInput = new BufferedInputStream(is);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate ca = null;
try {
ca = cf.generateCertificate(caInput);
} catch (CertificateException e) {
e.printStackTrace();
} finally {
caInput.close();
}
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
SSLContext context = SSLContext.getInstance("TLSV1.2");
context.init(null, tmf.getTrustManagers(), null);
SSLSocketFactory socketFactory = context.getSocketFactory();
第三步
與阿裏雲建立TLS/SSL連接.
需要注意的是在配置MQTT連接時, Connect協議當中 clientId
屬性值為 productKey:deviceId
username
屬性值為 ToUpperCase(MD5_32(productKey+productSecret+deviceId+deviceSecret))
這樣以便阿裏雲對當前連接的有效性進行驗證.
final String topic = Config.topic;
String broker = "ssl://" + targetServer;
//客戶端ID格式: productKey + deviceId.
String clientId = Config.productKey + ":" + deviceId;
MemoryPersistence persistence = new MemoryPersistence();
SSLSocketFactory socketFactory = createSSLSocket(stest);
final MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setMqttVersion(4);// MQTT 3.1.1
connOpts.setSocketFactory(socketFactory);
String signUserName = signUserName(deviceId);
connOpts.setUserName(signUserName);
connOpts.setKeepAliveInterval(65);
System.out.println("進行連接, 目的地: " + broker);
sampleClient.connect(connOpts);
第四步
進行消息Publish.
String content = "Message From Device:" + Config.deviceName2;
MqttMessage message = new MqttMessage(content.getBytes());
message.setQos(1);
sampleClient.publish(topic, message);
System.out.println("消息發布成功!");
備注:在第四步進行數據通信時需要創建Topic,請在控製台將設備添加授權。如果多個設備使用同一個Topic即可實現M2M通信。
最後更新:2016-07-26 18:54:03
上一篇:
C-SDK使用(其它)__SDK使用參考_設備端接入手冊_阿裏雲物聯網套件-阿裏雲
下一篇:
JAVA-SDK使用(CCP)__SDK使用參考_設備端接入手冊_阿裏雲物聯網套件-阿裏雲
對象存儲OSS控製台—總體概覽頁__視頻專區_對象存儲 OSS-阿裏雲
雲服務器 ECS 自動快照隨磁盤釋放
項目空間的權限管理__安全相關語句匯總_安全指南_大數據計算服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
unsupportthechannelHTTP__錯誤說明_API 網關-阿裏雲
實例管理__使用表格存儲控製台_快速入門_表格存儲-阿裏雲
SDK接口簡介__數據訂閱_用戶指南_數據傳輸-阿裏雲
渠道專屬API接口文檔__渠道商問題_渠道合作夥伴_合作夥伴-阿裏雲
查詢域名詳情__域名相關接口_API_API 網關-阿裏雲
命令輸出格式__命令行結構和參數_用戶指南_命令行工具 CLI-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲