DateP
구독 상태 확인 로직 요약 (33 ,2.4) -05 01
Solo.dev
2025. 5. 1. 23:42
구독 상태 확인 로직 종합 정리
현재 코드 기반으로 논의된 구독 상태 확인 로직의 주요 동작 방식에 대한 종합 요약입니다.
1. 주요 시나리오별 코드 동작
-
Firebase 데이터 존재 & RNIap 날짜 월과 동일 시:
checkSubscriptionStatus실행 시, 해당 토큰/ID를 키로 Firebase에 저장된 데이터가 존재합니다.- RNIap에서 가져온 최신 구매 날짜와 Firebase 저장 날짜의 '월(Month)'이 같습니다.
- 결과: 코드는 '월 변화가 없다'고 판단하고, Firebase에 저장된 **기존 데이터(남은 횟수 포함)를 그대로 사용**합니다. **사용량 리셋은 일어나지 않습니다.**
-
Firebase 데이터 소실 또는 토큰 변경 시 (데이터 누락 상황):
checkSubscriptionStatus실행 시, 해당 토큰/ID를 키로 Firebase에 저장된 데이터를 **찾지 못합니다.** (진짜 소실 또는 토큰 변경으로 못 찾는 경우)- 결과: 코드는 "Firebase 데이터 누락" 상황으로 진입합니다. RNIap 정보로 플랜을 추정하고 (Android: 예: Free), 해당 플랜의
limit으로 사용량을 리셋합니다. 그리고 **해당 토큰/ID를 키로 Firebase에 이 (추정된) 상태를 새로운 레코드로 저장**합니다. 이전 데이터는 코드 로직상 활용되지 않습니다.
-
Firebase 데이터 존재 & RNIap 날짜 월과 다를 시:
checkSubscriptionStatus실행 시, 해당 토큰/ID를 키로 Firebase에 저장된 데이터가 **존재합니다.**- RNIap에서 가져온 최신 구매 날짜와 Firebase 저장 날짜의 '월(Month)'이 다릅니다.
- 결과: 코드는 '월이 바뀌었다'고 판단하고, Firebase 데이터의 사용량(
remainingUses)을 저장된limit값으로 리셋하고, Firebase 저장 날짜를 최신 RNIap 날짜로 업데이트하여 Firebase에 **업데이트**합니다.
2. 추가 논의 및 고려 사항
-
구독 갱신 테스트 관찰 및 가설:
- **관찰:** 테스트 환경에서 App Store/Google Play 결제 내역상 구독이 빠르게 갱신되는 것처럼 보이지만, Firebase DB에는 매번 새롭게 저장/업데이트되는 것처럼 보이지 않습니다.
- **가설:** RNIap의 실시간성이 완벽하지 않거나, **(가장 가능성 높은 이유) Firebase 업데이트 조건 (월 비교)이 매번 충족되지 않기 때문일 수 있습니다.** 월이 바뀌기 전의 빠른 갱신들은 월 비교 로직을 통과하지 못합니다.
- **테스트 계획:** 자기 전에 결제하고 다음 날 아침 Firebase DB를 확인하여, 월이 바뀐 후 새로운 레코드가 생성되는지 (또는 기존 레코드가 업데이트되는지) 실험해 보는 것은 좋은 방법입니다.
-
이전 PurchaseToken 관련 Firebase 데이터 삭제 필요성 검토:
- Android에서 갱신 시 새로운 purchaseToken이 발급되고, 님의 코드가 이를 키로 새로운 레코드를 Firebase에 저장하는 경우, **이전 purchaseToken을 키로 하는 Firebase 레코드는 더 이상 코드에서 조회되지 않고 사실상 활용되지 않게 됩니다.**
- Firebase DB를 깨끗하게 관리하려면, 새로운 레코드를 성공적으로 저장/업데이트한 후 **이전 purchaseToken을 키로 하는 레코드를 삭제하는 로직을 추가**하는 것을 고려할 수 있습니다.
- **구현 고려사항:** 이전 토큰 값을 알아내 삭제하는 로직은 추가적인 구현 복잡성을 수반할 수 있습니다.
-
결과적 동작 (토큰 변경 시):
purchaseToken이 바뀌는 경우, 코드는 Firebase에서 기존 데이터를 못 찾고 "데이터 누락" 상황으로 진입합니다.- 이때 새로운
purchaseToken을 키로 사용하여 Firebase에 데이터를 **'새로 저장 (set)'**합니다. - 결과적으로는: 전에 저장된 데이터가 없거나 (또는 토큰이 바뀌어 못 찾아도), 갱신 시 토큰이 바뀌면 그 **새로운
purchaseToken으로 Firebase에 새로운 레코드가 만들어지고, 그 레코드에 저장된 (limit으로 리셋된) 사용량을 사용하게 됩니다.** - 이는 원래 의도했던 '월별 리셋' 로직(이전 데이터와의 월 비교)이 아닌, '데이터 누락 시 초기화' 로직에 의해 발생하는 결과입니다.
※ 위 요약은 현재 코드 스니펫의 로직 분석 기반이며, 실제 App Store/Google Play의 모든 미세한 동작과 엣지 케이스를 100% 반영하지 않을 수 있습니다.