AWS IoT MQTT Android 简单连接

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进阶资料


在这里插入图片描述
敲代码不易,关注一下吧。ღ( ´・ᴗ・` )

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AWS IoT是一种完全托管的云服务,用于将物联网IoT)设备连接到Amazon云平台,实现设备的管理和数据通信。而EC2(Elastic Compute Cloud)是亚马逊AWS云计算服务的一部分,为用户提供可伸缩的虚拟服务器环境。 要实现AWS IoT MQTT设备接入EC2,首先需要将MQTT设备注册到AWS IoT平台。在AWS IoT中,我们可以创建设备证书和密钥,然后将其下载到设备上。设备使用这些证书和密钥来与AWS IoT平台建立安全的连接。 然后,在EC2中,我们需要设置一个运行MQTT Broker的服务器。可以选择使用Mosquitto等开源软件或AWS IoT Core来搭建MQTT Broker。根据实际需求,我们可以选择搭建独立的MQTT Broker服务器,或者在现有的EC2实例中运行。 接下来,我们需要为EC2实例配置安全组规则,以允许设备通过MQTT协议与EC2进行通信。可以为设备定义入站和出站规则,以确保连接的安全性。 完成这些配置后,设备就可以使用其证书和密钥通过MQTT协议与EC2建立连接了。设备可以发布数据到指定的主题(topic),或订阅感兴趣的主题,接收其他设备或EC2发布的消息。 通过AWS IoT MQTT设备接入EC2,可以实现设备和云端之间的实时数据传输和通信。设备可以将传感器数据、状态信息等上传到EC2进行处理和分析,也可以接收来自EC2的指令和控制信息。 总之,AWS IoT MQTT设备接入EC2是一种有效的方式,将物联网设备连接到云计算环境中,实现设备管理和数据交换。同时,它还提供了强大的安全性和灵活性,满足不同场景下的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值