写点什么

Amazon IoT 安卓 SDK 中国区实践

  • 2019-11-06
  • 本文字数:2255 字

    阅读完需:约 7 分钟

Amazon IoT 安卓SDK 中国区实践

简介

物联网(IOT)是现在非常火热的一个概念。那么怎么样利用 AWS 提供的 IoT 服务,快速在自己的安卓智能设备上搭建起 IoT 的消息推送和订阅呢?


本文将分两部分为你解读:


1)如何动态生成和绑定设备证书


2)如何利用 MQTT 协议接入 Amazon IoT 平台

服务简介

AWS IoT 平台


AWS IoT 是一种托管的云平台,使互联设备可以轻松安全地与云应用程序及其他设备交互。AWS IoT 可以支持数十亿台设备和数万亿条消息,并且可以对这些消息进行处理并将其安全可靠地路由至 AWS 终端节点和其他设备。借助 AWS IoT,您的应用程序可以随时跟踪您的所有设备并与其通信,即使这些设备未处于连接状态也不例外。


Amazon Cognito


Cognito Identity 可让您轻松实现联合身份,您可以让用户通过 Amazon, OpenID, SAML 或者自定义的身份认证系统进行认证。匿名或认证登录后,IoT 设备被赋予临时性受限权限凭证,可以利用此凭证访问 AWS 资源。

过程介绍

  1. 获取连接 IoT 的权限证书



1)通过安装在安卓设备上的 SDK 连接 Amazon Cognito,认证用户(本文示例将采用匿名模式),并且获取临时权限的 Access Key 和 Secret Key。


2)使用临时权限向 AWS IoT 发起创建证书请求,激活证书并且下载。


3)将证书加密存储为 Keystore 在设备上,用以认证之后的 IoT 请求。Android Keystore 保护你存储在设备上的证书,让它不容易被它人破解和提取。


  1. 通过 MQTT 协议连接 AWS IoT,并订阅和推送消息。



1)连接设备与 AWS IoT,使用 Keystore 来通过认证


2)与 AWS IoT 的设备网关交互来订阅和推送消息


3)通过规则引擎还可以过滤消息,并调度 AWS 各种服务

操作指南

  1. 配置环境


1)下载并安装 Android Studio


2)下载样例代码https://github.com/awslabs/aws-sdk-android-samples/


3)在 Android Studio 中,创建导入项目,源指定为样例代码中的 AndroidPubSub 文件夹


4)修改 build.gradle 文件,引入支持中国区服务的 Android SDK 版本(大于等于 2.6.7)。


替换


Java


dependencies {
compile 'com.amazonaws:aws-android-sdk-iot:2.2.+'
}

dependencies {
compile 'com.amazonaws:aws-android-sdk-iot:2.6.7'
}
复制代码


  1. 配置 Amazon Cognito


  1. 在 console 上打开 Cognito 服务,创建新的身份池,启用未经验证的身份的访问权限,点击创建池。在下一页点击允许。



  1. 记录下身份池 ID



  1. console 中点击进入 IAM,在角色中找到 Cognito_xxxxUnauth_Role (本例中为 Cognito_android_iot_exampleUnauth_Role),加入一条新的内联策略。


Java


{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:AttachPrincipalPolicy",
"iot:CreateKeysAndCertificate"
],
"Resource": [
"*"
]
}
]
}
复制代码


  1. 配置 AWS IoT


  1. 在 console 中进入 AWS IoT 服务,创建一个新的事物。点击新创建的事物,左边栏点击交互,记录 Rest API 的终端节点




  1. 在左侧边栏,点击安全=》策略,创建一个新的策略


输入并记录下策略名称 android_iot_example_policy


点击高级模式输入:


Java


{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Subscribe",
"iot:Connect",
"iot:Receive"
],
"Resource": "*"
}
]
}
复制代码


更多策略请见这里


  1. 找到文件 PubSubActivity,更新代码配置



Java


// rest API 终端节点private static final String CUSTOMER_SPECIFIC_ENDPOINT = "xxxxxxx.iot.cn-north-1.amazonaws.com.cn";// Cognito身份池IDprivate static final String COGNITO_POOL_ID = "cn-north-1:xxxxxxxx";// 策略名称
private static final String AWS_IOT_POLICY_NAME = "android_iot_example_policy";// Region填写CN_NORTH_1private static final Regions MY_REGION = Regions.CN_NORTH_1;// keystore存储名字private static final String KEYSTORE_NAME = "yourkeystorename";// keystore密码private static final String KEYSTORE_PASSWORD = "yourpassword";// 证书别名private static final String CERTIFICATE_ID = "default";
复制代码


  1. 测试订阅和推送


  1. 在 android studio 中运行项目 AndroidPubSub 项目。点击界面上的 Connect 按钮,等待 Status 变为“Connected”。在 topic name 处输入话题名称“to_android_device”,并点击 SUBSCRIBE 按钮。



  1. 打开 AWS 控制台,进入 IoT 服务。点击左侧栏“测试”,点击生成客户端 ID,并点击连接。



