DateP

구독 시스템 수정 방안

Solo.dev 2025. 4. 10. 00:41

 

현재 상황

요구사항

  • 사용자: purchaseToken으로 구분 (로그인 없음)
  • 데이터: planlimit만 관리
  • DB 형식 (Firebase Realtime DB):
    {
        "purchases": {
            "": {
                "plan": "basic",
                "limit": 50
            }
        }
    }
                

문제점

  1. 구독 취소 후 재진입: 실시간성 부족 (checkSubscriptionStatus 캐시 지연)
  2. 앱 재설치: payload 없어 plan 복구 불가
  3. 동기화 문제: payload 지원 중단으로 만료/취소 감지 어려움
  4. AsyncStorage: plan 있으면 체크 안 해 취소 미반영

시도한 해결책

  1. getSubscriptions + getAvailablePurchases로 동기화 (실시간성 부족)
  2. DB 연결 제안 (미구현)
  3. startPurchase에서 finishTransaction으로 payload 이동 (미확인)
  4. AsyncStorage 항상 체크로 변경 (DB 필요)

버전 10 테스트 예상

  • planfree: O
  • limit 반영: O
  • payload 반영: X
  • 재설치 복구: X

동기화 방법

방법 1: Firebase Functions

  • 방법: Functions로 Google Play API 호출, DB 동기화
  • 장점: 실시간성, 보안
  • 단점: 설정 복잡

방법 2: getAvailablePurchases + DB

  • 방법: 클라이언트에서 getAvailablePurchases로 확인, DB 업데이트
  • 장점: 간단함
  • 단점: 실시간성 제한

해결 방안

  • 구독 시작: purchaseToken, plan, limit을 DB에 저장
  • 앱 시작: 동기화 후 DB에서 조회
  • 사용: DB에서 limit 감소
  • 해결:
    • 재설치: DB로 복구
    • 만료/취소: 방법 1 (완벽), 방법 2 (부분적)

결론

  • 현재: payload 없음, 동기화 부족
  • 해결: Realtime DB 필요
    • 방법 1: 실시간성 우선
    • 방법 2: 단순성 우선
  • 다음 단계: DB 연결 후 테스트