AWS IoT MQTT Android 简单连接
什么是AWS IoT
AWS IoT 能够通过 MQTT 和 HTTP 在连接 Internet 的设备 (如传感器、执行器、嵌入式设备或智能设备) 和 AWS 云之间实现安全的双向通信。
背景
最近负责公司的海外业务的报警需求需要用到MQTT, 所以用的是亚马逊的服务。后端的同事告诉我直接用证书以及密钥进行MQTT连接。一开始按官网提供的的例子[GitHub - awslabs/aws-sdk-android-samples:] 去翻阅没找到适合我的方案。
最终同事建议我去参考案例 [BasicConnect aws-iot-device-sdk-java-v2 · GitHub]实现。下面是它的介绍
翻译如下:
此示例使用使用互TLS (mTLS)的证书和密钥文件创建一个MQTT连接。设备在启动时使用证书和密钥文件连接到服务器,然后断开连接。此示例仅供通过证书和密钥文件进行连接时参考。使用证书和密钥文件对是验证连接到AWS IoT Core的最简单、最直接的方法。
简单例子
1、导入依赖
implementation 'software.amazon.awssdk.iotdevicesdk:aws-iot-device-sdk-android:1.20.6'
2、传入证书密钥文件或者字符串
如何获取密钥证书需要跟后端同事沟通了,现在假设你已经拿到证书以及密钥
private lateinit var connection: MqttClientConnection
val callback: MqttClientConnectionEvents = object : MqttClientConnectionEvents {
override fun onConnectionInterrupted(p0: Int) {
LogUtil.d(TAG, "onConnectionInterrupted: ")
}
override fun onConnectionResumed(p0: Boolean) {
LogUtil.d(TAG, "onConnectionResumed: ")
}
override fun onConnectionSuccess(data: OnConnectionSuccessReturn?) {
super.onConnectionSuccess(data)
LogUtil.d(TAG, "onConnectionSuccess: ")
subscribeAllTopic() //连接成功之后,可以订阅主题,发布主题
}
override fun onConnectionFailure(data: OnConnectionFailureReturn?) {
super.onConnectionFailure(data)
LogUtil.d(TAG, "onConnectionFailure: ")
}
override fun onConnectionClosed(data: OnConnectionClosedReturn?) {
super.onConnectionClosed(data)
LogUtil.d(TAG, "onConnectionClosed: ")
}
}
fun start(callback: MqttClientConnectionEvents) {
try {
isInit = true
val builder = AwsIotMqttConnectionBuilder
.newMtlsBuilder(certificateStr, privateKeyStr) //传入的是证书以及密钥内容
.withConnectionEventCallbacks(callback)
.withClientId(LocalInfo.clientMac)
.withEndpoint(clientEndpoint)
.withPort(8883)
.withCleanSession(true)
.withKeepAliveSecs(60)
.withProtocolOperationTimeoutMs(60000)
.withWill(getLiveMessage(false))
val connection: MqttClientConnection = builder.build()
builder.close()
connection.connect()
} catch (ex: CrtRuntimeException) {
isInit = false
println("Exception encountered: $ex")
}
}
//订阅主题
private fun subscribe(
topic: String,
qos: QualityOfService = QualityOfService.AT_LEAST_ONCE,
callback: (MqttMessage) -> Unit
) {
connection.subscribe(topic, qos) { message: MqttMessage ->
//订阅信息处理回调,如果需要一些UI操作最好是切换到主线程
}
}
//发布主题
private fun publish(
topic: String,
payload: String,
qos: QualityOfService = QualityOfService.AT_LEAST_ONCE
) {
connection.publish(
MqttMessage(
topic, payload.toByteArray(), qos, false
)
)
}
如果你看到了这里,觉得文章写得不错就给个赞呗?
更多Android进阶指南 可以扫码 解锁更多Android进阶资料
敲代码不易,关注一下吧。ღ( ´・ᴗ・` )