6.2 KiB
6.2 KiB
볼링 매니저 구독 및 인앱 결제 통합 문서
개요
볼링 매니저 앱은 구독 기반 비즈니스 모델을 채택하여 다양한 기능을 제공합니다. 이 문서는 Flutter 모바일 앱에서 구독 및 인앱 결제 기능의 구현과 통합에 대한 상세 정보를 제공합니다.
아키텍처 개요
구독 및 인앱 결제 시스템은 다음 주요 구성 요소로 이루어져 있습니다:
-
모델 (Models)
Subscription: 사용자의 구독 정보를 나타냅니다.SubscriptionPlan: 사용 가능한 구독 플랜의 세부 정보를 포함합니다.
-
서비스 (Services)
SubscriptionService: 구독 상태 관리 및 백엔드 API와의 통신을 담당합니다.InAppPurchaseService: 플랫폼별 인앱 결제 처리를 담당합니다.
-
백엔드 API
- 구독 검증, 상태 관리, 영수증 검증 등의 서버 측 로직을 제공합니다.
데이터 흐름
구독 구매 프로세스
- 사용자가 구독 구매 버튼을 클릭합니다.
SubscriptionService.createSubscription()이 호출됩니다.InAppPurchaseService.purchaseSubscription()이 호출되어 플랫폼별 결제 프로세스를 시작합니다.- 결제가 완료되면
InAppPurchaseService의purchaseStream이 업데이트됩니다. - 결제 상태가
PurchaseStatus.purchased로 변경되면_verifyAndSavePurchase()메서드가 호출됩니다. _verifyAndSavePurchase()는 플랫폼별 영수증 데이터를 추출하고 서버에 전송하여 검증합니다.- 서버는 영수증을 검증하고 구독 정보를 데이터베이스에 저장합니다.
- 검증이 성공하면
SubscriptionService는 서버에서 최신 구독 정보를 가져와 로컬 상태를 업데이트합니다.
구독 상태 확인 및 기능 접근 제어
- 앱이 시작되면
SubscriptionService.loadCurrentSubscription()이 호출되어 현재 구독 상태를 로드합니다. - 사용자가 특정 기능에 접근하려고 할 때
SubscriptionService.canAccessFeature()가 호출됩니다. - 현재 구독 상태에 따라 기능 접근 권한이 결정됩니다.
- 접근 권한이 없는 경우 업그레이드 안내 대화상자가 표시됩니다.
주요 클래스 및 메서드
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);
}
구독 플랜 및 기능
볼링 매니저는 다음과 같은 구독 플랜을 제공합니다:
-
무료 (Free)
- 기본 볼링 점수 추적
- 최대 10명의 회원 관리
- 최대 5개의 이벤트 관리
-
기본 (Basic)
- 모든 무료 기능
- 최대 30명의 회원 관리
- 최대 10개의 이벤트 관리
- 기본 통계 분석
-
프리미엄 (Premium)
- 모든 기본 기능
- 최대 100명의 회원 관리
- 최대 50개의 이벤트 관리
- 고급 통계 분석
- 커스터마이징 옵션
-
프로 (Pro)
- 모든 프리미엄 기능
- 최대 500명의 회원 관리
- 최대 200개의 이벤트 관리
- 우선 지원
- 모든 고급 기능 접근
영수증 검증 프로세스
-
iOS 영수증 검증
- App Store 영수증 데이터 추출
- 서버에 영수증 데이터 전송
- 서버는 Apple 서버에 영수증 검증 요청
- 검증 결과에 따라 구독 상태 업데이트
-
Android 영수증 검증
- Google Play 영수증 데이터(JSON) 추출
- 서버에 영수증 데이터 전송
- 서버는 Google Play API를 통해 영수증 검증
- 검증 결과에 따라 구독 상태 업데이트
오류 처리
- 결제 프로세스 중 발생하는 오류는
_error속성에 저장되고 UI에 표시됩니다. - 네트워크 오류, 서버 오류, 검증 오류 등 다양한 오류 상황에 대한 처리가 구현되어 있습니다.
- 오류 발생 시 사용자에게 적절한 피드백을 제공하고 필요한 경우 재시도 옵션을 제공합니다.
테스트 및 QA
구독 및 인앱 결제 기능을 테스트하려면:
-
샌드박스 환경 설정
- iOS: App Store Connect에서 샌드박스 테스터 계정 설정
- Android: Google Play Console에서 테스트 트랙 설정
-
테스트 시나리오
- 구독 구매
- 구독 복원
- 플랜 변경
- 자동 갱신 설정 변경
- 구독 만료 처리
- 다양한 오류 상황 테스트
백엔드 API 엔드포인트
/subscriptions/current: 현재 구독 정보 조회/subscriptions/plans: 사용 가능한 구독 플랜 목록 조회/subscriptions/subscribe: 새 구독 생성/subscriptions/verify-receipt: 인앱 결제 영수증 검증/subscriptions/change-with-features: 구독 플랜 변경/subscriptions/autorenew: 자동 갱신 설정 변경
결론
볼링 매니저의 구독 및 인앱 결제 시스템은 Flutter의 in_app_purchase 패키지와 커스텀 백엔드 API를 통합하여 안전하고 사용자 친화적인 결제 경험을 제공합니다. 이 문서는 시스템의 주요 구성 요소와 데이터 흐름을 설명하여 개발자들이 시스템을 이해하고 유지보수할 수 있도록 돕습니다.