教你2種方法,將iOS裝置通過MQTT協定連線到華為雲物聯網平臺

2023-09-12 18:01:50

本文分享自華為雲社群《如何將iOS裝置通過MQTT協定連線到華為雲物聯網平臺: Flutter和Swift兩種方法》,作者: 張儉 。

前言

當今時代,物聯網技術正逐步改變我們的生活和工作方式。華為雲IoTDA服務,為開發者提供了一個開放、穩定、可靠的基礎設施,以便實現裝置與雲端的無縫連線和雙向通訊。本文講述如何使用Flutter和Swift兩種開發語言連線到華為雲物聯網平臺。

準備工作

需要完成如下兩個步驟

  • 註冊並開通了華為雲IoTDA服務
  • 註冊了一個華為雲IoTDA裝置,獲取了DeviceId(裝置Id)和Secret(裝置金鑰)

此外,確保你熟悉MQTT協定的基本工作原理。

Flutter方式

Flutter是一個由Google開發的開源UI軟體開發套件,用於開發跨平臺應用。

新增必要的依賴

在pubspec.yaml新增依賴,可以從Github倉庫中獲取最新的commitId

dependencies:

huaweicloud_iot_device_sdk:

git:

url: https://github.com/Shoothzj/huaweicloud-iot-device-sdk-dart.git

ref: latest commitId

dart sdk的最佳實踐

  • 並行方面:dart具備內建的async和await機制,使得它與其他語言如Java或Python不同,不需要分別提供非同步和同步的兩種方法。而且一旦涉及到網路程式設計等,也只能通過非同步的方式。
  • 異常方面:SDK可以自定義一個異常型別。進行異常的丟擲和解析,非同步場景也能簡單地利用這個機制

進行裝置的連線和上報訊息

import 'dart:io';

import 'package:huaweicloud_iot_device_sdk/src/device_client.dart';

void main(List<String> arguments) async {

var deviceClient = DeviceClient(

host: "iot-mqtts.cn-north-4.myhuaweicloud.com",

port: 8883,

deviceId: deviceId,

secret: deviceSecret,

disableHmacSha256Verify: true,

useTls: true,

disableTlsVerify: true);

await deviceClient.connect();

await deviceClient.reportDeviceMessage(content: "ddddd");

}

在上述程式碼中, 我們首先匯入了必要的庫, 然後初始化**DeviceClient**物件, 並連線到華為雲IoTDA服務。最後, 我們傳送一個簡單的訊息來驗證連線是否成功。

Swift方式

Swift是Apple用於iOS、macOS、watchOS、tvOS應用開發的強大語言。

新增必要的依賴

在Package.Swift中新增huaweicloud-iot-device-sdk-swift作為依賴項,可以從Github倉庫中獲取最新的commitId

let package = Package(

name: "YourProject",

platforms: [

.iOS(.v13),

.macOS(.v13),

.tvOS(.v13),

],

dependencies: [

.package(url: "https://github.com/your-username/your-package-name.git", .revision("latest commitId")),

],

targets: [

.target(

name: "YourProject",

dependencies: ["HuaweiCloudIoTDevice"]),

]

)

swift sdk的最佳實踐

  • 並行方面:在Swift中,async/await 是一個相對較新的特性,它在 Swift 5.5 版本中才被引入。因此,你會發現很多現有的 Swift SDK 和庫仍然依賴於回撥(callback)模式來處理非同步操作。在回撥模式中,你通常會將一個函數(閉包)傳遞給一個非同步函數,該非同步函數在完成其操作後呼叫這個函數,而不是返回一個值。這樣可以非阻塞地處理非同步操作,但它也可以導致「回撥地獄」(callback hell),尤其是在多個非同步操作需要串聯時。
  • 異常方面:Swift也支援例外處理來管理執行時錯誤。你可以定義自己的異常型別,通過 throw 丟擲異常,並使用 do-catch 語句來捕捉和處理異常。

進行裝置的連線和上報訊息

let deviceClient = DeviceClient(host: "iot-mqtts.cn-north-4.myhuaweicloud.com", port: 1883, deviceId: "b7cfa256-49df-4d2f-81c3-76697c69c03c_aaaa", secret: "18209205026", disableHmacSha256Verify: true)

let connectResult: Bool = try deviceClient.connect()

wait(for: [XCTestExpectation(description: "wait for connect")], timeout: 10)

try deviceClient.reportDeviceMessage(content: "hahaha")

wait(for: [XCTestExpectation(description: "wait for report message")], timeout: 10)

在上述程式碼中, 我們首先匯入了必要的庫, 然後初始化**DeviceClient**物件, 並連線到華為雲IoTDA服務。最後, 我們傳送一個簡單的訊息來驗證連線是否成功。

總結

通過以上步驟,你已經學會了如何使用Flutter和Swift兩種方法將iOS裝置連線到華為雲物聯網平臺。現在,您不僅能夠連線裝置,還能實現基本的訊息傳送功能,為後續更復雜的應用開發打下了基礎。

目前兩個基礎sdk還在開發中,如果您有什麼需求/疑問,可以在Github上的專案中提交issue,多謝。

 

點選關注,第一時間瞭解華為雲新鮮技術~