콘텐츠로 바로가기

안드로이드 Play Store IAP 리뷰 지침

작동하는 릴리스 경로

제목이 “작동하는 릴리스 경로”인 섹션

__CAPGO_KEEP_0__
  1. Android 앱을 서명한 APK를 빌드하세요.

    새로운 Google Play 앱은 Android App Bundle (.aab)으로 업로드해야 하며, 시드 로드된 디버그 APK는 업로드하지 마십시오.

    Play App Signing을 사용하는 경우 업로드 키가 증가하는 것을 유지하고 안전하게 저장하세요. versionCode Android App Bundle 흐름

    Play 콘솔에서 앱 레코드를 생성하세요.

  2. 개발자 계정이 아직 없으시다면,

    Play Console 가입 부터 시작하세요. 그런 다음, 홈 > 앱 만들기 에서 언어, 앱/게임 종류, 무료/유료 상태, 지원 이메일, 그리고 필수 선언을 수락하세요., choose the language, app/game type, free/paid status, support email, and accept the required declarations.

    __CAPGO_KEEP_0__을 신중하게 선택하세요. Google은 유료 앱을 무료로 변경할 수 있지만, 무료로 제공된 앱은 유료로 전환할 수 없습니다.

    Play Console에서 앱을 생성하세요.

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

    생산 전 검토 전에 다음 Play Console 선언을 완료하세요.

    • 개인 정보 보호 정책
    • 광고
    • 앱 접근
    • 대상 청중 및 콘텐츠
    • 콘텐츠 등급
    • 데이터 안전
    • Sensitive 권한 선언이 필요한 경우
  4. Play-Installed 테스트 트랙을 실행하세요.

    빠른 QA를 위해 내부 테스트부터 시작하세요. 개발자 계정이 개인 계정으로 2023년 11월 13일 이후에 생성된 경우, 또한 최소 12명의 테스트자로 최소 14일 연속으로 닫힌 테스트를 완료해야 프로덕션 액세스를 얻습니다. Play 콘솔 내부 테스트 Verify Billing End-to-End Google Play에서 앱을 설치하지 마세요. locally exported APK에서 앱을 설치하세요. 그런 다음 다음을 확인하세요: Play에서 제품이 올바르게 로드되나요?

    구매 시트에

  5. 라이선스 테스터를위한 테스트 구매

    로고가 표시되나요?

    • Internal testing in Play Console
    • Verify Billing End-to-End Install the app from Google Play, not from a locally exported APK. Then confirm that: Products load from Play correctly
    • 구매 후 권한이 해제됩니다.
    • 구매 및 구독 관리 흐름이 작동합니다.

구글 플레이 결제 요구 사항

구글 플레이 결제 요구 사항

필수 결제 시스템

필수 결제 시스템

디지털 상품 및 서비스를 위해, 당신은 구글 플레이의 결제 시스템을 사용해야합니다.

디지털 상품 (플레이 결제 사용 필수):

  • 프리미엄 기능에 대한 구독
  • 인앱 화폐 또는 크레딧
  • Digital content (ebooks, music, videos)
  • 게임 업그레이드 및 파워업
  • 앱 언락 및 프리미엄 티어

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

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

:::note 구독 설정 Play Console에서 Android 구독을 현재 구독 -> 기본 계획 -> 제안 모델. 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);

투명성 및 공개 의무

투명성 및 공개 의무

사전 요금 공개

사전 요금 공개

구글 플레이는 구매 전에 모든 비용을 명확하게 공개해야 함:

필수 요소:

  • 사용자의 지역 통화로 정확한 가격
  • Billing 주기 (월, 년 등)
  • 구독에 포함된 내용
  • 소개 요금제의 총 비용
  • __CAPGO_KEEP_0__

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

자동 갱신 공지

자동 갱신 공지

구독이 자동 갱신되기 전에 Google은 다음과 같이 요구합니다:

  • 갱신이 발생할 것을 명확히 알립니다.
  • 갱신 가격을 기억합니다.
  • 취소가 쉬워집니다.

플랫폼 간 가격 명확성

플랫폼 간 가격 명확성

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

