文章目录
产品需要接入物联网,主要面向欧美市场,所以选择使用了亚马逊物联网平台。研究了一阵子做一些总结。
一、前言
本文中是开发的APP控制端(开发语言是Android),来接入AWS IOT平台并且实现消息的订阅和发布。由于能力有限,若有错误的理解请指正。
AWS IOT的官方文档,不得不说文档写的真“详细”啊,看得云里雾里,只能参考互联网。
由于国内使用AWS物联网平台应用不多,关于Android APP的demo更是几乎没有,网上能搜到与之相关最多的是PubSub的Android项目。AWS的官方博客中有一篇文章介绍了相关内容,还有其他一些博主也有一些探究,但由于时间过于久远很多操作都发生了变化,甚至连官方GitHub上的Android PubSub示例也下架了(猜测早期应该是有的),资料实在是匮乏,只能一步一步尝试。
二、准备
在编写APP之前首先要了解一些基础知识,如mqtt协议、IOT设备、事务、策略等等,本文中还使用了AWS IAM、Cognito,也需要做适当了解。
1.使用Android Studio构建App项目
项目下的build.gradle中导入iot使用包,AWS的开发包很多,这里使用的android版的iot开发包,服务器端应该使用java版
implementation 'com.amazonaws:aws-android-sdk-iot:2.73.0'
2.注册AWS账号,需要一张信用卡,国内的也可以,没有什么难度。审核通过后即可开始测试使用。
登录AWS控制台,主要使用的是IOT Core、IAM以及Cognito
在使用IOT Core以及Cognito控制台时需要注意右上角的区域选择,曾经我就犯过在代码里创建资源后在控制台里始终找不到的错误,原因就是区域错了。另外各区域是否都支持用户池、身份池暂时不明,我就直接选择的us-east-1测试。
3.Cognito、IAM概念
从官方文档阅读可以知道AWS IOT Core允许好几种方式来安全接入,比如X.509证书、Cognito身份等等。
从网上搜索的关于之前的PubSub项目的零散代码可以看出:
//创建证书
CreateKeysAndCertificateRequest createKeysAndCertificateRequest =
new CreateKeysAndCertificateRequest();
createKeysAndCertificateRequest.setSetAsActive(true);
final CreateKeysAndCertificateResult createKeysAndCertificateResult;
//调用了refresh方法
createKeysAndCertificateResult =
mIotAndroidClient.createKeysAndCertificate(createKeysAndCertificateRequest);
Log.i(Constants.TAG,
"Cert ID: " +
createKeysAndCertificateResult.getCertificateId() +
" created.");
// store in keystore for use in MQTT client
// saved as alias "default" so a new certificate isn't
// generated each run of this application
Log.d(Constants.TAG,certificateId);
Log.d(Constants.TAG,createKeysAndCertificateResult.getCertificatePem());
Log.d(Constants.TAG,createKeysAndCertificateResult.getKeyPair().getPrivateKey());
AWSIotKeystoreHelper.saveCertificateAndPrivateKey(certificateId,createKeysAndCertificateResult.getCertificatePem(),
createKeysAndCertificateRes