Files
bowlingManager/mobile/docs/subscription_integration.md
2025-08-01 16:45:26 +09:00

6.2 KiB

볼링 매니저 구독 및 인앱 결제 통합 문서

개요

볼링 매니저 앱은 구독 기반 비즈니스 모델을 채택하여 다양한 기능을 제공합니다. 이 문서는 Flutter 모바일 앱에서 구독 및 인앱 결제 기능의 구현과 통합에 대한 상세 정보를 제공합니다.

아키텍처 개요

구독 및 인앱 결제 시스템은 다음 주요 구성 요소로 이루어져 있습니다:

  1. 모델 (Models)

    • Subscription: 사용자의 구독 정보를 나타냅니다.
    • SubscriptionPlan: 사용 가능한 구독 플랜의 세부 정보를 포함합니다.
  2. 서비스 (Services)

    • SubscriptionService: 구독 상태 관리 및 백엔드 API와의 통신을 담당합니다.
    • InAppPurchaseService: 플랫폼별 인앱 결제 처리를 담당합니다.
  3. 백엔드 API

    • 구독 검증, 상태 관리, 영수증 검증 등의 서버 측 로직을 제공합니다.

데이터 흐름

구독 구매 프로세스

  1. 사용자가 구독 구매 버튼을 클릭합니다.
  2. SubscriptionService.createSubscription()이 호출됩니다.
  3. InAppPurchaseService.purchaseSubscription()이 호출되어 플랫폼별 결제 프로세스를 시작합니다.
  4. 결제가 완료되면 InAppPurchaseServicepurchaseStream이 업데이트됩니다.
  5. 결제 상태가 PurchaseStatus.purchased로 변경되면 _verifyAndSavePurchase() 메서드가 호출됩니다.
  6. _verifyAndSavePurchase()는 플랫폼별 영수증 데이터를 추출하고 서버에 전송하여 검증합니다.
  7. 서버는 영수증을 검증하고 구독 정보를 데이터베이스에 저장합니다.
  8. 검증이 성공하면 SubscriptionService는 서버에서 최신 구독 정보를 가져와 로컬 상태를 업데이트합니다.

구독 상태 확인 및 기능 접근 제어

  1. 앱이 시작되면 SubscriptionService.loadCurrentSubscription()이 호출되어 현재 구독 상태를 로드합니다.
  2. 사용자가 특정 기능에 접근하려고 할 때 SubscriptionService.canAccessFeature()가 호출됩니다.
  3. 현재 구독 상태에 따라 기능 접근 권한이 결정됩니다.
  4. 접근 권한이 없는 경우 업그레이드 안내 대화상자가 표시됩니다.

주요 클래스 및 메서드

SubscriptionService

class SubscriptionService extends ChangeNotifier {
  // 주요 속성
  Subscription? _currentSubscription;
  List<SubscriptionPlan> _availablePlans;
  InAppPurchaseService _purchaseService;
  
  // 주요 메서드
  Future<void> loadCurrentSubscription();
  Future<bool> createSubscription(SubscriptionPlanType planType, bool isYearly);
  Future<bool> restoreSubscriptions();
  Future<bool> changePlan(SubscriptionPlanType newPlanType, bool isYearly);
  Future<bool> toggleAutoRenew();
  bool canAccessFeature(SubscriptionFeature feature);
  Future<bool> checkFeatureAccess(SubscriptionFeature feature, BuildContext context);
  int getMaxMembersAllowed();
  int getMaxEventsAllowed();
}

InAppPurchaseService

class InAppPurchaseService extends ChangeNotifier {
  // 주요 속성
  List<ProductDetails> _products;
  List<PurchaseDetails> _purchases;
  bool _purchaseVerified;
  Map<String, dynamic>? _verifiedPurchase;
  
  // 주요 메서드
  Future<void> initialize();
  Future<bool> purchaseSubscription(SubscriptionPlanType planType);
  Future<bool> restorePurchases();
  Future<bool> _verifyAndSavePurchase(PurchaseDetails purchaseDetails);
}

구독 플랜 및 기능

볼링 매니저는 다음과 같은 구독 플랜을 제공합니다:

  1. 무료 (Free)

    • 기본 볼링 점수 추적
    • 최대 10명의 회원 관리
    • 최대 5개의 이벤트 관리
  2. 기본 (Basic)

    • 모든 무료 기능
    • 최대 30명의 회원 관리
    • 최대 10개의 이벤트 관리
    • 기본 통계 분석
  3. 프리미엄 (Premium)

    • 모든 기본 기능
    • 최대 100명의 회원 관리
    • 최대 50개의 이벤트 관리
    • 고급 통계 분석
    • 커스터마이징 옵션
  4. 프로 (Pro)

    • 모든 프리미엄 기능
    • 최대 500명의 회원 관리
    • 최대 200개의 이벤트 관리
    • 우선 지원
    • 모든 고급 기능 접근

영수증 검증 프로세스

  1. iOS 영수증 검증

    • App Store 영수증 데이터 추출
    • 서버에 영수증 데이터 전송
    • 서버는 Apple 서버에 영수증 검증 요청
    • 검증 결과에 따라 구독 상태 업데이트
  2. Android 영수증 검증

    • Google Play 영수증 데이터(JSON) 추출
    • 서버에 영수증 데이터 전송
    • 서버는 Google Play API를 통해 영수증 검증
    • 검증 결과에 따라 구독 상태 업데이트

오류 처리

  • 결제 프로세스 중 발생하는 오류는 _error 속성에 저장되고 UI에 표시됩니다.
  • 네트워크 오류, 서버 오류, 검증 오류 등 다양한 오류 상황에 대한 처리가 구현되어 있습니다.
  • 오류 발생 시 사용자에게 적절한 피드백을 제공하고 필요한 경우 재시도 옵션을 제공합니다.

테스트 및 QA

구독 및 인앱 결제 기능을 테스트하려면:

  1. 샌드박스 환경 설정

    • iOS: App Store Connect에서 샌드박스 테스터 계정 설정
    • Android: Google Play Console에서 테스트 트랙 설정
  2. 테스트 시나리오

    • 구독 구매
    • 구독 복원
    • 플랜 변경
    • 자동 갱신 설정 변경
    • 구독 만료 처리
    • 다양한 오류 상황 테스트

백엔드 API 엔드포인트

  • /subscriptions/current: 현재 구독 정보 조회
  • /subscriptions/plans: 사용 가능한 구독 플랜 목록 조회
  • /subscriptions/subscribe: 새 구독 생성
  • /subscriptions/verify-receipt: 인앱 결제 영수증 검증
  • /subscriptions/change-with-features: 구독 플랜 변경
  • /subscriptions/autorenew: 자동 갱신 설정 변경

결론

볼링 매니저의 구독 및 인앱 결제 시스템은 Flutter의 in_app_purchase 패키지와 커스텀 백엔드 API를 통합하여 안전하고 사용자 친화적인 결제 경험을 제공합니다. 이 문서는 시스템의 주요 구성 요소와 데이터 흐름을 설명하여 개발자들이 시스템을 이해하고 유지보수할 수 있도록 돕습니다.