내용으로 건너뛰기

Android Play Store 리뷰 지침서

GitHub

Google Play에서 Android 앱을 승인받기 위해서는 Google의 정책을 준수해야 하며, 특히 인앱 구매 및 구독이 있는 앱의 경우 더욱 그렇습니다. 이 가이드는 승인 검토를 성공적으로 통과하기 위해 필요한 모든 것을 다룹니다.

Release Path That Works

제목: Release Path That Works
  1. 구글 플레이 앱으로 출시하기

    새로운 Google Play 앱은 Android App Bundle (.aab로 업로드해야 합니다. (debug APK를 sideload하는 것보다)

    업로드 횟수 versionCode 업로드 횟수가 증가하고 Play App Signing을 사용하는 경우 업로드 키를 안전하게 저장하세요.

    Android App Bundle 흐름

  2. Play Console에서 앱 레코드를 생성하세요

    개발자 계정이 아직 없다면 Play Console 가입. 그런 다음, 홈 > 앱 만들기, 언어, 앱/게임 종류, 무료/유료 상태, 지원 이메일, 그리고 필수 선언을 수락하세요.

    유료/무료 설정을 신중하게 선택하세요. 구글은 유료 앱을 무료로 변경할 수 있지만, 무료로 제공된 앱은 유료로 변경할 수 없습니다.

    Play Console에서 앱 만들기

  3. 앱 콘텐츠 및 스토어 목록 완료

    제품 검토 이전에, 다음 Play Console 선언을 완료하세요:

    • 개인 정보 보호 정책
    • 광고
    • 앱 접근
    • 대상 청중 및 콘텐츠
    • 콘텐츠 등급
    • 데이터 안전
    • 적용되는敏감한 권한 선언
  4. 플레이어 설치 테스트 트랙을 실행하세요

    시작하세요 내부 테스트 빠른 QA를 위해. 개발자 계정이 개인 계정으로 2023년 11월 13일 이후에 생성된 경우, 또한 최소 12명의 테스터가 14일 연속으로 동의한 후閉鎖된 테스트를 완료해야 합니다. Play Console 내부 테스트 Billing을 끝까지 검증하세요

    Google Play에서 앱을 설치하고, locally exported APK에서 설치하지 마세요. 그런 다음 확인하세요:

  5. Billing Verification

    구글 플레이에서 앱을 설치하세요. 로컬로 내보낸 APK가 아닌. 그런 다음 확인하세요:

    • 제품은 Play에서 올바르게 로드됩니다.
    • 구매 시트는 테스트 구매 라이선스 테스터에게 라이센스 테스트를 위한 배너가 표시됩니다.
    • 구매 후 권한이 해제됩니다.
    • 구매 및 구독 관리 흐름이 작동합니다.

구글 플레이 결제 요구 사항

구글 플레이 결제 요구 사항

필수 결제 시스템

필수 결제 시스템

디지털 상품과 서비스를 판매할 때, 해야합니다. 구글 플레이 결제 시스템을 사용하세요:

디지털 상품 (Play Billing 사용 필수):

  • 프리미엄 기능의 구독
  • 인앱 화폐 또는 크레딧
  • 디지털 콘텐츠 (전자책, 음악, 비디오)
  • 게임 업그레이드 및 파워업
  • 앱 언락 및 프리미엄 티어

물리적 상품 (Play Billing 사용 불가):

  • 물리적 상품
  • 실세계 서비스
  • 비영리 단체에 대한 일회금 기부

:::note 구독 설정 Play 콘솔에서 현재 구독 -> 기본 계획 -> 제안 모델. In native-purchases, 기본 계획 ID를 포함하여 planIdentifier. :::

자연 구매와 함께 구현

구현과 함께 자연 구매
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Ensure billing is available on the device
const { 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 Console
const 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 디자인 최적화

예시: 위반되지 않은 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>
);
}

자동 갱신 고지

자동 갱신 고지 섹션

구글이 구독이 자동 갱신되기 전에 요구하는 것

  • 자동 갱신이 발생하기 전에 명확한 고지
  • 가격 알림
  • 취소하기를 쉽게

플랫폼 간 가격 명확성

플랫폼 간 가격 명확성

여러 플랫폼에서 동일한 권한을 판매할 경우, 제품 이름, 청구 기간, 포함된 혜택, 갱신 언어를 일치시켜 사용자가 놀라지 않도록 하십시오.

가격 차이로 인해 가격이 다르게 나올 수 있지만, 구매 UI는 가격 차이 또는 갱신 비용이 Google Play에서 청구하는 것과 다른 비용임을 암시하지 않도록 하십시오.

개인 정보 보호 정책 요구 사항

개인 정보 보호 정책 요구 사항

필수 개인 정보 보호 정책

제목: "필수 개인 정보 보호 정책"

