Skip to content

PWA アプリ基盤

対応 Issue: #8 PWA アプリ基盤

役割

スマホ側アプリ。PWA(モバイル Web) として実装し、カメラとは BLE 制御 + WiFi 転送のハイブリッドで通信する。

画面構成

画面内容関連機能
ホーム接続状態・モード・クイック操作状況・設定
ライブMJPEG ライブプレビュー・フレーミングプレビュー
ギャラリー撮影済み画像/動画の一覧・DLプレビュー
設定カメラ設定・接続・WiFi状況・設定
投稿対象選択・キャプション・SNSSNS 投稿

接続抽象化 CameraTransport

BLE と WiFi-REST を共通インターフェースに隠蔽し、プラットフォームで実装を切り替える。

interface CameraTransport {
  getStatus(): Promise<Status>
  setControl(varName, val): Promise<void>
  startInterval(opts): Promise<void>
  listFiles(): Promise<FileMeta[]>
  fetchImage(id): Promise<Blob>
}
環境制御画像転送
AndroidBLE (Web Bluetooth)WiFi AP
iOSWiFi-REST(Web Bluetooth 非対応のため縮退)WiFi AP

重要な設計判断

制約対処
Web Bluetooth iOS 非対応iOS は BLE を使わず WiFi-REST 制御へ縮退。機能差を最小化
HTTPS → HTTP の mixed-content配信方式をフェーズで切替(下表)
PWA インストール / SW は HTTPS 必須Phase 2 で Cloudflare Pages(HTTPS)配信へ

配信方式

候補長所短所
デバイス配信192.168.4.1, HTTP)同一オリジンで API 直叩き可(mixed-content 回避)SW / インストールに制限
Cloudflare Pages(HTTPS)インストール・オフライン可カメラ(HTTP) へ直接 fetch 不可 → BLE / AP 直結サブページへ委譲

Phase 1 = デバイス配信、Phase 2 = Cloudflare Pages の段階移行。

その他

  • WiFi 切替 UX: 「カメラの WiFi に接続してください」誘導 + 接続検知 + タイムアウト
  • オフライン: Service Worker でシェル / 直近メタをキャッシュ、ホーム画面追加対応
  • ローカル永続化: IndexedDB(設定・撮影メタ・DL 画像)