콘텐츠로 바로가기

iOS 구독 그룹 만들기

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

구독 그룹이란 무엇인가?

구독 그룹이란 무엇인가?

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

구독 그룹이 중요한 이유

구독 그룹이 중요한 이유

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

  • 가격 계층제: 기본, 프리미엄, 및 최종 계획 제공
  • 다양한 기간: 월, 년, 및 영구 옵션
  • 업그레이드/다운그레이드 논리: 구독 변경을 자동으로 처리
  • 간소화된 관리: 관련 구독을 그룹화

그룹 내에서 각 구독은 가장 높은 가치 (등급 1) 에서 가장 낮은 가치 (등급 n) 로 등급付け되어야 합니다. 이 등급付け은 구독 변경을 분류하는 데 사용됩니다.

구독 그룹 계층 구조

레벨 1 (가장 높은 값)

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

레벨 2 (중간 값)

  • 표준 연간 ($49.99/년)
  • 프리미엄 월 ($9.99/월)

레벨 3 (가장 낮은 값)

  • __CAPGO_KEEP_0__
  • __CAPGO_KEEP_1__

__CAPGO_KEEP_2__

__CAPGO_KEEP_3__

__CAPGO_KEEP_4__

__CAPGO_KEEP_6__ __CAPGO_KEEP_7__ __CAPGO_KEEP_8__

__CAPGO_KEEP_9__

  • 이동 __CAPGO_KEEP_0__
  • __CAPGO_KEEP_1__ __CAPGO_KEEP_2__ __CAPGO_KEEP_3__
  • __CAPGO_KEEP_4__

__CAPGO_KEEP_5__

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

낮은 등급의 구독으로 이동 __CAPGO_KEEP_6__ __CAPGO_KEEP_7__

행동:

  • 효과가 시작되는 날짜: 다음 갱신일
  • 사용자는 현재 구독을 기간이 끝날 때까지 유지합니다.
  • 구독이 만료된 후 자동으로 새로운 구독이 시작됩니다.

예시:

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

다른 구독으로 전환 같은 티어 레벨에서.

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

다양한 기간 → 기간이 같으면 다운그레이드

  • 다음 갱신일부터 적용
  • 예시: 월간 프리미엄 (레벨 1) → 연간 프리미엄 (레벨 1)

같은 기간 → 기간이 같으면 업그레이드

  • 즉시 적용
  • 예시: 프리미엄 월간 (레벨 1) → 얼티밋 월간 (레벨 1)

구독 그룹 만들기

구독 그룹 만들기 섹션
  1. Navigate to Subscriptions

    App Store Connect에서 앱을 선택하고 Monetize > 구독.

  2. 그룹 만들기

    클릭 + '구독 그룹' 옆에 있는 '새 그룹 만들기'를 클릭합니다.

  3. 그룹 이름

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

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

    __CAPGO_KEEP_0__ 후에 개인 구독을 그룹에 추가하세요. 각 구독은 등급 순위를 가집니다.

  5. __CAPGO_KEEP_1__ 등급

    __CAPGO_KEEP_2__ 구독을 가장 높은 가격 (1)부터 가장 낮은 가격까지 정렬하세요. 고려하세요:

    • 년간 계획은 월간 계획보다 등급이 높습니다.
    • 가격이 높은 구독은 가격이 낮은 구독보다 위에 있습니다.
    • 최상위/프리미엄 구독은 가장 높은 등급을 가집니다.

__CAPGO_KEEP_3__

__CAPGO_KEEP_4__

__CAPGO_KEEP_5__

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);
});

__CAPGO_KEEP_7__

__CAPGO_KEEP_8__

변경 유형 감지

변경 유형 감지 섹션
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();
}
});

사용자 커뮤니케이션

사용자 커뮤니케이션 섹션

변경 동작을 명확하게 항상 전달하세요:

업그레이드:

“You’ll get immediate access to Premium features. We’ll prorate your current subscription.”

다운그레이드:

“You’ll keep Premium access until [renewal date], then switch to Standard.”

크로스 그레이드:

“Your plan will change to Annual billing at the next renewal on [date].”

서버 모니터링

