SwiftでiOSからAWS IoTに接続してみる
スマートホーム環境をある程度整えたけど、最初のActionがGoogle Assistant or Slack しかなかったので、iOSからもポチッとやりたい。ということで iOS の勉強をちょっとずつ始めることにした。
というわけで、まずはAWSの公式サンプルを使ってiOSからAWS IoTに接続してみる。
使ったもの (サンプル)
- aws-sdk-ios-samples (/IoT-Sample/Swift/)
https://github.com/awslabs/aws-sdk-ios-samples/tree/master/IoT-Sample/Swift
サンプルで出来ること
このサンプルは、iOSからAWS IoTに接続して、Publish、Subscribeを行うことができるもの。1クライアントだけだとPub/Subしてもよくわからないので、2クライアント用意してリアルタイムで値を送受信できているのを確認すると良いみたい。もしくは、iOSからはPublishのみで、AWS IoTのコンソールに入っているMQTT Clientを使って受信確認してみるとか。
AWS IoT への接続までにアプリがやってること
- Cognito Identity Pool の unauthenticated identities についている権限から AWS IoT の createCertificateFromCsr APIを叩いて証明書・秘密鍵を生成
- 作成した証明書に事前に作成していた IoT Policy をアタッチ
- MQTTSで接続。準備完了
こんな感じでAWS IoT に接続しているようで、ユーザーは特に Credential などを事前に発行しておく必要はない。普通に AWS を使っている人は大体 Credential を発行してー、とやりがちだけど、 Mobile の場合は Cognito を使うのが一般的なんだろうか。
Application起動までにやること
README にも書いてあるけど、ざっくりと書くと以下のようなことをやっておく。
- Cognito で Identity Pool 作る
- AWS IoT で Policy を作っておく
- CocoaPodsのインストール (pod install も忘れずに)
- Constant.swift の編集 (リージョンとか、Identity Pool Idとか、 Policy Nameとか)
実際の動作
アプリは TableViewController でできていて、 Publish は アプリ上のSliderUIを動かすとその値(0~100?)が送られる様子。 QoS1 なので適当にスライダーを動かしてPublishさせるとログにめっちゃ「nothing to republish」とでる。多分PUBACKを受け取った時のメッセージなのかな。
まとめ
とりあえずiOSからPublishできるようになったので、ちょいちょいいじりながらホームハブ的なアプリを作っていこう。
記念すべき Medium の1記事目。ただ、 Medium の Web 画面、めっちゃ重い…。