콘텐츠로 바로가기

iOS 구독 그룹 만들기

GitHub

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

구독 그룹이란 무엇인가요?

구독 그룹이란 무엇인가요?

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

구독 그룹이 중요한 이유

구독 그룹이 중요한 이유

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

  • 가격 계층 구조: 기본, 프리미엄 및 최상위 계획을 제공합니다.
  • 다양한 기간: 월간, 연간 및 영구 옵션
  • 업그레이드/다운그레이드 로직: 구독 변경의 자동 처리
  • 간소화된 관리: 관련 구독을 그룹화하여 관리

그룹 내에서 각 구독은 가장 높은 가치 (등급 1) 에서 가장 낮은 가치 (등급 n) 로 등급付け되어야 합니다. 이 등급付け은 구독 변경의 분류를 결정합니다.

구독 그룹 계층

등급 1 (가장 높은 가치)

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

레벨 2 (중간 가치)

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

레벨 3 (가장 낮은 가치)

  • 기본 연간 ($29.99/년)
  • 표준 월간 ($4.99/월)

구독 변경 유형

구독 변경 유형 섹션

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

1. 업그레이드

제목 "1. 업그레이드"

등급이 높은 구독으로 이동하는 경우 (예: 등급 2 → 등급 1). 행동: 즉시 적용

사용자는 남은 시간에 대한 부분 환급을 받습니다.

  • __CAPGO_KEEP_0__ __CAPGO_KEEP_1__
  • __CAPGO_KEEP_2__ __CAPGO_KEEP_3__ __CAPGO_KEEP_4__
  • 새 구독은 즉시 시작됩니다.

예시:

// 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. 하위 등급으로 내리기”

등급을 낮은 등급 (예: 등급 1 → 등급 2)으로 내리면 동작:

다음 갱신일부터

  • 사용자는 현재 구독을 유지할 때까지 기간이 끝날 때까지 __CAPGO_KEEP_0__
  • __CAPGO_KEEP_1__
  • 신규 구독은 만료 후 자동으로 시작됩니다.

예시:

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

같은 기간 → __CAPGO_KEEP_0__처럼 업그레이드

  • 즉시 적용
  • 예시: 프리미엄 월간 (레벨 1) → 최고 월간 (레벨 1)
  1. 구독으로 이동

    앱 스토어 연결에서 앱을 선택하고 모니터링 > 구독으로 이동.

  2. 그룹 만들기

    Click + “구독 그룹” 옆의 버튼을 클릭하여 새로운 그룹을 생성하세요.

  3. 그룹 이름

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

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

    그룹을 생성한 후, 개별 구독을 추가하세요. 각 구독은 등급을 가집니다.

  5. 등급 설정

    구독을 등급에 따라 순서를 정하세요. 고려할 점은:

    • 년간 플랜은 월간 플랜보다 등급이 높습니다.
    • __CAPGO_KEEP_0__
    • __CAPGO_KEEP_0__

__CAPGO_KEEP_1__

__CAPGO_KEEP_2__

__CAPGO_KEEP_3__: __CAPGO_KEEP_4__ 자동 구독 그룹 논리를 처리합니다.

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_6__

__CAPGO_KEEP_7__

__CAPGO_KEEP_8__

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

Always communicate the change behavior clearly:

For Upgrades:

“즉시 프리미엄 기능에 접근할 수 있습니다. 현재 구독을 프로레이트합니다.”

For Downgrades:

“프리미엄 접근권을 [재newal 날짜]까지 유지하고, 그 후 표준으로 전환합니다.”

For Crossgrades:

“다음 재newal 날짜에 [일자]에 연간 결제 플랜으로 변경됩니다.”

Apple의 App Store Server Notifications v2 또는 자신의 수신증명 백엔드와 StoreKit 변경 사항을 데이터베이스에 반영하기 위해 사용하세요. 서버通知를 클라이언트와 백엔드가 동기화되도록 listener와 pair하세요. transactionUpdated ]}

  • 관련된 구독을 동일한 그룹에 유지하세요
  • 비관련된 기능을 섞지 마세요 (예: 저장소 및 광고 제거)
  • 다른 기능 세트에 대한 별도의 그룹을 생성하세요
  • 년간 계획 → 동일한 등급의 경우 월간보다 높은 등급
  • 고가의 등급 → 높은 등급
  • 가치뿐만 아니라 가격만큼 고려하세요

__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__

일반적인 상황

일반적인 상황 섹션

3개 계층 월간 요금 계획: Scenario 1

Scenario 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)
  • 월간 → 연간: 교체 (재정의 시)
  • 연간 → 월간: 다운그레이드 (재정의 시)

시나리오 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가 정확한지 확인하세요.

__CAPGO_KEEP_0__

  • 등급 순위 검토 (1 = 최고 등급)
  • 구독 등급이 합리적인지 확인하세요
  • 레벨이 올바르게 설정되어 있는지 확인하세요

다른 그룹의 제품:

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

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

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

추가 리소스

추가 리소스

자세한 내용은 구독 그룹에 대한 공식 애플 문서를 참조하십시오..

Create iOS Subscription Group에서 계속

Create iOS Subscription Group에서 계속

Create iOS Subscription Group을 사용하시는 경우 스토어 승인 및 배포 계획을 위해 Create iOS Subscription Group을 Using @__CAPGO_KEEP_0__/native-purchases Using @capgo/native-purchases의 네이티브 기능을 위해 Using @capgo/__CAPGO_KEEP_1__-in-app-review Using @capgo/capacitor-in-app-review의 구현 세부 정보를 위해 for the implementation detail in @capgo/capacitor-in-app-review, @capgo/capacitor-앱 리뷰 @capgo/capacitor-앱 리뷰를 위한 네이티브 기능 @capgo/capacitor-네이티브 마켓 @capgo/capacitor-네이티브 마켓을 위한 구현 세부 사항 @capgo/capacitor-네이티브 마켓 @capgo/capacitor-네이티브 마켓을 위한 네이티브 기능