ゴミマン アイコン
Architecture Case Study 02 · Real-Time Cloud Sync

ゴミマン (Gomiman):Zero-PII 家族クラウドリアルタイム同期 & ネイティブOS深層統合 Gomiman (ゴミマン): Zero-PII Real-Time Family Cloud Sync & Deep OS Integration ゴミマン (Gomiman):Zero-PII 家庭云端实时同步与双端 OS 深度集成架构

日本の生活向け ごみ分別事典(523品目)& 家族同期・ウィジェット・収集日アラーム基盤 Dual-native iOS/Android Japan waste sorting guide with anonymous QR family sync and OS widgets 面向在日家庭的 523 项垃圾分类辞典、匿名扫码家庭组实时同步与原生桌面小组件系统

ゴミマンは「メールアドレスもパスワード登録も不要なまま、iPhoneとAndroidを使う家族全員へ『今朝もうゴミを出したよ!』を即座に共有する」というユーザー体験を核に設計されたデュアルネイティブ・モノレポ(Swift 6 / SwiftUI & Kotlin 2.1 / Jetpack Compose Material 3)です。Firebase Anonymous Auth + Firestore + Cloud Functions + FCM によるゼロPII同期基盤、OSの省電力制限下でも確実に鳴動するアラームスケジューラ、ホーム画面ウィジェット(WidgetKit / AndroidX Glance)、ネイティブカレンダー連携を一貫して実装しています。 Gomiman solves a daily coordination problem across mixed iOS/Android households in Japan without requiring sign-up forms, emails, or passwords. Built inside a dual-native monorepo (Swift 6 / SwiftUI and Kotlin 2.1 / Jetpack Compose), it combines an anonymous QR-paired Firebase sync backbone (Firestore + Cloud Functions + FCM), Doze-resistant OS reminder schedulers, shared-container home widgets (WidgetKit / AndroidX Glance), and native calendar integrations. ゴミマン 采用 Swift 6 / SwiftUI 与 Kotlin 2.1 / Jetpack Compose Material 3 双端原生 Monorepo 架构,旨在解决跨 iOS 与 Android 的日本家庭日常倒垃圾协作难题——无需任何邮箱或手机号注册,扫码即可组网。当家中任一成员点击“已扔出!”时,Firebase Firestore + Cloud Functions + FCM 在毫秒级将状态与桌面小组件同步至全体家庭成员。

Zero-PII Anonymous QR Sync Swift 6 / SwiftUI (@Observable) Kotlin 2.1 / Jetpack Compose Firestore + Cloud Functions + FCM WidgetKit (App Group) & AndroidX Glance AlarmManager / WorkManager & BGTaskScheduler EventKit & CalendarContract StoreKit 2 & Play Billing 7.x

システムアーキテクチャ構成図 System Architecture Diagram 系统架构图

クロスOS リアルタイム家族同期 & ネイティブ通知・ウィジェット構成 Cross-OS Real-Time Family Sync, OS Scheduling & Widget Surface Topology 跨系统实时家庭协同、高精度系统闹钟与桌面小组件拓扑
QR Anonymous Family Group Pairing 1. DUAL-NATIVE CLIENTS iOS App (Swift 6 / SwiftUI) @Observable · App Group Shared Suite AVFoundation / CoreImage QR Engine Android App (Kotlin 2.1 / Compose) Material 3 · CameraX + ZXing QR WorkManager + BOOT_COMPLETED Guard 523-Item Offline Waste Dictionary Bilingual JA/EN · Custom Nth-Weekday Rules StoreKit 2 & Google Play Billing 7.x Pro Entitlement Sync + AdMob 2. OS SURFACES & SCHEDULERS Home Screen Native Widgets iOS: WidgetKit (Small / Medium) Android: Jetpack Glance (2×2 / 4×2) Live Taken-Out Status & Next Pickup Resilient Reminder Engine Android: AlarmManager + WorkManager iOS: BGTaskScheduler + UNNotification Lock-Screen Action: Mark Taken Out! System Calendar Integration iOS: EventKit (EKEventStore) Android: CalendarContract Provider 3. ZERO-PII REAL-TIME CLOUD SYNC Firebase Anonymous Auth No Email / No Phone / Random Group Token Cloud Firestore (Real-Time DB) Collection: groups/{groupId} Syncs Schedules, Rules & Taken-Out State Cloud Functions + FCM Push Firestore Trigger on 'Taken Out!' Tap → Silent + Alert Push to All Family Devices Prevents duplicate morning trips automatically

図:ゴミマンのデュアルネイティブ同期アーキテクチャ。iOS / Android クライアント間は QR グループトークン経由で匿名連携され、誰か1人が「出した!」を完了すると Firestore → Cloud Functions → FCM の経路で全端末とウィジェットが即時更新されます。 Figure: Gomiman's cross-OS real-time household sync topology. Devices pair via QR codes without PII; tapping "Taken Out!" propagates via Firestore, Cloud Functions, and FCM to update every household member's app and home widgets. 图:ゴミマン 跨系统家庭实时协同拓扑。双端通过二维码匿名加入同一家庭组,成员触发“已扔出”后,事件经 Firestore → Cloud Functions → FCM 实时推送至家庭所有手机并刷新小组件与提醒状态。

