Skip to content

hi-yu ふりふり確実配信を Public DB 再設計で完成

ペア位置共有アプリ hi-yu で「位置更新は通知ゼロ/ふりふり(poke)は背景でも確実配信」をサーバレス・規約クリーンに両立。実機2台で全 AC 検証済み。

経緯(試行錯誤)

  1. P2: NSE で shake/位置を出し分け — 共有DB の CKDatabaseSubscription をアラート型にし NSE で判定。 位置更新は passive 降格したが通知センターに無音通知が残るため要件(通知ゼロ)未達。
  2. filtering entitlement で完全抑制 — Apple 承認制で下りない前提のため却下。
  3. Location Push Extension — 専用サーバ必須でサーバレス方針に反するため却下。
  4. 採用: shake poke だけ Public DB に分離CKQuerySubscription(predicate で絞る)で shake のときだけ アラート push。位置は共有ゾーンに残し silent 購読=通知ゼロ。time-sensitive は極小 NSE で昇格。

ハマりどころ(→ wiki に蒸留)

  • 共有DB は CKDatabaseSubscription(DB全体)しか張れず、shake と位置を購読で区別できない。
  • CKSubscription.NotificationInfo に interruptionLevel が無く CloudKit 単体で time-sensitive 不可 → NSE 必須。
  • time-sensitive entitlement は NSE の App ID に付与不可(ビルド失敗)→ ホストアプリのみに付与。
  • 前面 willPresent/didReceive は近接ローカル通知でも呼ばれる → UNPushNotificationTrigger 判定で誤発火回避。
  • pairID は CKShare の recordID.recordName を流用(両者同値・推測不可・再ペア不要)。

詳細は wiki/tech/cloudkit-serverless-push-delivery.md、設計書 docs/設計_ふりふりPublicDB.md。

残作業(リリース前)

  • CloudKit Dashboard の Shake 型+インデックスを Production へ Deploy。
  • aps-environment を production に。