안드로이드 플레이 스토어 리뷰 지침서
설치 프롬프트와 이 플러그인의 전체 마크다운 가이드를 포함한 설정 프롬프트를 복사하세요.
구글 플레이에서 안드로이드 앱을 승인하기 위해서는, 특히 인앱 구매 및 구독이 있는 앱의 경우, 구글 정책에 따라야 합니다. 이 가이드는 승인 검토를 성공적으로 통과하기 위해 필요한 모든 것을 다룹니다.
Release Path That Works
Release Path That Works-
Signed Android 앱 빌드
새로운 구글 플레이 앱은 안드로이드 앱 번들 (
.aab)로 업로드해야 하며, 시드 로드된 디버그 APK가 아닙니다.앱 업로드 시
versionCode증가하고 있으며,
-
Play Console에서 앱 레코드를 생성하세요
만약 개발자 계정이 아직 없다면, Play Console 가입. 그런 다음 홈 > 앱 만들기에서 언어, 앱/게임 종류, 무료/유료 설정, 지원 이메일, 그리고 필요한 선언서를 수락하세요.
유료/무료 설정을 신중하게 선택하세요. 구글은 유료 앱을 무료로 변경할 수 있지만, 무료로 제공된 앱은 유료로 변경할 수 없습니다.

-
앱 콘텐츠 및 스토어 목록 완료
제품 검토 이전에, 다음 Play Console 선언서를 완료하세요:
- 개인 정보 보호 정책
- 광고
- 앱 접근
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- 콘텐츠 등급
- __CAPGO_KEEP_0__
-
__CAPGO_KEEP_0__
__CAPGO_KEEP_0__ __CAPGO_KEEP_0__ __CAPGO_KEEP_0__ __CAPGO_KEEP_0__ __CAPGO_KEEP_0__

-
__CAPGO_KEEP_0__
Google Play에서 앱을 설치하세요. 지역적으로 내보낸 APK가 아닌.
- Play에서 제품이 올바르게 로드됩니다.
- 구매 시트에 테스트 구매 라이선스 테스터용 배너가 표시됩니다.
- 구매 후 권한이 해제됩니다.
- 구매 및 구독 관리 흐름이 작동합니다.
Google Play 결제 요구 사항
Google Play 결제 요구 사항결제 시스템
결제 시스템디지털 상품 및 서비스의 경우, must 구글 플레이의 결제 시스템을 사용해야 합니다:
디지털 상품 (구글 결제 사용 필수):
- 프리미엄 기능의 구독
- 인앱 화폐 또는 크레딧
- 디지털 콘텐츠 (전자책, 음악, 비디오)
- 게임 업그레이드 및 파워업
- 앱 언락 및 프리미엄 티어
물리적 상품 (구글 결제 사용 불가):
- 물리적 상품
- 실세계 서비스
- 비영리 단체에 대한 일회성 기부
:::note 구독 설정
Google Play Console에서 Android 구독을 설정하려면 현재 구독 -> 기본 계획 -> 제안 모델을 사용하십시오. 구독 -> 기본 계획 -> 제안 모델을 사용하십시오. native-purchases, planIdentifier.
:::
구독 계획 ID를 Native Purchases 구현에 전달하십시오.
구현 방법import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Ensure billing is available on the deviceconst { isBillingSupported } = await NativePurchases.isBillingSupported();if (!isBillingSupported) throw new Error('Google Play Billing not available');
// Fetch subscription products (Store data is required—never hardcode pricing)const { products } = await NativePurchases.getProducts({ productIdentifiers: ['premium_monthly', 'premium_yearly'], productType: PURCHASE_TYPE.SUBS,});
// Plan identifiers are the Base Plan IDs you create in Google Play Consoleconst transaction = await NativePurchases.purchaseProduct({ productIdentifier: 'premium_monthly', planIdentifier: 'monthly-plan', // REQUIRED on Android, ignored on iOS productType: PURCHASE_TYPE.SUBS,});
console.log('Purchase token for server validation:', transaction.purchaseToken);투명성 및 공개 의무
투명성 및 공개 의무가격 공개
가격 공개구매 전에 모든 비용에 대한 명확한 공개를 요구합니다.
필수 요소:
- 사용자의 지역 통화로 정확한 가격
- 결제 주기 (월, 년 등)
- 구독에 포함된 항목
- 초기 제안의 총 비용
- 요금이 발생할 때

