目的・役割
プレミアム会員の特典を訴求し、月額・年額プランから選択して購入してもらう画面。
UI 構成
| 要素 | 種類 | 説明 |
| ヘッダー | VStack | キャッチコピー + アイキャッチ |
| 特典リスト | List | 広告なし・限定テーマ・月次100pt |
| プラン選択 | HStack | 月額・年額(ボタン) |
| 購入ボタン | Button | StoreKit 起動 |
| 復元ボタン | Button | 過去購入の復元 |
| 利用規約・プライバシー | Link | SafariSheetView 経由 |
提供商品
| プラン | Product ID |
| 月額 | com.happyboy1002.DailyTips.premium_monthly1 |
| 年額 | com.happyboy1002.DailyTips.premium_yearly1 |
プレミアム特典
- 広告なし(Banner / Interstitial / AppOpen / Rewarded すべて非表示)
- 限定テーマすべて解放(実装検討)
- 毎月1日に +100コインボーナス
- 全ジャンル自動アンロック(実装検討)
使用するデータモデル
PremiumService {
func fetchProducts() async
func purchase(_ product: Product) async throws
func refreshPremiumStatus() async
}
実装メモ
- PremiumService は
@Observable @MainActor
- PurchaseError enum で productNotFound / verificationFailed / pending を定義
- restorePurchases() の動線あり
関連
変更履歴
| バージョン | 日付 | 変更内容 |
| 1.0 | 2026-05-09 | 初版作成 |