DateP

Date P 구매 복원 및 플랜 동기화: 오늘의 작업과 다음 단계

Solo.dev 2025. 4. 9. 00:32
구독 관리 시스템: 2025-04-08 진행 상황과 향후 계획

구독 관리 시스템: 2025-04-08 진행 상황과 향후 계획

오늘 해결 및 진행 사항

  1. 에러 해결
    • 에러: [AsyncStorage] The value for key "purchaseDate" is not a string.
      → 해결 완료
    • 원인: purchaseDate 숫자 형식을 문자열로 변환
    • 불필요한 시간 관련 코드 제거
  2. Alert 메시지 국제화
    • Alert 하드코딩 문자열 제거
      {translations[language].적절한 변수 이름} 적용
    • useLanguage() 훅은 tsx 전용
      ts 파일에서 매개변수로 language 전달
      (export const restorePurchases = async (language: LanguageCode): Promise)
  3. 서버 영수증 검증
    • 1차 로컬 검증:
      getAvailablePurchasestransactionId와 DB 비교
      → 로직 완성 (심사 통과 가능성 검토 필요)
    • 만료 처리:
      getAvailablePurchases에 구독 정보 없으면 만료/취소 판단
      → 불안정 가능성
      서버 기반 영수증 검증 API 개발 검토
  4. 구독 후 사용량 제한
    • Firebase Realtime DB 구조 설계:
      { "purchases": { "transaction123": { "receiptDate": "2025-04-08", "plan": "basic", "remainingUses": 10 } } }
    • 로컬에서 remainingUses 감소 로직 필요
  5. 앱 최초 실행 시 구독 플랜 동기화
    • 1단계: AsyncStorage에서 plan 복구
    • 2단계:
      plan 없으면 loadSubscription 실행
      checkSubscriptionStatus 호출
      purchases에서 developerPayloadAndroid 확인
      selectedPlan 설정 및 저장
      checkAndResetUsage 실행
    • 요약:
      AsyncStorage 확인 후 서버 동기화

테스트 결과

  • 앱 진입 시 basic 플랜 즉시 설정 확인
  • free 플랜에서 구독 복원 미작동
  • checkSubscriptionStatus 실행 후 basic 설정
    → 프리미엄 상태였으나 developerPayloadAndroid 비어있음
    → 캐시 문제 의심 (추가 확인 필요)
  • 프리미엄 구독 정상 진행
  • 앱 삭제 후 재설치 시 캐시 영향 추정
    → 구독 미반영 상태에서 basic 설정 (테스트 필요)

향후 테스트 계획

  1. 프리미엄 구독 반영:
    프리미엄 구독 후 플랜 변경 및 기능 해제 확인
  2. 재설치 및 복구:
    앱 삭제 후 재설치
    → 구매 복원으로 플랜 복구 및 에러 점검
  3. 구매 복원 확인:
    UI 버튼으로 복구 기능 테스트
  4. 플랜 유지:
    앱 재시작 시 AsyncStorage 플랜 로드 확인

다음 단계

  • 테스트 및 분석:
    테스트 실행 후 결과 기록
  • 서버 API 개발:
    영수증 검증 API로 구독 상태 관리
  • 사용량 로직:
    remainingUses 감소 구현
  • UI 연동:
    구독 및 사용량 UI 반영
  • 에러 관리:
    예외 처리로 안정성 강화