Appearance
hi-yu ふりふり確実配信を Public DB 再設計で完成
ペア位置共有アプリ hi-yu で「位置更新は通知ゼロ/ふりふり(poke)は背景でも確実配信」をサーバレス・規約クリーンに両立。実機2台で全 AC 検証済み。
経緯(試行錯誤)
- P2: NSE で shake/位置を出し分け — 共有DB の
CKDatabaseSubscriptionをアラート型にし NSE で判定。 位置更新は passive 降格したが通知センターに無音通知が残るため要件(通知ゼロ)未達。 - filtering entitlement で完全抑制 — Apple 承認制で下りない前提のため却下。
- Location Push Extension — 専用サーバ必須でサーバレス方針に反するため却下。
- 採用: 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 に。