首页 > 其他分享 >教你2种方法,将iOS设备通过MQTT协议连接到华为云物联网平台

教你2种方法,将iOS设备通过MQTT协议连接到华为云物联网平台

时间:2023-09-12 15:11:24浏览次数:55  
标签:异步 iOS 华为 MQTT 云物 Swift 连接 sdk

本文分享自华为云社区《如何将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,多谢。

 

点击关注,第一时间了解华为云新鲜技术~

 

标签:异步,iOS,华为,MQTT,云物,Swift,连接,sdk
From: https://www.cnblogs.com/huaweiyun/p/17696245.html

相关文章

  • 苹果iOS 17正式版来了:iPhone X/8系列等机型无缘
    据媒体报道,苹果会在9月13日凌晨1点发布iPhone15系列新品,该机出厂预装iOS17正式版系统。在iPhone15系列之后,苹果会向老机型推送iOS17正式版更新。据爆料,苹果将会在9月18日推送iOS17正式版,跟iPhone15发布会间隔约一周时间。根据官方公布的名单,iPhoneX、iPhone8、iPhone8......
  • 皕杰报表(BIOS Report)中设置序号的方法之四
    我们分享了皕杰报表设置序号的三种方法,ds.#0,&cellx和row(),有时用这些方法设置序号并不能满足我们的需求,需要配以显示值的使用,使得序号分类更加清楚。我们看下面的主从表,是如何处理序号的显示值的。预览如下:现在我们加上序号,解决方案如下:1、A2单元格写=&B2,A2单元格属性-左主格为B2(这......
  • Ajax 和 axios 调用接口的使用
     一、前提了解:服务器:负责存放和对外提供资源的电脑‘请求-处理-响应’客户端:在上网过程中,负责获取和消费资源的电脑URL:统一资源定位符,协议域名端口号资源的请求方式: 1.get:获取服务器资源 2.post:向服务器提交数据 3.其他:put修改、delete删除、fetch批量二、Ajax的......
  • 直播流IOS无法播放问题排查
     问题:IOS手机无法播放flv协议视频,改为hls协议后,IOS播放H264视频编码格式正常,但是H265无法播放解决:使用花椒播放器,在IOS上通过Webassembly编解码,播放flv协议视频解决此问题。视频插件:花椒播放器https://github.com/ErosZy/WXInlinePlayer示例地址:https://eroszy.github......
  • Cisco Catalyst 8000 边缘平台系列 IOS XE 17.12.01 发布
    CiscoCatalyst8000SeriesEdgePlatforms,IOSXEReleaseDublin-17.12.01aEDCiscoCatalyst8000边缘平台系列请访问原文链接:https://sysin.org/blog/cisco-catalyst-8000/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgCiscoCatalyst8000:随心所欲访问位于......
  • C++ #include <iostream> 和 #include <iostream.h>的区别
    #include和#include<iostream.h>区别1.#include是C++调用头文件的使用方式,这种情况下需要加上usingnamespacestd;指定命名空间2.#include<iostream.h>C++保留了C的这种写法,这种不需要增加命名空间指定#include<stdio.h>和#include"stdio.h"区别-#include<stdio......
  • 连接MQTT服务器
    连接MQTT服务器当我们的Esp8266开发板连接到网络后,我们就需要测试验证以下Esp8266连接到MQTT服务器上,让Esp8266作为一个发布者,间隔1s向服务器发送一条信息。1.导入库函数需要连接到MQTT服务器,我们需要使用PubSubClient库函数,因此首先添加到工程中2.编写代码MQTT服务器的话可......
  • iOS App上架新规解析:如何进行App备案
    摘要本文将以iOS技术博主的身份,解析iOSApp上架新规中的App备案要求。通过探讨备案对开发者和市场的影响,介绍备案流程和所需材料,帮助开发者了解如何进行App备案。引言近年来,移动应用市场蓬勃发展,但同时也存在着不合规和违法现象。为了确保行业长期健康发展,工信部发布了APP备案新规......
  • Axios 的 put 请求实践:实现前端与后端的数据同步
    在前端开发中,我们经常需要与后端服务器进行数据交互。其中,PUT 请求是一种常用的方法,用于向服务器发送更新或修改数据的请求。通过发送PUT请求,我们可以更新服务器上的资源状态。Axios是一个流行的JavaScript库,用于在浏览器和 Node.js 中进行 HTTP 请求。它提供了简单易用......
  • 关于 axios 第一次请求,headers 无法获取到token,需要刷新后才可获取到的解决方案
    constinstance=axios.create({//baseURL:"http://175.30.32.3:48080",timeout:120000,headers:{Authorization:'Bearer'+getToken(),'Content-Type':'application/json;charset=UTF-8'},//开始是全局添加的......