앱에 내결제 기능이 포함되어 있다면 반드시:

  1. Play Store 목록에 링크

    • Play 콘솔에서 개인 정보 보호 정책 URL 추가
    • 공개적으로 접근 가능해야 함
    • 앱의 언어와 동일한 언어로 작성해야 함
  2. 앱 내에 링크

    • 앱 설정에서 개인 정보 보호 정책 표시
    • 사용자 데이터를 수집하기 전에 표시
    • 쉽게 발견할 수 있도록 함

예시 Implementation:

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(위조 방지)
  • 결제 정보 처리
  • 분석 데이터 수집

데이터 안전 섹션은 법적으로 의무입니다. 정확하지 않은 선언은 앱 제거로 이어집니다.

앱 콘텐츠 선언

앱 콘텐츠 선언 섹션

Google Play 리뷰는 바이너리만으로는 아니다. 생산 버전 출시 전에 다음을 완료하세요..

리뷰에 주의 깊게 다루어야 할 최소 세 가지:

  • 개인 정보 보호 정책: Play 콘솔에 공개 URL을 제공하고, 필요할 때 인앱 진입점을 제공하세요.
  • 광고: 앱이 광고를 포함하는지 선언하세요.
  • 앱 접근: 리뷰어에게 작업할 수 있는 자격증 또는 가시적인 테스트 경로를 제공하세요.
  • 대상 청취자 및 콘텐츠: 앱의 실제 청취자와 일치하세요.
  • 콘텐츠 등급: 앱이 비평가로 표시되지 않도록 IARC 설문조사를 완료하세요.
  • 데이터 안전: 정확하게 수집, 공유 및 보안 정책을 선언하세요.

일반 거절 사유

일반 거절 사유

1. 결제 구현이 누락되거나 정확하지 않음

1. 결제 구현이 누락되거나 정확하지 않음

왜 실패하는가:

  • 구글 플레이 빌링을 사용하지 않는 디지털 상품
  • 구글 플레이 빌링 API를 사용하지 않는 오래된 빌링 API
  • 구독을 위한 커스텀 결제 솔루션을 구현

예방책:

// ✅ 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. 가격이 불분명하거나 숨겨진 비용

제목: 2. 가격이 불분명하거나 숨겨진 비용

왜 실패하는가:

  • 구매를 클릭하기 전에 가격이 표시되지 않음
  • 추가 비용이 미리 알리지 않음
  • 구독 약관이 불분명함

예방대책:

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 submission
async 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, 및 공개 언어를 확인하세요.

구독 관리

구독 관리

쉬운 취소

쉬운 취소

사용자는 다음을 수행해야 합니다:

  • 활성 구독을 쉽게 확인할 수 있어야 합니다.
  • 지원팀에 연락하지 않고 취소할 수 있어야 합니다.
  • 취소가 유효할 때 알 수 있어야 합니다.

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>
);
}

제출 전 검토 목록

제목 "제출 전 검토 목록"

제출 전 검토 목록

  1. Billing 구현을 확인하세요

    • Google Play Billing (native-purchases)을 사용하여
    • Play Console에서 생성한 모든 구독 제품
    • 기본 계획과 제안이 올바르게 구성되었습니다
    • 제품이 활성화되고 공개되었습니다
    • 모든 목표 국가에 대한 가격이 설정되었습니다
  2. 테스트 구매 흐름

    • 라이선스 테스트 계정을 생성하세요
    • Play 테스트 트랙에서 빌드를 설치하세요.
    • 각 구독 등급을 테스트하세요.
    • 제품이 올바르게 로드되는지 확인하세요.
    • 구매가 완료되는지 테스트하세요.
    • 구매를 테스트 구매 광고가 나타나는지 확인하세요.
    • 프리미엄 기능이 해제되는지 확인하세요.
    • 구독 복원 테스트하세요.
    • 다양한 기기에서 테스트하세요.
  3. 모든 복사본을 검토하세요.

    • 구매 전에 가격이 명확하게 표시되는지 확인하세요.
    • 모든 수수료는 사전에 공개됩니다.
    • 구독 약관은 명확합니다.
    • 취소 절차는 설명되어 있습니다.
    • 위장된 주장은 없습니다.
  4. 앱 콘텐츠 및 개인 정보

    • Play Console에서 개인 정보 정책이 연결되어 있습니다.
    • 앱 내에서 개인 정보 정책이 접근 가능합니다.
    • 광고 선언이 완료되었습니다.
    • 앱이 게이트드라면 앱 접근 방법이 추가되었습니다.
    • 데이터 안전 섹션은 정확하게 완료되었습니다.
    • 권한이 정당화되고 문서화되었습니다.
  5. 콘텐츠 등급 및 대상자

    • 콘텐츠 등급 설문조사 완료
    • 목표 청중과 콘텐츠 섹션 완료
    • 등급이 실제 콘텐츠와 일치함을 보장
    • 설문조사에서 인앱 구매 선언
  6. 스토어 목록 준비

    • 앱 설명이 정확함
    • 짧은 설명이 80자 이내
    • 전체 설명이 4000자 이내
    • 최소 2대의 전화 스크린샷 업로드
    • 1024x500 피처 그래픽 업로드
    • 스크린샷이 현재 버전임을 보장
    • 모든 필수 자산 업로드

