플러팅 AI/React-native

React Native에서 "IAP Initialization error: 'skus' is required" 오류 해결 방법

Solo.dev 2024. 12. 20. 19:02

React Native에서 "IAP Initialization error: 'skus' is required" 오류 해결 방법


안녕하세요, 오늘은 React Native를 사용하여 In-App Purchase (IAP) 기능을 구현할 때 발생할 수 있는 "IAP Initialization error: 'skus' is required" 오류에 대해 다뤄보겠습니다. 이 오류는 특히 react-native-iap 라이브러리를 사용하는 과정에서 자주 발생합니다. 해당 오류의 원인과 해결 방법을 자세히 알아보겠습니다.


오류 원인

이 오류는 react-native-iap에서 구독 상품(SKU) 정보를 불러오거나 초기화할 때 발생합니다. 주된 원인은 다음과 같습니다:

  1. SKU 배열 전달 문제:
    • getSubscriptions 또는 requestSubscription 메서드 호출 시 SKU 정보를 배열로 전달해야 하지만, 잘못된 형식으로 전달되었을 때 발생합니다.
  2. 앱 배포 상태:
    • 앱이 Google Play Console이나 App Store Connect의 테스트 트랙에 배포되지 않은 경우, 실제 결제 시스템과 연결할 수 없어 오류가 발생할 수 있습니다.
  3. 스토어 설정 미비:
    • Google Play 또는 App Store에 SKU가 등록되지 않았거나, 잘못된 SKU를 사용한 경우입니다.

해결 방법

1. SKU 배열 형식 확인

react-native-iap는 SKU를 항상 배열로 전달해야 합니다. 단일 SKU를 사용할 경우에도 배열로 감싸야 합니다.

예시 코드:



import * as RNIap from 'react-native-iap';

const productId = 'com.example.my_subscription';

const initializeIAP = async () => {
  try {
    await RNIap.initConnection();

    // SKU는 배열 형태로 전달
    const subscriptions = await RNIap.getSubscriptions([productId]);

    if (!subscriptions || subscriptions.length === 0) {
      console.error('No subscriptions found!');
    } else {
      console.log('Subscriptions:', subscriptions);
    }
  } catch (error) {
    console.error('IAP Initialization error:', error);
  }
};

중요: getSubscriptions와 requestSubscription 모두 배열 형태의 SKU를 요구합니다.


2. 앱을 테스트 트랙에 배포

앱이 Play Store 또는 App Store에서 실제로 결제 테스트를 수행하려면 테스트 트랙에 배포해야 합니다.

  • Google Play Console:
    1. Play Console에서 앱의 내부 테스트 트랙 또는 클로즈드 테스트 트랙에 앱을 배포하세요.
    2. Play Console의 라이선스 테스트에 테스트 계정을 추가하세요.
    3. 테스트 계정으로 Play Store에서 앱을 다운로드하여 테스트합니다.
  • App Store Connect:
    1. App Store Connect에서 TestFlight를 통해 앱을 배포하세요.
    2. TestFlight의 테스트 계정을 사용하여 앱을 설치합니다.

3. SKU 등록 확인

Google Play Console과 App Store Connect에서 SKU가 올바르게 등록되어 있는지 확인하세요.

  • Google Play Console:
    • "상품" 메뉴에서 구독 상품이나 인앱 상품을 등록합니다.
    • SKU 값이 com.example.my_subscription과 같은 형식으로 정확히 설정되었는지 확인하세요.
  • App Store Connect:
    • 인앱 구매 메뉴에서 SKU를 등록하고 상태가 "승인됨"인지 확인하세요.

4. 디버깅 로그 추가

console.log를 사용하여 SKU가 올바르게 전달되는지 확인하세요.



console.log('Initializing IAP with SKUs:', [productId]);
const subscriptions = await RNIap.getSubscriptions([productId]);
console.log('Subscriptions:', subscriptions);

5. 시뮬레이터 사용 불가

IAP는 실제 기기에서만 테스트 가능합니다. iOS 시뮬레이터나 Android 에뮬레이터에서는 오류가 발생할 수 있습니다. 반드시 실제 디바이스에서 테스트하세요.


자주 묻는 질문 (FAQ)

1. "IAP Initialization error"가 앱 배포 전에도 발생하나요?

네, 앱이 Play Store 또는 App Store에 배포되지 않았다면 이 오류가 발생할 가능성이 높습니다. 반드시 테스트 트랙에 앱을 배포하고 테스트 계정을 사용하세요.

2. SKU를 단일 문자열로 전달해도 되나요?

아니요. react-native-iap는 SKU를 항상 배열로 요구합니다. 단일 SKU를 사용할 경우에도 배열로 감싸 전달하세요.

3. SKU를 테스트 없이 사용할 수 있나요?

스토어에 SKU가 등록되지 않은 상태에서 IAP 기능을 테스트할 수 없습니다. 그러나 sandbox 환경에서 가짜 데이터를 사용하여 개발 중 테스트할 수는 있습니다.


결론

"IAP Initialization error: 'skus' is required" 오류는 주로 잘못된 SKU 전달 방식이나 앱 배포 상태로 인해 발생합니다.