준수하는 UI 예시
function SubscriptionCard({ product }) { return ( <div className="subscription-card"> <h3>{product.title}</h3>
{/* Show intro offer if available */} {product.introductoryPrice && ( <div className="intro-offer"> <p className="intro-price">{product.introductoryPriceString}</p> <p className="intro-period"> for {product.introductoryPricePeriod} </p> </div> )}
{/* Regular price */} <div className="regular-price"> <p className="price">{product.priceString}</p> <p className="period">per {product.subscriptionPeriod}</p> </div>
{/* Clear description */} <p>{product.description}</p>
{/* Renewal terms */} <p className="terms"> Renews automatically. Cancel anytime in Google Play. </p>
<button onClick={() => handlePurchase(product)}> Subscribe Now </button> </div> );}자동 갱신 알림
자동 갱신 알림 섹션구독이 자동 갱신되기 전에 Google은:
- 자동 갱신이 발생할 것을 알립니다.
- 가격을 기억하세요.
- 취소하기를 쉽게 찾을 수 있습니다.
플랫폼 간 가격 명확성
플랫폼 간 가격 명확성여러 플랫폼에서 동일한 권한을 판매할 경우, 제품 이름, 청구 기간, 포함된 혜택, 갱신 언어를 일치시켜 사용자가 놀라지 않도록 하십시오.
가격 차이로 인해 세금, 지역 통화, 또는 스토어 경제학으로 인해 가격이 다를 수 있지만, 구매 UI는 가격 차이를 숨기거나 Google Play가 청구할 갱신 비용과 다른 갱신 비용을 암시하지 않도록 하십시오.
개인 정보 보호 정책 요구 사항
개인 정보 보호 정책 요구 사항필수 개인 정보 보호 정책
필수 개인 정보 보호 정책 섹션앱에 인앱 구매가 포함되어 있다면, 다음을 수행해야 합니다:
-
플레이 스토어 목록에 링크
- 플레이 콘솔에 개인 정보 보호 정책 URL 추가
- 공개적으로 접근 가능해야 합니다
- 앱의 언어와 동일한 언어로 작성해야 합니다
-
앱 내에 링크
- 앱 설정에서 개인 정보 보호 정책 표시
- 사용자 데이터를 수집하기 전에 표시
- 쉽게 발견할 수 있도록 하세요
예시 구현:
function SettingsScreen() { const openPrivacyPolicy = () => { window.open('https://yourapp.com/privacy', '_blank'); };
const openTerms = () => { window.open('https://yourapp.com/terms', '_blank'); };
return ( <div> <h2>Settings</h2>
<button onClick={openPrivacyPolicy}> Privacy Policy </button>
<button onClick={openTerms}> Terms of Service </button>
<button onClick={() => NativePurchases.manageSubscriptions()}> Manage Subscriptions </button> </div> );}데이터 안전 섹션
제목이 ‘데이터 안전 섹션’인 섹션구글 플레이는 데이터 안전 섹션에서 자세한 정보를 공개해야 합니다.
IAP 앱의 경우 다음을 선언해야 합니다:
- 구매 기록 수집
- 전자 메일 주소 (영수증)
- 기기 ID (위조 방지)
- 결제 정보 처리
- 분석 데이터 수집
데이터 안전 섹션은 법적 의무입니다. 정확하지 않은 선언은 앱 제거로 이어질 수 있습니다.
앱 콘텐츠 선언
App Content DeclarationsGoogle Play 리뷰는 바이너리만을 위한 것이 아니다. 프로덕션 릴리즈 전에 Policy and programs > App content 에서 다음을 완료해야 한다. 정기적인 검토에 주의해야 할 최소한의 내용은 다음과 같다:.
개인 정보 보호 정책
- : Google Play 콘솔에서 공개 URL을 제공하고, 필요할 때는 앱 내부의 진입점도 제공해야 한다.광고
- : 앱이 광고를 포함하는지 여부를 선언해야 한다.앱 접근
- : 리뷰어에게 작업할 수 있는 자격증 또는 앱이 게이트드된 화면이 있는 경우에는 명확한 테스트 경로를 제공해야 한다.대상 청취자 및 콘텐츠
- : 앱의 실제 청취자와 콘텐츠를 일치시켜야 한다.ads
- 콘텐츠 평점: IARC 설문조사를 완료하여 앱이 비평점으로 표시되지 않도록 하세요
- 데이터 안전: 데이터 수집, 공유 및 보안 정책을 정확하게 선언하세요
거절 사유
제목이 '거절 사유'인 섹션1. 결제 구현이 누락되거나 정확하지 않음
1. 결제 구현 오류Why It Fails:
- 구글 플레이 결제를 사용하지 않음
- 구글 플레이 결제 API를 사용하지 않음
- 구독을 위한 커스텀 결제 솔루션을 구현함
Prevention:
// ✅ Correct: Use native-purchases (uses Google Play Billing)await NativePurchases.purchaseProduct({ productIdentifier: 'premium_monthly', planIdentifier: 'monthly-plan', productType: PURCHASE_TYPE.SUBS,});
// ❌ Wrong: Custom payment processor for subscriptions// await CustomPayment.charge(user, 9.99);2. 가격 불명확 또는 숨겨진 비용
Section titled “2. 가격 불명확 또는 숨겨진 비용”Why It Fails:
- 구매를 클릭하기 전에 가격을 표시하지 않음
- 추가 비용을 미리 알리지 않음
- 불명확한 구독 조건
예방 조치:
function PurchaseScreen({ product }) { return ( <div> {/* Show ALL costs upfront */} <h2>Premium Subscription</h2>
<div className="pricing"> <p className="price">{product.priceString}/month</p> <p className="taxes">Taxes may apply based on location</p> </div>
<div className="features"> <h3>Includes:</h3> <ul> <li>Ad-free experience</li> <li>Unlimited cloud storage</li> <li>Priority support</li> </ul> </div>
<div className="terms"> <p> Subscription renews automatically unless cancelled at least 24 hours before the end of the current period. </p> <p> Manage or cancel in Google Play Subscriptions. </p> </div>
<button onClick={handlePurchase}> Start Subscription </button> </div> );}3. 유도적 구독 패턴
3. 유도적 구독 패턴 섹션실패하는 이유:
- 고급 옵션 미리 선택
- 더 저렴한 대안 숨기기
- 취소하기 어려운 환경 만들기
- 가짜 긴급성 ('마지막 3 개의 자리!' )