세금, 지역 통화, 또는 매장 경제로 인해 가격이 다를 수 있지만, 구매 UI는 이러한 차이점을 숨기거나 Google Play가 청구할 갱신 비용과 다른 갱신 비용을 암시해서는 안 됩니다.

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

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

Play Store 목록에 링크

  1. Play 콘솔에 개인 정보 보호 정책 URL 추가

    • 구글 플레이에서 구독 제품을 올바르게 구성하십시오.
    • __CAPGO_KEEP_0__은 공개적으로 접근할 수 있어야 합니다.
    • __CAPGO_KEEP_0__은 앱의 언어와 동일해야 합니다.
  2. 앱 내에서 링크를 제공합니다.

    • 앱 설정에서 개인 정보 정책을 표시합니다.
    • 사용자 데이터를 수집하기 전에 표시합니다.
    • 쉽게 발견할 수 있도록 하세요.

예시 구현:

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 앱의 경우 다음을 선언하세요:

  • 구매 내역 수집
  • 영수증을 위한 이메일 주소
  • 사기 방지 purposes의 기기 ID
  • 결제 정보 처리
  • 분석 데이터 수집

__CAPGO_KEEP_0__

앱 콘텐츠 선언

앱 콘텐츠 선언

Google Play 리뷰는 바이너리만이 아닙니다. 프로덕션 릴리즈 전에 선언을 완료하세요. 정책 및 프로그램 > 앱 콘텐츠.

주의 깊게 검토해야 할 최소한의 항목

  • 개인 정보 보호 정책: Play Console에서 공개 URL, 필요 시 앱 내 진입점
  • 광고: 앱에 광고가 포함되어 있는지 선언
  • 앱 접근: 검토자에게 작업할 수 있는 자격증 또는 모든 화면이 블록된 경우 명확한 테스트 경로를 제공
  • 대상 청취자 및 콘텐츠: 앱의 실제 청취자를 맞춤
  • 콘텐츠 등급: 앱이 등급되지 않도록 IARC 설문조사를 완료
  • 데이터 안전: 데이터 수집, 공유 및 보안 관행을 정확하게 선언

1. 결제 구현이 누락되거나 잘못된 경우

Section titled “1. Missing or Incorrect Billing Implementation”

왜 실패하는가:

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

예방:

// ✅ 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. 유도적인 구독 패턴’

Why It Fails:

  • Pre-selecting premium options
  • premium 옵션을 미리 선택하는 것
  • 비용이 저렴한 대안을 숨기는 것
  • 취소가 어려운 환경을 만드는 것

가짜 긴급성을 이용하는 것 (“마지막 3 개의 자리!”)

설명 Best Practices

마케팅 지침

  • 예방 조치:
  • 모든 구독 계층을 동일하게 표시하는 것
  • 취소가 명확하고 접근성이 좋은 환경을 만드는 것
  • 카운트다운 타이머나 가짜 부족을 피하는 것

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. 개인 정보 보호 정책 위반 섹션

왜 실패하는가:

  • 앱에 개인정보 보호 정책 링크가 없습니다.
  • 개인정보 보호 정책이 접근할 수 없습니다.
  • 데이터 수집이 공개되지 않았습니다.
  • 데이터 안전 섹션의 정보가 정확하지 않습니다.

예방책:

  • 플레이 스토어 목록에 개인정보 보호 정책을 추가하세요.
  • 앱 설정에 링크를 포함하세요.
  • 데이터 안전 섹션을 정확하게 작성하세요.
  • 새로운 데이터 수집을 추가할 때 정책을 업데이트하세요.

Google의 대안 결제 프로그램은 지역에 따라 다르며 변경될 수 있습니다. 표준 Google Play 결제 외에 다른 것을 원한다면, implementation하기 전에 Play Console에서 정확한 시장 적합성, 필요한 API, 및 disclosure 언어를 확인하세요.

취소가 쉬워진다

취소가 쉬워진다 섹션

사용자는 다음을 이해해야 합니다.

  • 활성 구독을 쉽게 볼 수 있다
  • 지원에 연락하지 않고 취소할 수 있다
  • 취소가 언제 효과가 있는지 이해한다