리뷰 타임라인

리뷰 타임라인 섹션

신규 개인 계정에 대한 생산 액세스: 일반적으로 애플리케이션을 제출한 후 7일 이내에 첫 번째 생산 리뷰: 일부 경우 수요일에, 때로는 계산 및 정책 문제가 제기될 때 더 오래 걸릴 수 있습니다. Updates: 업데이트: Appeals: appeals:

일정 기간 동안 계획하고 정확한 수정 및 리뷰어 지시서를 제공하세요.

:::tip Rolling Reviews 애플과 달리 구글은 앱을 지속적으로 리뷰합니다. 앱은 리뷰 기간 중에 언제든지 출시될 수 있으며, 고정된 시간에 출시되지 않습니다. :::

Section titled “제출 전 테스트”
  1. 테스트 계정 추가:

    • Play 콘솔로 이동
    • 설정 > 라이선스 테스트
    • 테스트 계정으로 Gmail 추가
  2. 테스트 환경에서 테스트:

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Test purchases with license test account
async 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);
}
  1. 테스트 배너 확인:
    • 테스트 계정으로 구매 시
    • 테스트 구매 알림을 확인해야 함
    • 실제 요금이 발생하지 않습니다.

내부 및 폐쇄 테스트 트랙

내부 및 폐쇄 테스트 트랙

제품 출시 전:

  1. 빠른 QA를 위해 내부 테스트 트랙을 만들거나 더 광범위한 테스트 폐쇄 테스트 테스트 릴리즈를 업로드하고 공식된 테스트 릴리즈를
  2. 테스터 이메일 주소 추가하고 .aab 옵인 링크 공유
  3. 테스터 이메일 주소 추가하고 옵인 링크 공유
  4. Google Play에서 빌드를 설치하도록 테스터에게 지시하십시오.
  5. 구글 플레이 설치된 빌드에서 구매 흐름이 종단에서 종단으로 작동하는지 확인하십시오.
  6. 2023년 11월 13일 이후에 개발자 계정이 생성된 경우, 최소 14일 연속으로 폐쇄 테스트에 참가한 최소 12명의 테스터를 최소 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);
}
}

앱이 거부되면

앱이 거부되면 섹션

일반 정책 위반

일반 정책 위반 섹션

결제 정책:

  • 구글 플레이 빌링을 사용하지 않음
  • 구독 약관을 속이기
  • 숨겨진 비용

사용자 데이터 정책:

  • 개인 정보 보호 정책 누락
  • 데이터 안전성聲明 오류
  • 허용된 권한 초과
  1. 위반 통지서 검토

    • 특정 정책을 읽어보세요
    • 구글이 왜 이 문제를 지적했는지 이해하세요
    • 제공된 예제를 확인하세요
  2. 문제를 해결하세요

    • 원인에 대처하기, 증상만 해결하지 마세요
    • 수정 후 철저히 테스트하세요
    • 변경 사항을 모두 문서화하세요
  3. 적용되는 경우 항의 제출

    명확성 및 항의 절차

    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.com
    Password: TestPass123
    Thank you for your consideration.

    문서화 예시 요청

  4. 재제출 또는 업데이트

    • 수정된 버전 업로드
    • 재제출을 위해
    • Play 콘솔에서 상태 모니터링

추가 리소스

추가 리소스 섹션

전문적인 도움이 필요하세요?

전문가의 도움을 필요로 합니까?

우리 팀과 상담을 예약하세요

위한 도움을 받으세요: 플레이 스토어 검토 준비 완료

  • 테스트 트랙 설정 및 테스터 모집
  • Book a consultation call with our team
  • 구매 내역 구현 검토
  • 데이터 안전 및 개인 정보 보호 준수
  • 거절 문제 해결 및 항소
  • 완전한 앱 제출 프로세스

우리 전문가들은 수백 개의 앱을 성공적으로 Play Store 제출을 안내하고 현재 요구 사항을 안내할 수 있습니다.

지원

지원

구매 내역 구현에 도움이 필요하신가요?

IAP를 위한 안드로이드 플레이 스토어 리뷰 지침에서 계속

IAP를 위한 안드로이드 플레이 스토어 리뷰 지침에서 계속

이러한 기능을 사용 중이라면 안드로이드 플레이 스토어 리뷰 지침을 IAP로 안드로이드 플레이 스토어 리뷰 지침을 IAP로 보안 및 규정 준수 계획을 세우기 위해 @capgo/native-purchases를 사용합니다. Using @capgo/native-purchases를 사용하여 @capgo/native-purchases의 네이티브 기능을 사용합니다. 암호화 암호화 규정 준수 implementation 세부 사항에 대한 Compliance에 대해 Capgo 보안 스캐너 Capgo 보안 스캐너의 제품 워크플로에 대해 Capgo 보안 제품 워크플로우에서 Capgo 보안을 위해.