사용자를 위해 인앱 상품과 혜택을 제공하는 한 가지 방법은 리워드 제품 또는 사용자가 동영상 광고를 본 후에 받는 상품을 만드는 것입니다. 리워드 제품을 제공하면 사용자가 직접 구매하지 않아도 인앱 보상과 혜택을 받을 수 있습니다.
이 문서에서는 리워드 제품과 관련된 기능을 구현하는 방법을 설명합니다. 이 페이지의 워크플로 다이어그램 섹션에서 이 과정을 보여줍니다.
앱의 리워드 제품 확인
리워드 제품에는 INAPP
의 SkuType
이 있습니다.
사용자가 여러 광고를 보고 여러 보상을 받을 수 있도록 하려면 제품이 소비되어야 합니다.
사용자에게 리워드 제품을 제공하려면 먼저 제품의 SkuDetails
를 가져와야 합니다. 이렇게 하려면 SkuType.INAPP
를 제품 유형으로 하여 querySkuDetailsAsync()
를 호출합니다.
연령에 적합한 광고 명시
아동과 관련된 법적 의무 준수를 지원하고 아동 온라인 개인정보 보호법(COPPA)을 포함한 미성년 사용자 (COPPA) 및 개인 정보 보호법 (GDPR), 앱에서 어떤 광고를 미국에서 아동 대상으로 취급해야 하는지 선언해야 합니다. 미국 및 영국에서 적용되는 적정 동의 연령 미만의 사용자를 대상으로 하는 광고가 할 수 있습니다. 광고 요청을 아동 대상 서비스로 취급하도록 태그해야 하는 경우와 동의 연령 미만 사용자를 대상으로 하는 서비스로 취급하도록 태그해야 하는 경우 및 파급 효과에 관한 내용은 AdMob 고객센터에 설명되어 있습니다.
앱의 결제 클라이언트를 만들 때 보상형 광고 요청을 아동 대상 서비스로 취급해야 하는지 또는 법정 연령 미만 사용자를 대상으로 하는 서비스로 취급해야 하는지 고려하세요. 광고 요청에 이러한 제한이 있어야 하는 경우 setChildDirected()
및 setUnderAgeOfConsent()
메서드를 호출하여 각 메서드에 적절한 값을 전달합니다.
다음 코드 스니펫에서 동영상 광고가 어린이 또는 동의 연령 미만 사용자에게 적합한 것으로 취급되어야 한다고 선언하는 방법을 확인할 수 있습니다.
Kotlin
val billingClient = BillingClient.newBuilder(context) .setListener(this) .setChildDirected(ChildDirected.CHILD_DIRECTED) .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT) .build()
Java
BillingClient billingClient = BillingClient.newBuilder(context) .setListener(this) .setChildDirected(ChildDirected.CHILD_DIRECTED) .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT) .build();
동영상 광고 로드
리워드 제품을 받기 위해 동영상 광고를 보는 옵션을 사용자에게 표시하려면 먼저 동영상을 로드해야 합니다. 이렇게 하려면 RewardLoadParams
객체를 만들고 리워드 제품을 나타내는 SkuDetails
객체와 연결합니다. 그런 다음 결제 클라이언트의 loadRewardedSku()
메서드를 호출하여 RewardLoadParams
객체와 RewardResponseListener
객체를 전달합니다.
동영상 로드가 완료되면 RewardResponseListener
리스너가 알림을 받습니다. 동영상을 사용할 수 없거나 서버 시간 초과 같은 다른 오류가 발생해도 리스너가 알림을 받습니다.
앱의 리워드 제품과 연관된 동영상을 로드할 때 기기 성능을 유지하려면 다음 권장사항을 염두에 두시기 바랍니다.
- 리워드 제품 SKU는 한 번에 최대 3개만 로드합니다.
- 사용자가 앱을 시작할 때마다 동영상 로드를 시도합니다. 이 단계는 동영상이 계속 로드되고 사용 가능한지 확인하는 데 도움이 됩니다.
동영상을 로드할 시기를 결정할 때는 사용 사례에 가장 적합한 대역폭 사용량과 앱 응답성 간의 균형을 선택합니다.
- 빨라도 관련 리워드 제품에 관한
getSkuDetails()
를 호출한 후에 동영상을 로드합니다. 앱 응답 속도는 빠르지만, 사용자가 보지 않는 동영상을 로드하여 네트워크 데이터를 낭비할 수 있습니다. - 늦어도 사용자가 동영상이 표시될 페이지로 이동한 시점에는 동영상을 로드합니다. 이 경우 앱에서 대역폭을 거의 낭비하지 않지만, 사용자가 동영상을 보기 위한 버튼을 클릭할 수 있게 되기까지 잠시 기다려야 할 수 있습니다.
- 빨라도 관련 리워드 제품에 관한
다음 코드 스니펫은 사용자가 리워드 제품을 받기 전에 재생되는 동영상 광고를 로드하는 과정을 나타냅니다.
Kotlin
if (skuDetails.isRewarded()) { val params = RewardLoadParams.Builder() .setSkuDetails(skuDetails) .build() mBillingClient.loadRewardedSku(params.build(), object : RewardResponseListener { override fun onRewardResponse(@BillingResponse responseCode : Int) { if (responseCode == BillingResponse.OK) { // Enable the reward product, or make // any necessary updates to the UI. } } }) }
Java
if (skuDetails.isRewarded()) { RewardLoadParams.Builder params = RewardLoadParams.newBuilder(); params.setSkuDetails(skuDetails); mBillingClient.loadRewardedSku(params.build(), new RewardResponseListener() { @Override public void onRewardResponse(int responseCode) { if (responseCode == BillingResponse.OK) { // Enable the reward product, or make // any necessary updates to the UI. } } }); }
사용자에게 리워드 구매 제공
Google Play 결제 라이브러리에서 리워드 제품과 연관된 동영상을 로드하면, 즉 RewardResponseListener
에서 BillingResponse.OK
의 responseCode
를 받으면 결제 절차를 시작할 수 있습니다.
다른 모든 인앱 상품 유형에서와 마찬가지로 launchBillingFlow()
를 호출하여 리워드 제품의 광고 재생을 시작합니다. 사용자가 리워드 제품을 받기 위해 직접 구매하지 않아도 사용자가 제품을 받아 이용할 수 있도록 결제 절차를 사용 설정해야 합니다.
구매 소비
사용자가 리워드 제품을 받아 소비했음을 결제 클라이언트에 알리려면 결제 클라이언트 리스너의 onPurchasesUpdated()
메서드에서 구매를 처리하세요. 리워드 구매는 소비되어야 합니다.
리워드 제품 테스트
앱에서 동영상 광고를 로드하고 사용자에게 리워드 제품을 제공하는 방법을 테스트하려면 기본적으로 실제 광고 대신 테스트 광고를 받는 라이선스 테스터를 활용하세요. 이러한 테스터용 계정을 설정하는 방법을 알아보려면 Google Play 결제 앱 사용자 테스트를 참조하세요.
다른 테스트 방법은 android.test.reward
제품 ID를 사용하는 것입니다. 이 특정 제품은 Google Play 결제의 예약된 이름이므로 Play Console의 인앱 상품 목록에 추가할 필요가 없습니다.
주의: 앱의 리워드 제품을 테스트할 때는 실제 제품을 사용하면 안 됩니다. 실제 제품을 테스트하면 계정이 스팸 또는 사기 계정으로 신고될 수 있습니다.
하지만 테스트를 완료하면 프로덕션 앱을 최종 사용자에게 배포하기 전에 android.test.reward
를 실제 리워드 제품의 제품 ID로 대체해야 합니다.
리워드 제품 워크플로 다이어그램
다음 시퀀스 다이어그램은 사용자, 앱, Google Play 결제 라이브러리가 함께 작동하여 동영상 광고를 게재하고 사용자에게 리워드 제품 액세스 권한을 부여하는 방식을 나타냅니다.