구현:

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. 결제 구현을 확인하세요

    • 구글 플레이 결제 (native-purchases)를 사용합니다
    • 플레이 콘솔에서 생성한 모든 구독 제품
    • 기본 계획 및 제안이 올바르게 구성되었습니다
    • 제품이 활성화되고 공개되었습니다
    • 모든 목표 국가에 대한 가격이 설정되었습니다
  2. 테스트 구매 흐름

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

    • 구매 전에 가격이 명확하게 표시됩니다
    • 모든 수수료가 구매 전에 공개됩니다
    • 구독 조건이 명확합니다
    • 취소 절차가 설명됩니다
    • 위장 광고가 없습니다
  4. 앱 콘텐츠 및 개인 정보

    • Play Console에서 연결된 개인 정보 정책
    • 앱 내에서 개인 정보 정책 접근 가능
    • 광고 선언 완료
    • 앱이 게이트드라면 앱 접근 지침 추가
    • 데이터 안전 섹션 정확하게 완료
    • 권한이 정당화되고 문서화
  5. 콘텐츠 등급 및 대상 청중

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

    • 앱 설명이 정확합니다
    • 짧은 설명은 80자 이내입니다
    • 전체 설명은 4000자 이내입니다
    • 최소 2개의 전화 스크린샷이 업로드되었습니다
    • 1024x500 피처 그래픽이 업로드되었습니다
    • 스크린샷은 현재 버전을 보여줍니다
    • 필요한 모든 자산이 업로드되었습니다

리뷰 타임라인

리뷰 타임라인

신규 개인 계정에 대한 프로덕션 접근: 일반적으로 7일 이내에 신청 후에 첫 번째 출시 검토: billing 또는 정책 문제가 제기되는 경우 종종 수일, 때로는 더 오래 걸릴 수 있습니다. 업데이트: 첫 번째 출시보다 빠를 수 있지만 여전히 검토됩니다. 소송: 수일 동안 계획하고 정확한 수정 및 리뷰어 지시서를 제공하세요.

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

제출 전 테스트

제출 전 테스트

라이선스 테스트

라이선스 테스트
  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를 위해 만들거나 rộng한 테스트를 위해 만들기 위한 Upload a signed 테스트 릴리즈를 업로드하고
  2. 테스터 이메일 주소 추가하고 옵인 링크 공유하기 .aab Google Play에서 빌드를 설치하도록 테스터에게 지시하기
  3. Play에서 설치된 빌드에서 Google Play 결제 흐름이 종단에서 종단으로 작동하는지 확인하기
  4. 2023년 11월 13일 이후에 개인 개발자 계정이 생성된 경우, 최소 12명의 테스터가 14일 연속으로 폐쇄 테스트에 동의한 경우에만 생산 환경에 신청할 수 있습니다.
  5. Google Play 결제를 검증하기 위한 Play 설치된 테스트 빌드는 시드 로드된 디버그 빌드 대신 사용할 수 없습니다.
  6. If your personal developer account was created after November 13, 2023, keep at least 12 testers opted in to a closed test for 14 consecutive days before applying for production

If your personal developer account was created after November 13, 2023, keep at least 12 testers opted in to a closed test for 14 consecutive days before applying for production

자연스러운 Native 구매

자연스러운 Native 구매 방법

모든 구매 상태를 처리

모든 구매 상태를 처리하는 방법
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 Console에서 상태 모니터링

추가 리소스

추가 리소스 섹션

전문가의 도움이 필요하세요?

전문가의 도움이 필요하세요?

Play Store 리뷰를 관리하는 것은 복잡할 수 있습니다. 특히, 결제 규정 준수, 앱 콘텐츠 선언, 테스트 트랙 설정과 같은 여러 요소를 조합해야 할 때입니다. 개인화된 지원이 필요하시면:

우리 팀과 상담 전화 예약 에 도움을 받으세요:

  • Play Store 리뷰 준비 완료
  • 테스트 트랙 설정 및 테스터 모집
  • IAP 구현 검토
  • 데이터 안전 및 개인 정보 보호 준수
  • 반려 처리 및 항소
  • Play Store 제출 완료

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

implementation에 도움이 필요합니까?