서버 모니터링 섹션

__CAPGO_KEEP_0__의 App Store Server Notifications v2 또는 __CAPGO_KEEP_0__의 자체 수신증명 백엔드 사용하여 StoreKit 변경 사항을 데이터베이스에 반영하십시오. 서버通知와 __CAPGO_KEEP_0__를 pair하여 클라이언트와 백엔드가 동기화되도록 하십시오. transactionUpdated 최선의 방법

비관련 기능을 혼합하지 마십시오 (예: 저장소 및 광고 제거)

다른 기능 세트에 대한 별도의 그룹을 생성하십시오
  • 등급 순위 전략
  • Don’t mix unrelated features (e.g., storage and ad removal)
  • Create separate groups for different feature sets

Level Ranking Strategy

등급 순위 전략 섹션
  • 연간 계획 → 월간 계획보다 높은 등급 (같은 등급)
  • 가격이 높은 등급 → 높은 등급
  • 가격 외에 가치도 고려하십시오

사용자 경험

사용자 경험 섹션
  • 현재 구독을 명확하게 표시하십시오
  • 그룹 내 모든 옵션을 표시하십시오
  • 즉시 적용되는 변경 사항과 갱신 시 적용되는 변경 사항을 명확하게 표시하십시오
  • 계획 간 쉽게-switching을 허용하십시오
  • 모든 업그레이드 시나리오를 테스트하십시오
  • 모든 다운그레이드 시나리오를 테스트하십시오
  • 크로스 그레이드 동작을 확인하십시오
  • 웹훅 발동을 확인하십시오

일반적인 시나리오

일반적인 시나리오 제목

시나리오 1: 월간 3계층 계획

시나리오 1: 3계층 월간 계획 제목
Level 1: Ultimate Monthly ($19.99)
Level 2: Premium Monthly ($9.99)
Level 3: Basic Monthly ($4.99)
  • 기본 → 프리미엄: 즉시 업그레이드
  • 프리미엄 → 최고급: 즉시 업그레이드
  • 최고급 → 프리미엄: 갱신 시 다운그레이드
  • 기본 → 최고급: 업그레이드 (즉시)

Scenario 2: 혼합 지속 기간 계획

Scenario 2: 혼합 지속 기간 계획
Level 1: Premium Annual ($99.99/year)
Level 2: Premium Monthly ($9.99/month)
  • 월 → 연: 교급 (재정기)
  • 연 → 월: 다운그레이드 (재정기)

Scenario 3: 다중 층 다중 지속 기간

Scenario 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)

__CAPGO_KEEP_0__

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

문제 해결

구독이 그룹에 나타나지 않습니다:

  • 정확한 그룹에 할당되어 있는지 확인하세요
  • 최소 '제출 준비' 상태 이상인지 확인하세요
  • 제품 ID가 정확한지 확인하세요

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

  • 레벨 순위 검토 (1 = 가장 높은 순위)
  • 구독 등급이 합리적인지 확인하세요
  • 레벨이 정확하게 설정되어 있는지 확인하세요

다른 그룹의 제품:

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

getActiveProducts에서 여러 구독이 표시되는 경우:

  • __CAPGO_KEEP_0__
  • __CAPGO_KEEP_1__
  • __CAPGO_KEEP_2__

__CAPGO_KEEP_3__

__CAPGO_KEEP_4__

__CAPGO_KEEP_5__ __CAPGO_KEEP_6__.

__CAPGO_KEEP_7__

__CAPGO_KEEP_8__

__CAPGO_KEEP_9__ __CAPGO_KEEP_10__ __CAPGO_KEEP_11__ @capgo/capgo-native-구매 for the native capability in @capgo/capgo-native-구매, @capgo/capacitor-앱리뷰 for the implementation detail in @capgo/capacitor-앱리뷰, Using @capgo/capacitor-앱리뷰 for the native capability in Using @capgo/capacitor-앱리뷰, @capgo/capacitor-네이티브-마켓 for the implementation detail in @capgo/capacitor-네이티브-마켓, and Using @capgo/capacitor-네이티브-마켓 for the native capability in Using @capgo/capacitor-네이티브-마켓.