技術実装の深掘りポイント Engineering Deep-Dive 核心工程实现深度拆解

01 · Zero-PII QR Family Sync

個人情報ゼロの QR 家族グループ接続 & Firestore リアルタイム同期 Zero-PII QR Group Pairing & Real-Time Firestore Listeners 零隐私收集的二维码家庭组网与 Firestore 实时监听

家庭向けユーティリティで最も離脱率が高い「家族全員のアカウント作成と招待リンク承認」を撤廃するため、匿名認証+QRコード直接ペアリングを採用しました。 Requiring every household member to verify an email creates massive onboarding friction. Gomiman eliminates accounts altogether via anonymous tokens and instant camera QR pairing. 家庭协作工具若强制要求所有家人注册账号与邮箱验证,极易造成劝退。为此我们设计了“匿名令牌 + 面对面扫码”的零门槛组网模型:

  • 1スキャン即同期:AVFoundation / CoreImage(iOS)と CameraX / ZXing(Android)によりグループキーをQRコード化し、1秒で双方向同期に参加できます。
  • リアルタイム双方向反映:Firestore スナップショットリスナーと Cloud Functions FCM 通知の併用により、アプリが閉じていても配偶者・家族へ「ゴミ出し完了」が届きます。
  • One-Scan Cross-OS Onboarding: Generates encrypted invite QR codes with CoreImage / ZXing and scans them natively via AVFoundation / CameraX so iOS and Android devices join effortlessly.
  • Foreground & Background Propagation: Pairs active Firestore snapshot listeners with Cloud Functions-triggered FCM pushes so even closed apps reflect completed trash pickups immediately.
  • 一码跨系统瞬间组网:通过 CoreImage / ZXing 生成组队二维码,配合原生相机 AVFoundation / CameraX 扫描,iOS 与 Android 家人 1 秒同步。
  • 前后台联动广播:前台借助 Firestore 实时监听秒级刷新;后台依托 Cloud Functions 触发 FCM 推送通知,即便应用已滑掉也能通知全家人。
02 · Doze-Resistant Scheduling

OS省電力制限に打ち勝つ高精度アラーム & カレンダー連携 Resilient OS Scheduling & Native Calendar Export 穿透系统省电策略的高精度闹钟调度与系统日历集成

日本の資源ごみ収集は「第1・第3水曜日」「隔週木曜」など複雑な周期ルールが多く、さらに近年のモバイルOSはバックグラウンド実行を厳しく制限しています。 Japanese municipal collection schedules frequently mix Nth-weekday and biweekly cadences, while modern iOS and Android impose strict Doze and background throttling limits. 日本各自治体的分类周期常包含“每月第 1/第 3 周三”“隔周四”等复杂规则,同时当代移动 OS 对后台唤醒限制极严:

  • 再起動リカバリ付きスケジューラ:Android は AlarmManager + WorkManager と BOOT_COMPLETED レシーバーを組み合わせ、端末再起動後も通知時刻を維持します。
  • ロック画面アクション & カレンダー書き出し:iOS UNUserNotificationCenter ではアプリを開かずロック画面から「出した!」を記録でき、さらに EventKit / CalendarContract で純正カレンダーへの一括登録も可能です。
  • Reboot-Resilient Alarms: Android combines exact AlarmManager, WorkManager, and a BOOT_COMPLETED receiver; iOS pairs BGTaskScheduler with interactive UNUserNotificationCenter actions.
  • First-Class System Calendar Export: Writes recurring pickup events directly into users' device calendars via Apple EventKit and Android CalendarContract.
  • 重启自愈的多层调度:Android 端融合精确 AlarmManager、WorkManager 与 BOOT_COMPLETED 广播监听,手机重启不丢闹钟;iOS 端整合 BGTaskScheduler 与带快捷动作的 UNUserNotificationCenter。
  • 系统日历原生导出:直接对接苹果 EventKit 与安卓 CalendarContract,将周期日程写入用户系统日历中。
03 · Home Screen Widgets

App Group & Jetpack Glance による常時視認ウィジェット設計 App Group WidgetKit & Jetpack Glance Home Surfaces 基于 App Group 与 Jetpack Glance 的原生桌面小组件

