플러팅 AI/React-native

📌 React Native IAP(인앱 결제) - 실제 기기에서 동작하지 않는 문제 해결 방법 🚀

Solo.dev 2025. 1. 23. 22:00

 

React Native에서 **react-native-iap(인앱 결제, IAP)**을 구현하면 에뮬레이터에서는 정상 동작하지만, 실제 기기에서는 구독 상품이 표시되지 않는 문제를 겪을 수 있습니다.

이 글에서는 IAP가 실제 기기에서 정상적으로 동작하지 않는 이유와 해결 방법을 정리하겠습니다.


🔹 문제 상황

에뮬레이터에서는 getSubscriptions()이 정상적으로 구독 상품을 불러옴.
하지만 실제 기기에서는 getSubscriptions()이 빈 배열([])을 반환하거나, 결제 요청이 실패함.
릴리즈 빌드를 하더라도 구독 상품이 표시되지 않음.
Google Play 내부 테스트 트랙에서는 동작하지 않음.


🔹 해결 방법 (가장 중요한 핵심 해결책)

🔑 내부 테스트 트랙이 아닌 "비공개 테스트 트랙"에 업로드 후 Google Play 검토를 완료해야 실제 기기에서 IAP가 정상 동작함!

📌 해결 방법 요약

1️⃣ 내부 테스트(Internal Testing) 트랙이 아니라 "비공개 테스트(Closed Testing) 트랙"에 업로드
2️⃣ Google Play에서 앱 검토를 통과해야 실제 기기에서 IAP가 활성화됨
3️⃣ 에뮬레이터에서는 Android Studio에서 직접 빌드한 APK로 테스트 가능

즉, 내부 테스트 트랙에서는 결제 API가 제대로 동작하지 않고, 비공개 테스트 트랙에서 검토를 거쳐야 실제 기기에서 정상적으로 IAP가 활성화됨!


🔹 IAP 문제를 해결하기 위해 시도한 과정

1. Google Play 테스트 계정 등록

📌 Google Play에서 테스트하려면 "라이선스 테스트 계정"을 등록해야 함.
📌 테스트 계정이 설정되지 않으면 실제 기기에서는 IAP가 정상 동작하지 않음.

🔹 해결 방법:

  • Google Play Console → 설정 → 개발자 계정 → 계정 세부정보
  • "라이선스 테스트(Gmail accounts with testing access)"에 테스트 계정 추가
  • 테스트 기기에서 Google Play Store를 해당 계정으로 로그인

결과: 라이선스 테스트 계정을 추가하지 않으면 실제 기기에서 getSubscriptions()이 빈 배열을 반환할 수 있음 → 등록 후 해결.


2. 내부 테스트(Internal Testing) 트랙은 IAP가 동작하지 않음!

📌 처음에는 "내부 테스트 트랙"에 앱을 올리고 테스트했으나, IAP가 정상적으로 동작하지 않았음.
📌 내부 테스트 트랙에서는 결제 API가 제한될 가능성이 있음.

🔹 해결 방법:

  • "내부 테스트"가 아닌 "비공개 테스트(Closed Testing) 트랙"에 앱 업로드
  • Google Play 검토가 완료되면, 실제 기기에서 정상적으로 구독 상품이 표시됨

결과: 내부 테스트 트랙에서는 구독 상품이 보이지 않았으나, 비공개 테스트 트랙에서는 정상 작동함!


3. SKU (Product ID) 불일치 문제 해결

📌 Google Play Console에 등록된 SKU(Product ID)와 코드에서 사용하는 SKU가 다르면 getSubscriptions()이 빈 배열을 반환함.

🔹 해결 방법:

  1. Google Play Console에서 등록한 SKU(Product ID) 확인
  2. 코드에서 SKU가 정확히 설정되었는지 확인
const itemSkus = Platform.select({
ios: ['com.appname.productid'],
android: ['productid'], // Google Play Console SKU와 정확히 일치해야 함
});
 
const products = await RNIap.getSubscriptions(itemSkus);
console.log('Fetched Products:', products);
3.console.log(products)를 통해 SKU가 정상적으로 불러와지는지 확인

결과: SKU가 잘못 설정된 경우 getSubscriptions()이 빈 배열([])을 반환 → SKU를 정확히 맞춘 후 해결


4. Google Play Store 캐시 문제 해결

📌 Google Play Store의 결제 API 캐시가 꼬여서 구독 상품을 불러오지 못하는 경우 발생 가능.

🔹 해결 방법:

  1. 설정 → 앱 → Google Play Store → 저장소 → 캐시 삭제
  2. Google Play 계정을 로그아웃 후 다시 로그인
  3. 앱 삭제 후 다시 설치 후 테스트

결과: Google Play Store 캐시 문제로 인해 getSubscriptions()이 빈 배열을 반환했음 → 캐시 삭제 후 해결

 

🚀 최종 정리 (실제 해결 시도 방법)

1️⃣ Google Play Console에서 "라이선스 테스트 계정" 추가
2️⃣ "내부 테스트(Internal Testing) 트랙이 아닌 "비공개 테스트(Closed Testing) 트랙"에서 앱 검토 완료
3️⃣ SKU(Product ID)가 정확히 맞는지 코드에서 확인
4️⃣ Google Play Store 캐시 삭제 및 기기 재부팅 후 테스트
6️⃣ 에뮬레이터에서는 Android Studio에서 직접 빌드한 APK로 테스트 가능


🚀 결론

에뮬레이터에서는 Android Studio에서 직접 빌드한 APK로 테스트 가능
실제 기기에서는 "비공개 테스트 트랙"에 앱을 업로드한 후 Google Play 검토가 완료되어야 IAP가 정상 작동함!
즉, "내부 테스트 트랙"에서는 결제 API가 비활성화될 수 있음

🔥 이제 React Native에서 실제 기기에서 IAP(구독)가 동작하지 않는 문제를 완벽하게 해결할 수 있습니다! 🔥