Skip to content

feat: オンボーディングの最後のペイウォールの判定と段を足す - #11

Merged
taniguchi-kyoichi merged 1 commit into
mainfrom
feat/onboarding-paywall
Nov 8, 2026
Merged

taniguchi-kyoichi merged 1 commit into
mainfrom
feat/onboarding-paywall

Conversation

@taniguchi-kyoichi

Copy link
Copy Markdown
Contributor

7アプリがオンボーディング最後のペイウォールを自前で書いていて、つもふ習慣は途中に置かれ、×が右上で「無料のまま続ける」が無かった(studio の O16・P3・P16 からずれ)。決まりを型に移す。設計は studio docs/app-shared-packages-design-2026-11-08.md の段階4。

足したもの(既存は変えない・3.7.0 の minor になる見込み)

Subscription

  • OnboardingPaywallDecision.decide(offering:status:) -> .show / .skip(reason) の純関数
    • 購読中 → .skip(.entitled)
    • offering が無い → .skip(.nothingToSell)
    • metadata の onboarding_paywall が off(大文字小文字と前後の空白は無視)→ .skip(.switchedOff)
    • 商品が0 → .skip(.nothingToSell)
    • それ以外の値・値なし・文字列でない値は出す(既定は出す。書き損じで消えない。ごほうび習慣の OnboardingPaywallVariant と同じ読み方)
    • placement / source / metadataKey の定数(onboarding / onboarding / onboarding_paywall)

SubscriptionUI

  • OnboardingPaywallStep { context in アプリのペイウォール }
    • 左上の×(最初から・薄くしない)と、下の「無料のまま続ける」を必ず出す。位置や有無を変える引数は無い
    • ×・無料のまま続ける・買った・復元した、を1つの onFinish(OnboardingPaywallExit) に1回だけ流す
    • シートで出してもスワイプで閉じない(出口を全部数えるため)
  • OnboardingPaywallContext: source(onboarding)・paywallId(pw_id)・purchased(_ package:)・restored()・setWorking(_:)(購入の間は出口を押せなくする)
  • OnboardingPaywallEvent: paywall_shown / paywall_closed を name と parameters(または case の型付きの値)で onEvent に渡す。名前は swift-analytics feat/common-catalog-0.3 の Schema/common/common.yaml に合わせた(source・pw_id・result = dismissed/purchased/restored・via = close_button/continue_free/auto・product = yearly/monthly/lifetime・open_s)。nth はアプリが足す
  • OnboardingPaywallLabels(英語の既定と .japanese =「閉じる」「無料のまま続ける」)

決めたこと

  • 見た目は持たない(P46)。型が持つのは×・「無料のまま続ける」・出口・計測だけ
  • PaywallView の onEntitled は買ったと復元を区別しないので、この段では使わず purchased / restored を分けて受ける(result を正しく出すため)
  • 型の名前は swift-analytics の生成する型(PaywallCloseVia など)と衝突しないよう、文字列で値を返す
  • 「前の版からいる人に出さない」「最初の価値の演出の1.5秒後」はアプリの側(オンボーディングを始めるか・いつ段に進むか)

本線が回すコマンド(この PR ではビルドもテストもしていない)

cd ~/dev/NOPROBLEM/_wt/swift-subscription-onb
swift build --build-tests
swift test --filter 'OnboardingPaywall'
swift test
xcodebuild build -scheme Subscription-Package -destination 'generic/platform=iOS Simulator'

merge とタグはしていない。

🤖 Generated with Claude Code

https://claude.ai/code/session_01Nvz9wH6uYZH4w3Met47ZdC

- Subscription に OnboardingPaywallDecision(購読中・metadata の onboarding_paywall=off・売る物が無いときは出さない純関数)
- SubscriptionUI に OnboardingPaywallStep(左上の×と「無料のまま続ける」を必ず出し、閉じた・続けた・買った・復元したを1つの onFinish に)
- OnboardingPaywallEvent で paywall_shown / paywall_closed(source=onboarding・pw_id・result・via・product・open_s)を共通のカタログの名前で渡す。計測の SDK には依存しない
- テスト・README(en/ja)・DocC・CHANGELOG(Unreleased・足すだけ)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nvz9wH6uYZH4w3Met47ZdC
@taniguchi-kyoichi
taniguchi-kyoichi merged commit b025142 into main Nov 8, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant