내용으로 건너뛰기

Create iOS Subscription Group

GitHub

iOS 앱에서 여러 구독 수준을 관리하고 조직하는 데 필수적인 구독 그룹입니다. 구독 그룹이 어떻게 작동하는지 이해하는 것은 업그레이드, 다운그레이드 및 크로스 그레이드 기능을 구현하는 데 중요합니다.

What is a Subscription Group?

구독 그룹이란 무엇입니까?

구독 그룹은 사용자가 선택할 수 있는 관련된 구독의 집합입니다. 사용자는 한 그룹 내에서 한 번에 하나의 구독만 구독할 수 있습니다. 구독을 변경할 때 Apple은 자동으로 전환을 처리합니다.

구독 그룹의 중요성

구독 그룹의 중요성

구독 그룹은 다음과 같은 기능을 제공합니다.

  • 등급별 가격: 기본, 프리미엄 및 최고급 계획을 제공합니다.
  • 다양한 기간: 월간, 연간 및 영구 옵션
  • 구독 변경의 자동 처리: 구독 변경을 자동으로 처리합니다.
  • 간소화된 관리: 관련 구독을 그룹화하여 관리합니다.

구독 등급

구독 등급

그룹 내에서 각 구독은 가치가 가장 높은 등급 (1 등급)부터 가치가 가장 낮은 등급까지 등급付け되어야 합니다. 이 등급付け은 구독 변경이 분류되는 방법을 결정합니다.

구독 그룹 계층

1 등급 (가장 높은 가치)

  • 프리미엄 연간 ($99.99/년)
  • 최종 월간 ($19.99/월)

2 등급 (중간 가치)

  • 표준 연간 ($49.99/년)
  • __CAPGO_KEEP_0__

레벨 3 (가장 낮은 가격)

  • __CAPGO_KEEP_1__
  • __CAPGO_KEEP_2__

구독 변경 유형

구독 변경 유형

애플은 등급 순위에 따라 3 가지 유형의 구독 변경을 자동으로 처리합니다.

1. 업그레이드

상위 등급으로

이동 등급 구독 (예: 등급 2 → 등급 1).

행동:

  • 효과 즉시
  • 사용자는 남은 시간에 대한 새로운 구독은 바로 시작됩니다.
  • 예시:

클립보드에 복사

// User currently has: Standard Monthly (Level 2)
// User upgrades to: Premium Annual (Level 1)
// Result: Immediate access to Premium, refund for unused Standard time

제목이 "2. 등급 다운그레이드"인 섹션

2. Downgrade

다음 구독 등급으로 이동 (예: 등급 1 → 등급 2). 행동: 다음 갱신일부터

사용자는 현재 구독을 유지할 때까지 기간이 끝날 때까지

  • 새로운 구독은 만료 후 자동으로 시작됩니다. 예시:
  • 클립보드에 복사
  • 3. 등급 상승

3. 등급 상승

// User currently has: Premium Annual (Level 1)
// User downgrades to: Standard Monthly (Level 2)
// Result: Premium access continues until annual renewal date, then switches

3. Crossgrade

Behavior:

다른 구독으로 전환 같은 등급 수준에서.

행동은 지속 기간에 따라 달라집니다:

다른 지속 기간 → 다음과 같이 행동 다운그레이드

  • 다음 재정의 날짜부터 적용
  • 예시: 월간 프리미엄 (등급 1) → 연간 프리미엄 (등급 1)

같은 지속 기간 → 다음과 같이 행동 업그레이드

  • 즉시 적용
  • 예시: 프리미엄 월간 (레벨 1) → 최고 월간 (레벨 1)

구독 그룹 만들기

구독 그룹 만들기
  1. 구독으로 이동

    앱 스토어 연결에서 앱을 선택하고 Monetize > 구독.

  2. 그룹 만들기

    그룹 만들기 버튼을 클릭합니다. + 그룹 이름

  3. 구독 그룹에 포함된 구독을 반영하는 설명적인 이름을 선택하세요:

    Choose a descriptive name that reflects the subscriptions it contains:

    • 프리미엄 접근권한
    • “클라우드 스토리지 플랜”
    • “프로 기능”
  4. 구독 추가

    그룹을 생성한 후 각 구독에 개별 구독을 추가합니다. 각 구독은 등급 순위를 가집니다.

  5. 등급 순위 설정

    가장 높은 가격의 구독부터 가장 낮은 가격의 구독까지 순서를 정렬합니다. 고려해야 할 사항은:

    • 연간 플랜은 월간 플랜보다 등급이 높습니다.
    • 가격이 높은 계층은 가격이 낮은 계층보다 위에 있습니다.
    • 최종/최상위 계층은 가장 높은 등급을 가집니다.

native-purchases 플러그인은 자동으로 구독 그룹 논리를 처리합니다:

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Fetch all subscriptions in a group
const { products } = await NativePurchases.getProducts({
productIdentifiers: ['premium_monthly', 'premium_annual', 'ultimate_monthly'],
productType: PURCHASE_TYPE.SUBS,
});
// Display current subscription using StoreKit transactions
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const activeSubs = purchases.filter((purchase) => purchase.isActive);
// Detect pending downgrade/cancellation (StoreKit sets willCancel === true)
const pendingChange = purchases.find((purchase) => purchase.willCancel === true);
if (pendingChange) {
console.log('Subscription will stop auto-renewing on', pendingChange.expirationDate);
}
// Purchase (StoreKit handles upgrades/downgrades automatically)
await NativePurchases.purchaseProduct({
productIdentifier: 'premium_annual',
productType: PURCHASE_TYPE.SUBS,
});
// Listen for StoreKit updates (fires on upgrades/downgrades/refunds)
NativePurchases.addListener('transactionUpdated', (transaction) => {
console.log('Subscription updated:', transaction);
});

구독 변경 처리

구독 변경 처리 섹션

변경 유형 감지

변경 유형 감지 섹션
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Get current subscription info
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const currentSubscription = purchases.find(
(purchase) => purchase.subscriptionState === 'subscribed',
);
if (currentSubscription) {
// StoreKit reports if user cancelled auto-renew
if (currentSubscription.willCancel) {
console.log(
`User cancelled. Access remains until ${currentSubscription.expirationDate}`,
);
}
if (currentSubscription.isUpgraded) {
console.log('User recently upgraded to this plan.');
}
}
// Listen for automatic upgrades/downgrades
NativePurchases.addListener('transactionUpdated', (transaction) => {
console.log('Subscription changed!', transaction);
if (transaction.subscriptionState === 'revoked') {
revokeAccess();
} else if (transaction.isActive) {
unlockPremiumFeatures();
}
});

업그레이드 시:

“프리미엄 기능에 즉시 접근하실 수 있습니다. 현재 구독을 프로라이트로 계산하겠습니다.”

다운그레이드 시:

For Downgrades:

“[renewal date]까지 프리미엄 접근을 유지할 것입니다. 그 다음은 표준으로 전환됩니다.”

크로스 그레이드에 대한 경우:

“다음 재정의 시점에 [date]에 따라 연간 요금제로 변경될 것입니다.”

애플의 App Store Server Notifications v2 또는 자신의 수신증명 백엔드와 함께 StoreKit 변경 사항을 데이터베이스에 반영하세요. 서버通知를 클라이언트와 백엔드가 동기화되도록 listener와 pair하세요. transactionUpdated 최선의 방법

제목: '최선의 방법'

그룹 조직
  • serverMonitoring
  • 다른 기능을 섞지 마세요 (예: 저장소 및 광고 제거)
  • 다른 기능 집합에 대한 별도의 그룹을 만드세요

레벨 랭킹 전략

레벨 랭킹 전략
  • 연간 계획 → 월간 계획보다 높은 등급 (같은 등급)
  • 가격이 높은 등급 → 높은 등급
  • 가치뿐만 아니라 가격만큼 고려하세요
  • 그룹 내에 모든 옵션을 표시하세요
  • 즉시 적용되는 변경 사항과 재정의 변경 사항을 구분하세요
  • __CAPGO_KEEP_0__
  • __CAPGO_KEEP_0__ 쉽게 변경할 수 있는 계획들

__CAPGO_KEEP_0__ 테스트

__CAPGO_KEEP_0__ 테스트
  • __CAPGO_KEEP_0__ 모든 업그레이드 시나리오 테스트
  • __CAPGO_KEEP_0__ 모든 다운그레이드 시나리오 테스트
  • __CAPGO_KEEP_0__ 크로스 그레이드 동작 확인
  • __CAPGO_KEEP_0__ 웹훅 작동 확인

__CAPGO_KEEP_0__ 일반적인 시나리오

__CAPGO_KEEP_0__ 일반적인 시나리오

__CAPGO_KEEP_0__ 1. 월간 3계층 계획 시나리오

__CAPGO_KEEP_0__ 1. 월간 3계층 계획 시나리오
Level 1: Ultimate Monthly ($19.99)
Level 2: Premium Monthly ($9.99)
Level 3: Basic Monthly ($4.99)
  • 기본 → 프리미엄: 즉시 업그레이드
  • 프리미엄 → 최고: 즉시 업그레이드
  • 최고 → 프리미엄: 재정의 시 하향 조정
  • 기본 → 최고: 즉시 업그레이드

시나리오 2: 혼합 지속 기간 계획

제목 "시나리오 2: 혼합 지속 기간 계획"
Level 1: Premium Annual ($99.99/year)
Level 2: Premium Monthly ($9.99/month)
  • 월 → 연: 재정의 시 크로스 그레이드
  • 연 → 월: 재정의 시 하향 조정

시나리오 3: 다중 층 다중 지속 기간

제목 "시나리오 3: 다중 층 다중 지속 기간"
Level 1: Ultimate Annual ($199/year)
Level 2: Ultimate Monthly ($19.99/month)
Level 3: Premium Annual ($99/year)
Level 4: Premium Monthly ($9.99/month)
Level 5: Basic Annual ($49/year)
Level 6: Basic Monthly ($4.99/month)

이 설정은 최대 유연성을 제공하면서 명확한 업그레이드/다운그레이드 로직을 유지합니다.

그룹에 표시되지 않는 구독:

  • 그룹에 할당된 것이 맞는지 확인하세요.
  • 최소 “제출 준비” 상태 이상인지 확인하세요.
  • 제품 ID가 정확한지 확인하세요.

업그레이드/다운그레이드 동작이 잘못된 경우:

  • 레벨 순위가 올바른지 확인하세요 (1 = 가장 높은 순위)
  • 구독 계층이 합리적인지 확인하세요.
  • 레벨이 올바르게 설정되어 있는지 확인하세요.

다른 그룹의 제품:

  • 사용자는 동시에 여러 그룹에 구독할 수 있습니다
  • 이것은 의도된 것입니다 - 관련 제품을 동일한 그룹에 유지하세요

getActiveProducts가 여러 구독을 보여주고 있습니다.

  • 구독이 다른 그룹에 있는지 확인하세요
  • 사용자가 가족 공유를 통해 구독하지 않았는지 확인하세요
  • App Store Connect에서 구독 상태를 확인하세요

추가 리소스

추가 리소스

더 많은 정보를 알고 싶다면 공식 Apple 문서에서 구독 그룹에 대한 자세한 내용을 확인하세요.

Create iOS Subscription Group에서 계속하세요

Create iOS Subscription Group에서 계속하세요

If you are using __CAPGO_KEEP_0__ iOS 구독 그룹 만들기 스토어 승인 및 배포를 계획하고, __CAPGO_KEEP_0__와 연결하세요. capgo/native-purchases를 사용하여 capgo/native-purchases의 네이티브 기능을 사용하세요. capgo/__CAPGO_KEEP_1__-in-app-review를 사용하여 capgo/__CAPGO_KEEP_1__-in-app-review의 구현 세부 정보를 확인하세요. capgo/capacitor-in-app-review를 사용하여 capgo/capacitor-in-app-review의 네이티브 기능을 사용하세요. capgo/capacitor-native-market를 사용하여 capgo/capacitor-native-market의 구현 세부 정보를 확인하세요. capgo/capacitor-native-market를 사용하여 capgo/capacitor-native-market의 네이티브 기능을 사용하세요. and capgo/capacitor-native-market and capgo/capacitor-native-market and capgo/capacitor-native-market and capgo/capacitor-native-market 자연스러운 기능을 위한 원시 기능 사용 @capgo/capacitor-원시-마켓.