ゴミ出しの確認に毎回アプリを起動する必要はありません。ホーム画面をチラッと見るだけで「今日・明日のゴミ種と色アイコン・家族の提出状況」が分かる設計を徹底しました。 Checking today's trash rule should take zero taps. Gomiman projects color-coded waste types and family completion status straight onto iOS and Android home screens. 查看今日垃圾无需点开 App——让用户解锁手机瞥一眼桌面,即可秒懂“今天与明天要扔什么、家人是否已处理”:

  • iOS App Group 共有スイート:メインアプリ(SwiftUI @Observable)と WidgetKit(Small / Medium)間で共有コンテナを介して最新状態を低遅延で同期・再描画します。
  • AndroidX Glance リアクティブ構成:宣言的 Compose 構文そのままに 2×2 / 4×2 ウィジェットを構築し、収集完了ステータス変更時および日付変更境界で自動リフレッシュします。
  • iOS App Group Data Bridge: Main SwiftUI app shares normalized pickup snapshots into WidgetKit (Small & Medium families) via shared App Group UserDefaults and triggers instant timeline reloads.
  • AndroidX Glance Declarative Widgets: Builds responsive 2×2 and 4×2 Compose-based home widgets triggered on midnight rollovers and Firestore sync writes.
  • iOS App Group 共享数据桥:主应用通过共享容器将最新日程与已扔出标记同步至 WidgetKit(小号/中号),触发即时 Timeline 刷新。
  • AndroidX Glance 声明式小组件:直接复用 Compose 状态模型渲染 2×2 与 4×2 卡片,并在跨午夜及云端写入时自动更新。
04 · Dual-Native Monorepo

Swift 6 × Kotlin 2.1 の同一機能パリティ & 課金アーキテクチャ Swift 6 & Kotlin 2.1 Feature Parity & Billing Architecture Swift 6 与 Kotlin 2.1 双端原生对齐与双商店订阅系统

ハイブリッドフレームワークの抽象化によるウィジェット・バックグラウンド通知の制約を回避するため、データモデル・UI思想・523品目分別辞書を単一モノレポで厳格に統一したフルネイティブ構成を採用しました。 Instead of compromising OS widget fidelity or exact alarms in a cross-platform wrapper, Gomiman shares identical domain specifications and the 523-item dictionary inside one dual-native monorepo. 为避免跨平台壳子对桌面小组件与系统级精确后台唤醒的能力受限,我们选择了共用同一套领域模型与 523 项分类辞典的双端纯原生 Monorepo 路线:

  • 日英バイリンガル 523品目検索:ひらがな・カタカナ・漢字の正規化検索および英語検索(外国人居住者向け)をローカルメモリ内で高速に実行します。
  • ストアネイティブ課金:Apple StoreKit 2(async/await トランザクション検証)と Google Play Billing Library 7.x を実装し、Proプラン有効化時にはリアルタイムで AdMob 広告バナーを非表示化します。
  • Fast Local Search Across 523 Items: Normalizes Hiragana, Katakana, Kanji, and English waste terms locally to deliver instant sorting answers for both Japanese and expat residents.
  • First-Party Store Billing: Implements Apple StoreKit 2 async verification and Google Play Billing 7.x for Monthly / Annual / Lifetime Pro tiers, cleanly gating AdMob views.
  • 日英双语 523 项本地极速检索:支持平/片假名与汉字模糊匹配,同时原生覆盖英语检索,方便在日外籍居民日常查验。
  • 原生商店内购总线:iOS 对接 StoreKit 2 并发校验,Android 对接 Play Billing 7.x,实时同步月费/年费/买断 Pro 权益并自动屏蔽 AdMob 广告。

技術スタック・仕様比較マトリクス Technical Stack & Implementation Matrix 双端技术栈与架构规格对照表

レイヤー / 機能 Architecture Layer 架构层级 / 模块 iOS Implementation Android Implementation 設計意図・特徴 Architectural Highlight 工程特性与设计优势
UI & State Swift 6 / SwiftUI (@Observable Architecture) Kotlin 2.1 / Jetpack Compose (Material 3) OS最新ガイドラインに完全準拠した高速レスポンスUI First-party OS responsiveness and zero bridge overhead 紧跟两大系统最新声明式范式,零桥接性能损耗
Family Cloud Sync Firebase Anonymous Auth + Cloud Firestore + Cloud Functions + FCM + QR Pairing (AVFoundation / CameraX + ZXing) メール登録なしのクロスOS世帯同期&プッシュ連動 Zero-PII cross-platform household state synchronization 零个人信息注册即可跨 iOS/Android 实时协同与推送
Alarms & Calendar BGTaskScheduler + UNUserNotificationCenter Actions + EventKit AlarmManager + WorkManager + BOOT_COMPLETED + CalendarContract 端末再起動後や省電力モードでも漏らさない通知精度 Survives reboots and aggressive OS power saving 无惧设备重启与激进后台限制的高到达率提醒
Widgets & Billing WidgetKit (Small/Medium, App Group) + StoreKit 2 AndroidX Glance (2×2 / 4×2) + Play Billing 7.x ホーム画面即応表示と堅牢なPro購読管理 At-a-glance status projection with native IAP entitlements 桌面一眼看清收集状态,原生商店双端内购校验