예방책:
- 모든 구독 계층을 동일하게 표시하세요
- 취소가 명확하고 접근성이 좋은지 확인하세요
- 카운트다운 타이머나 가짜 부족함을 피하세요
- 비싼 옵션을 밀어내는 어두운 패턴을 사용하지 마세요
4. 테스트가 미비한 경우
4. 테스트가 미비한 경우실패하는 이유:
- 구매 시 앱이 충돌하는 경우
- 상품이 로드되지 않는 경우
- 구매 확인이 표시되지 않는 경우
- 구매 후 프리미엄 기능이 활성화되지 않는 경우
- 테스트는 시드 로드 된 빌드에서만 수행되었으며, 플레이 설치 된 테스트 트랙 대신
예방 조치:
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Comprehensive testing before submissionasync function testPurchaseFlow() { try { // 1. Test product loading const { products } = await NativePurchases.getProducts({ productIdentifiers: ['premium_monthly', 'premium_yearly'], productType: PURCHASE_TYPE.SUBS, }); console.log('✓ Products loaded:', products.length);
// 2. Test purchase flow const transaction = await NativePurchases.purchaseProduct({ productIdentifier: 'premium_monthly', planIdentifier: 'monthly-plan', productType: PURCHASE_TYPE.SUBS, }); console.log('✓ Purchase completed', transaction.transactionId);
// 3. Verify entitlements const { purchases } = await NativePurchases.getPurchases({ productType: PURCHASE_TYPE.SUBS, }); if ( purchases.some( (purchase) => purchase.productIdentifier === 'premium_monthly' && ['PURCHASED', '1'].includes(purchase.purchaseState ?? '') && purchase.isAcknowledged, ) ) { console.log('✓ Premium features unlocked'); }
// 4. Test restore await NativePurchases.restorePurchases(); console.log('✓ Restore works');
} catch (error) { console.error('✗ Test failed:', error); }}5. 개인 정보 보호 정책 위반
제목 "5. 개인 정보 보호 정책 위반"실패하는 이유:
- 앱에 개인 정보 보호 정책 링크가 없음
- 개인 정보 보호 정책에 접근할 수 없음
- 데이터 수집이 공개되지 않음
- 데이터 안전 섹션의 정보가 정확하지 않음
예방 조치:
- 플레이 스토어 목록에 개인 정보 보호 정책 추가
- 앱 설정에서 링크 포함
- 데이터 안전 섹션 정확하게 작성
- 새 데이터 수집 시 정책 업데이트
대안 결제 프로그램
대안 결제 프로그램구글의 대안 결제 프로그램은 지역에 따라 다르고 변경될 수 있습니다. 표준 구글 플레이 결제 외에 다른 것을 원한다면, 구현하기 전에 즉시 Play Console에서 정확한 시장 적합성, 필요한 API, 공개 언어를 확인하세요.
구독 관리
구독 관리쉬운 취소
Easy Cancellation사용자는 다음을 수행해야 합니다.
- 활성 구독을 쉽게 볼 수 있어야 합니다.
- 지원팀에 연락하지 않고 취소할 수 있어야 합니다.
- 취소가 유효해지는 시기를 이해할 수 있어야 합니다.
Implementation:
import { NativePurchases } from '@capgo/native-purchases';
function ManageSubscriptionButton() { const openManagement = async () => { try { // Opens Google Play subscription management await NativePurchases.manageSubscriptions(); } catch (error) { // Fallback to direct URL const playStoreUrl = 'https://play.google.com/store/account/subscriptions'; window.open(playStoreUrl, '_blank'); } };
return ( <button onClick={openManagement}> Manage Subscription in Google Play </button> );}취소 유효 기간
취소 유효 기간필수 공개:
- 취소가 유효해지는 시기는 언제인가요?
- 사용자는 기간이 끝날 때까지 접근 권한을 유지할까요?
- 부분 환불이 가능합니까?
function CancellationInfo() { return ( <div className="cancellation-info"> <h3>Cancellation Policy</h3> <ul> <li>Cancel anytime in Google Play</li> <li>Access continues until end of billing period</li> <li>No refunds for partial periods</li> <li>Resubscribe anytime to regain access</li> </ul>
<button onClick={() => NativePurchases.manageSubscriptions()}> Manage in Google Play </button> </div> );}제출 전 검사 목록
제출 전 검사 목록 제목
-
Billing 구현을 확인하세요
- Google Play Billing (native-purchases)을 사용하는 방법
- Play Console에서 생성한 모든 구독 제품
- 기본 계획 및 제안이 올바르게 구성되었습니다
- 제품이 활성화되어 있고 공개되었습니다
- 모든 목표 국가에 대한 가격이 설정되었습니다
-
테스트 구매 흐름
- 라이센스 테스트 계정 만들기
- 플레이 테스트 트랙에서 빌드를 설치하세요
- 각 구독 계층을 테스트하세요
- 제품이 올바르게 로드되는지 확인하세요
- 구매 완료를 테스트하세요
- 구매를 테스트하세요 광고가 나타나는지 확인하세요 프리미엄 기능이 잠금 해제되는지 확인하세요
- 구독 복원 테스트
- 다양한 기기에서 테스트
- 모든 복사본을 검토하세요
-
모든 복사본을 검토하세요
- 구매 전 가격이 명확하게 표시됩니다.
- 모든 수수료가 사전 공개됩니다.
- 구독 조건이 명확합니다.
- 취소 절차가 설명되어 있습니다.
- 위장 광고가 없습니다.
-
앱 콘텐츠 및 개인 정보
- 플레이 콘솔에서 개인 정보 정책이 연결되어 있습니다.
- 앱 내에서 개인 정보 정책이 접근 가능합니다.
- 광고 선언이 완료되었습니다.
- 앱이 게이트로 잠금된 경우 앱 접근 방법이 추가되었습니다.
- 데이터 안전 섹션은 정확하게 완료되었습니다.
- 권한이 정당화되고 문서화되었습니다.
-
콘텐츠 등급 및 관객
- 콘텐츠 등급 설문조사 완료
- 관객 및 콘텐츠 섹션 완료
- 등급이 실제 콘텐츠와 일치하는지 확인
- 설문조사에서 인앱 구매 선언
-
스토어 목록 준비
- 앱 설명이 정확한지
- 짧은 설명이 80자 이내인지
- 전체 설명이 4000자 이내인지
- 최소 2개의 전화 스크린샷 업로드
- 1024x500 피처 그래픽 업로드
- 스크린샷이 현재 버전을 보여주는지
- 모든 필요한 자산 업로드
리뷰 일정
리뷰 일정신규 개인 계정에 대한 생산 액세스: 일반적으로 7 일 이내에 신청 후 첫 번째 생산 리뷰: 역할: Capgo Builder / 네이티브 클라우드 빌드 제품 페이지. 역할: 짧은 UI 레이블 또는 네비게이션 아이템. 메시지 키 `native_build_builder_credit_first` (네이티브 빌드 빌더 크레딧 첫 번째) billing 또는 정책 문제가 제기되는 경우 종종 며칠, 때로는 더 오래 걸릴 수 있습니다 업데이트: 첫 번째 릴리스보다 빠를 수 있지만 여전히 리뷰됩니다 appeals: 계획에 몇 일을 할애하고 정확한 수정 및 리뷰어 지시서를 제공하십시오. :::tip Rolling Reviews 애플과 달리 구글은 앱을 지속적으로 리뷰합니다. 앱은 리뷰 기간 중에 언제든지 출시될 수 있으며, 고정된 시간에 출시되지 않습니다. :::
:::
구매 전 테스트
구매 전 테스트 섹션라이선스 테스트
라이선스 테스트 섹션-
테스트 계정 추가:
- 플레이 콘솔로 이동
- 설정 > 라이선스 테스트
- 테스트 계정으로 Gmail 계정 추가
-
테스트 환경에서 테스트:
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Test purchases with license test accountasync function testInSandbox() { const { isBillingSupported } = await NativePurchases.isBillingSupported(); if (!isBillingSupported) { console.error('Billing not supported in this environment'); return; }
// Fetch products (returns test pricing when using a license tester) const { products } = await NativePurchases.getProducts({ productIdentifiers: ['premium_monthly'], productType: PURCHASE_TYPE.SUBS, });
console.log('Test products:', products);
// Make test purchase (no charge) const transaction = await NativePurchases.purchaseProduct({ productIdentifier: 'premium_monthly', planIdentifier: 'monthly-plan', productType: PURCHASE_TYPE.SUBS, });
console.log('Test purchase complete:', transaction.transactionId);}- 테스트 배너 확인:
- 테스트 계정으로 구매할 때
- 구매 테스트 알림을 볼 수 있어야 합니다.
- 실제로 발생하는 비용은 없습니다.
내부 및 폐쇄 테스트 트랙
내부 및 폐쇄 테스트 트랙프로덕션 출시 이전:
- 빠른 QA를 위해 내부 테스트 트랙을 생성하거나 rộng한 테스트를 위해 폐쇄 테스트 트랙을 생성하거나 테스트 릴리즈를 업로드하고 배포하세요. 서명된 테스트 릴리즈를 업로드하고 배포하세요. Internal and Closed Testing Tracks
- Before production release:
.aabCreate an - 구매자 이메일 주소를 추가하고 옵인 링크를 공유하세요.
- 테스터가 구글 플레이에서 빌드를 설치하세요.
- 구글 플레이 설치된 빌드에서 구매 흐름이 종단에서 종단으로 작동하는지 확인하세요.
- 2023년 11월 13일 이후에 개인 개발자 계정이 생성된 경우, 최소 12명의 테스터가 폐쇄 테스트에 옵인된 14일 연속 동안 최소 12명의 테스터가 폐쇄 테스트에 옵인된 경우, 생산으로 신청하기 전에 유지하세요.
구글 플레이 결제를 확인할 때, 사이드 로드된 디버그 빌드는 플레이 설치된 테스트 빌드의 대체품이 아닙니다.
자연 구매
자연 구매클립보드에 복사
구매를 복원하세요import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
async function handlePurchase(productId: string, planIdentifier?: string) { try { setLoading(true);
const transaction = await NativePurchases.purchaseProduct({ productIdentifier: productId, planIdentifier, productType: planIdentifier ? PURCHASE_TYPE.SUBS : PURCHASE_TYPE.INAPP, });
console.log('Purchase token:', transaction.purchaseToken ?? transaction.receipt);
// Success - check entitlements from the store const { purchases } = await NativePurchases.getPurchases({ productType: planIdentifier ? PURCHASE_TYPE.SUBS : PURCHASE_TYPE.INAPP, });
const isOwned = purchases.some( (purchase) => purchase.productIdentifier === productId && (purchase.purchaseState === 'PURCHASED' || purchase.purchaseState === '1') && purchase.isAcknowledged, );
if (isOwned) { unlockPremiumFeatures(); showSuccess('Premium activated!'); }
} catch (error: any) { // Handle specific error cases switch (error.code) { case 'USER_CANCELLED': // User backed out - no error needed console.log('Purchase cancelled'); break;
case 'ITEM_ALREADY_OWNED': // They already own it - restore instead showInfo('You already own this! Restoring...'); await NativePurchases.restorePurchases(); break;
case 'ITEM_UNAVAILABLE': showError('This subscription is currently unavailable. Please try again later.'); break;
case 'NETWORK_ERROR': showError('Network error. Please check your connection and try again.'); break;
default: showError('Purchase failed. Please try again.'); console.error('Purchase error:', error); } } finally { setLoading(false); }}구매 상태를 모두 처리하세요
자연 구매import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
function RestorePurchasesButton() { const [loading, setLoading] = useState(false);
const handleRestore = async () => { setLoading(true);
try { await NativePurchases.restorePurchases();
const { purchases } = await NativePurchases.getPurchases({ productType: PURCHASE_TYPE.SUBS, });
const hasSubscription = purchases.some( (purchase) => purchase.productType === 'subs' && purchase.isAcknowledged, );
if (hasSubscription) { unlockPremiumFeatures(); showSuccess('Subscriptions restored!'); return; }
// Check one-time unlocks if needed const { purchases: iaps } = await NativePurchases.getPurchases({ productType: PURCHASE_TYPE.INAPP, }); const hasInApp = iaps.some((purchase) => purchase.productIdentifier === 'premium_unlock');
if (hasInApp) { unlockPremiumFeatures(); showSuccess('Previous purchases restored!'); return; }
showInfo('No previous purchases found.'); } catch (error) { showError('Failed to restore purchases. Please try again.'); } finally { setLoading(false); } };
return ( <button onClick={handleRestore} disabled={loading}> {loading ? 'Restoring...' : 'Restore Purchases'} </button> );}구독 상태 확인
구독 상태 확인 섹션import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
async function checkSubscriptionStatus() { try { const { purchases } = await NativePurchases.getPurchases({ productType: PURCHASE_TYPE.SUBS, });
const subscription = purchases.find( (purchase) => purchase.productIdentifier === 'premium_monthly' && (purchase.purchaseState === 'PURCHASED' || purchase.purchaseState === '1') && purchase.isAcknowledged, );
if (!subscription) { showPaywall(); return; }
console.log('Subscription active:', { productId: subscription.productIdentifier, expiresAt: subscription.expirationDate, willRenew: subscription.willCancel === false, purchaseToken: subscription.purchaseToken, });
unlockPremiumFeatures(); } catch (error) { console.error('Failed to check subscription:', error); }}앱이 거부되면
앱이 거부되면 섹션일반 정책 위반
일반 정책 위반 섹션결제 정책:
- 구글 플레이 빌링을 사용하지 않음
- 구독 약관을 속이는 것
- 비밀 비용
사용자 데이터 정책:
- 개인 정보 보호 정책이 누락됨
- 데이터 안전성 선언이 정확하지 않음
- 허용된 권한이 과도함
해결 단계
해결 단계 제목-
위반 통지서를 검토하십시오
- 특정 정책을 읽으십시오
- 구글이 표시한 것을 이해하십시오
- 제공된 예시를 확인하십시오
-
문제를 해결하십시오
- 원인에 대하여 해결하십시오, 증상만 해결하지 마십시오
- 테스트를 철저히 하십시오.
- 모든 변경 사항을 문서화하십시오.
-
제기 가능한 항목에 대한 항의 제출
Subject: Policy Violation Appeal - [App Name]Dear Google Play Review Team,I have received notification that my app violates [Policy X.Y].I have made the following changes to comply:1. [Specific change made]2. [Specific change made]3. [Specific change made]The updated version [version number] addresses all concerns raised.Test account for verification:Email: test@example.comPassword: TestPass123Thank you for your consideration.
-
리뷰에 다시 제출하거나 업데이트
- 수정된 버전 업로드
- 리뷰에 다시 제출
- Play Console에서 상태 모니터링
추가 자료
추가 자료 섹션전문가의 도움이 필요하세요?
Need Expert Help?플레이 스토어 검토를 위한 네비게이션은 복잡할 수 있습니다. 결제 준수, 앱 콘텐츠 선언, 테스트 트랙 설정을 결합해야 할 때 especialmente. 전문가의 도움을 필요로 할 때:
우리 팀과 상담 전화 예약 위한 도움:
- 플레이 스토어 검토를 위한 완벽한 준비
- 테스트 트랙 설정 및 테스터 모집
- 인앱 구매 구현 검토
- 데이터 안전성 및 개인 정보 보호 준수
- 거절 문제 해결 및 항의
- 앱 제출 프로세스 완료
우리는 수백 개의 앱을 성공적으로 플레이 스토어 제출을 지원해 왔으며 현재 요구 사항을 안내하는 데 도움이 될 수 있습니다.
지원 섹션
- implementation에 도움이 필요하신가요? 리뷰
- 네이티브 구매 문서를 확인하세요. Check Native Purchases documentation. __CAPGO_KEEP_0__ 안드로이드 샌드박스 테스트 가이드
- 가기 구글 플레이 개발자 지원
IAP에 대한 Android Play Store 리뷰 지침서에서 계속
IAP에 대한 Android Play Store 리뷰 지침서에서 계속하는 절이 기능을 사용하는 경우 IAP에 대한 Android Play Store 리뷰 지침서 @__CAPGO_KEEP_0__/native-purchases를 사용하여 @capgo/native-purchases의 네이티브 기능을 위해 @capgo/native-purchases를 사용하는 경우 for the native capability in Using @capgo/native-purchases, 암호화 구현 세부 사항 for the implementation detail in Encryption, 의무 준수 의무 준수 구현 세부 사항에 대해 Capgo 보안 스캐너 Capgo 보안 스캐너의 제품 워크플로에 대해 Capgo 보안 Capgo 보안의 제품 워크플로에 대해