iPhoneの位置管理をAWS上でできないかと調査していると、シンプルで軽量なメッセージをやり取りできるプロトコルであるMQTTで経度・緯度を取得するのが良いのではないかと思いました。
今回は経度・緯度の取得の前にiPhoneアプリとAWS IoTでMQTTを行うところまでを試してみました。
いくつかサンプルコードが見つかりましたが、比較的最近でもメンテがされていそうなCocoaMQTT https://github.com/emqx/CocoaMQTT をベースにしました。
スポンサーリンク
目次
完成時の動画
環境
iPhone8 iOS:15.2
Xcode 13.2.1
AWS IoT
ソースコード
以下のGitHubに記載
https://github.com/S-S-T-Y/awsMATTsample
AWS側の設定
モノの作成
AWS IoTの「モノ」をiPhone-locationという名前で作成します。
証明書ダウンロード
証明書を作成してダウンロードします。
ポリシー設定
最初なので、Action、Resourceに制限をかけていないですが、動作確認ができたら必要な分だけに制限した方が良いかと思います。
p12ファイル作成
先ほどダウンロードした証明書、秘密鍵、ルート証明書からp12ファイルを作成します。
作成時のパスワードも後で使うので控えておきます。
openssl pkcs12 -export -clcerts -in XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-certificate.pem.crt -inkey XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-private.pem.key -certfile AmazonRootCA1.pem -out client-keycert.p12
エンドポイントの確認
設定のデバイスデータエンドポイントに表示されるエンドポイントを控えておきます。

iPhoneアプリ側の設定
AWS IoTのホスト
先ほど控えたエンドポイントを以下に設定します。
let defaultHost = "XXXXXXXXXXXXXXX-ats.iot.ap-northeast-1.amazonaws.com"
MQTTの設定
clientIDにはAWS IoTの「モノ」の名前とします。
今回はiPhone-locationとなります。
let clientID = "iPhone-location"
client-keycertのcertPasswordはp12ファイル作成時に設定したパスワードを入力します。
let clientCertArray = getClientCertFromP12File(certName: "client-keycert", certPassword: "password") //certPassword is your password when you created p12 file
Puslish
MQTT設定で指定したモノに対して、「iphone/topic」というトピック名でメッセージを発行します。
@IBAction func sendMessage(_ sender: Any) {
print("send Message")
let message = "{\"message\":\"hello world!\"}"
let publishProperties = MqttPublishProperties()
publishProperties.contentType = "JSON"
mqtt!.publish("iphone/topic", withString: message, qos: .qos1)
}
Subscribe
AWS IoTから「aws/iot」というトピック名で発行されたメッセージを購読します。
mqtt.subscribe("aws/iot", qos: CocoaMQTTQoS.qos1)
まとめ
iPhoneアプリとAWS IoTでMQTT通信を行うシンプルな方法を紹介しました。
シンプルとは言え、AWS側、iPhone側にそれなりの設定は必要でした。
ただ通信できるところまでできてしまえば後は送る情報を変えるだけで色々なことができそうです。
今後は当初の思惑だったiPhoneの位置をAWS上で管理することを試してみたいと思います。
参考サイト
AWS IoT https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/mqtt.html
CocoaMQTT https://github.com/emqx/CocoaMQTT
MQTTの仕様 http://devcenter.magellanic-clouds.com/learning/mqtt-spec.html
参考文献
Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につくhttps://amzn.to/3re442k