『入る学科間違えた高専生』の日記

プログラミングのコードを書いたりする予定です。あとは日記等。あといつまで高専生やねん

iOSデバイスが増えてきたのでLAN内のデバイスのバッテリー状況を確認するWebアプリを作った

はじめに

iOS端末が増えてきた...

バッテリー状況が確認したいがいちいち端末を引っ張り出してスリープ解除するのが面倒。
ということで一覧を確認するやつを作ろう

リポジトリ

github.com

使用技術

  • Python3
    • Bottle for web framework
    • SQLAlchemy for database o/r mapper
  • Swift
    • Alamofire for http request
    • Silent Push Notification

流れ

  1. 監視したいデバイスclient/LocalBattery 下のアプリをインストール(sandbox)
  2. プッシュ通知を受け取るダイアログを許可する
  3. サーバ側 /token に対して対応するパラメタでPUTメソッドで送信
  4. cron等でPayloadの apns 内を "content-available": 1 だけにする
  5. AppDelegate.swiftapplication:didReceiveRemoteNotification:fetchCompletionHandler が呼ばれるのでバッテリー状況をサーバ側 /receive に対応するPayloadでPOSTする
  6. サーバ側 / にデバイスuuidgroup_by() クエリをして端末ごと最新のものを取得する
  7. templateに流し込む→表示

結果

全端末に対して行っていないのであれなんですが、

f:id:nanashinodonbee:20170623070340p:plain

注意点

アプリがバックグラウンドにないとSilent Push Notificationが受信できないっぽいので常時起動かつバッググラウンドにある状態にする

Bottleのdaemon起動

$ cd /path/to/local-ios-battery/server
$ pip install -r requirements.txt
$ gunicorn battery:app -b 0.0.0.0:8080 -D

最後に

特にいうことないですが、iOSでもアプリが死んでる状態で何らかの処理をさせるようなことができればいいなぁ...

おまけ

Apple Push Notification Service Sample codes