在订阅主题中输入“to_console”,并点击订阅主题按钮



3)测试从安卓设备发送消息到控制台客户端


在 Topic 中输入“to_console”,Message 中输入“hello, console”,点击 PUBLISH 按钮



在控制台确认收到消息



4)从控制台客户端发送消息至安卓设备


在控制台点击“发布消息至一个主题”,在主题中输入“to_android_device”,内容输入“Hello,Android device”,点击发布到主题按钮



在安卓设备确认收到的消息


更多信息

在本文中,我们使用了 Cognito 的匿名模式来做身份认证。在生产中我们还可以使用 Cognito 的联合认证进行身份认证。



AWS IoT 服务的规则功能使您的设备能够与 AWS 服务交互。基于 MQTT 主题流分析规则并执行操作。


作者介绍:



任庆杰,AWS 解决方案架构师。负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内和全球的应用和推广。在加入 AWS 前,拥有超过 7 年的软件开发和 IT 项目管理经验。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/amazon-iot-android-sdk-china-region-practice/


2019-11-06 08:002618

评论

发布
暂无评论
发现更多内容

爱好历史的程序员,不容错过!

不脱发的程序猿

程序员 程序人生 4月日更 全历史

释放千行百业数据价值,华为云DAYU有一套

华为云开发者联盟

大数据 数据湖 华为云 数据价值 dayu

如何实现屏幕共享时的多人实时标注?

拍乐云Pano

windows Electron RTC

在多人音视频聊天中插入现场直播

anyRTC开发者

android 大前端 音视频 WebRTC RTC

2021技术展望|开源十年,WebRTC 的现状与未来

声网

开源 WebRTC 2021年展望 RTE 2021技术

区块链BaaS服务平台开发,助推中小企业快速落地

13828808769

区块链+ #区块链#

想快速重构智慧园区5A系统,这份方案推荐给你

华为云开发者联盟

系统 智慧园区 HDC.Cloud 2021 端边云协同架构 南向系统

2021 技术展望 | 走向未来的实时生成技术

声网

RTC 2021年展望 RTE 2021技术

Javascript执行机制-事件循环

Sakura

4月日更

“区块链+”司法合约,电子认证不造假

电微13828808271

区块链+

文字识别:关键信息提取的3种探索方法

华为云开发者联盟

深度学习 文字识别 图结构 关键信息提取 栅格

关于Go语言,你不得不知的并发模式!

博文视点Broadview

如何只用一个小时定制一个行业AI 模型?

华为云开发者联盟

自然语言处理 AI 华为云 hdc ModelArts Pro

EGG NETWORK公链阿凡提以“完全开放式自治”的唯一标准搭建New-DeFi链上生态EFTalk

币圈那点事

国人开源的运维监控系统——WGCLOUD

王逅逅

开源 运维 Grafana Prometheus zabbix

事务隔离级别实战学习

U2647

事务隔离级别 事务 4月日更

2021 技术展望 | 弱网下的极限实时视频通信

声网

RTC 2021年展望 RTE 2021技术

构建基于Spring Cloud向Service Mesh框架迁移的解决方案及思路

xcbeyond

架构 云原生 Service Mesh 解决方案 引航计划

2021 技术展望 | AV1 在 RTC 应用实践中的现状与展望

声网

RTC 2021年展望 RTE 2021技术

Linux scp 命令

一个大红包

4月日更

2021 技术展望 | 实时互动场景下,音频的技术变迁与机遇

声网

音视频 RTC 2021年展望 RTE 2021技术

构建从目标到研发过程的全生命周期管理体验

爱吃小舅的鱼

敏捷开发 研发管理 Jira Atlassian 敏捷开发管理 研发工具

Python OpenCV 图片模糊操作 blur 与 medianBlur

梦想橡皮擦

Python OpenCV 4月日更

集客业务支撑领域标准化产品套件“火麒麟”的配置化能力提升之路

鲸品堂

产品 解决方案 运营商

SumSwap与金色财经共为 首席创新合作大会在上海拉开帷幕

币圈资讯

2021 技术展望 | 2021,5G 将会倒逼传输协议、算法做出更多改进

声网

5G RTC 2021年展望 RTE 2021技术

「开源免费」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之序列号自定义组件(四)

crudapi

Vue crud crudapi 序列号 quasar

“区块链新基建”可否发展可信平台?

电微13828808271

区块链+ 区块链新基建

科技“智”造:智慧工厂这样规划,既高效又节能

一只数据鲸鱼

数据可视化 工业物联网 智慧园区 智慧工厂

云智一体 AI开发模式打造电力行业的智慧化范本

百度大脑

云计算 智能云

从金融到物联网 区块链的落地应用将如何改变世界?

CECBC

区块链

Amazon IoT 安卓SDK 中国区实践_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章