Ir al contenido

Directrices de revisión de Android Play Store para IAP

GitHub

Para obtener aprobación de tu aplicación Android en Google Play, debes cumplir con las políticas de Google, especialmente para aplicaciones con compras en la aplicación y suscripciones. Esta guía cubre todo lo que necesitas para pasar la revisión con éxito.

  1. Crear una Aplicación de Android Firmada

    Nuevas aplicaciones de Google Play deben subirse como un Android App Bundle (.aab), no como un APK de depuración sideloaded.

    Mantén tu versionCode que aumenta en cada subida y almacena tu clave de subida de manera segura si utilizas Play App Signing.

    Flujo de Android App Bundle

  2. Crear el Registro de Aplicación en la Consola de Play

    Si no tienes una cuenta de desarrollador aún, comienza con Registro de Play Console. Luego, en Inicio > Crear aplicaciónseleccione el idioma, tipo de aplicación/juego, estado de pago (gratuito/pagado), correo electrónico de soporte y acepte las declaraciones requeridas.

    Elige con cuidado el estado de pago. Google te permite cambiar una aplicación pagada a gratuita más tarde, pero una vez que una aplicación ha sido ofrecida de forma gratuita, no se puede cambiar a pagada.

    Crear aplicación en Play Console

  3. Complete el contenido de la aplicación y la lista de tienda

    Antes de la revisión de producción, complete las declaraciones requeridas en Play Console:

    • Política de privacidad
    • Anuncios
    • Acceso a la aplicación
    • Público objetivo y contenido
    • Clasificación del contenido
    • Seguridad de datos
    • Declaraciones de permisos sensibles, si corresponde
  4. Ejecutar un Test Track Instalado en Play

    Comience con pruebas internas para pruebas de QA rápidas. Si su cuenta de desarrollador es una cuenta personal creada después del 13 de noviembre de 2023, también debe completar un test cerrado con al menos 12 participantes que hayan optado por participar durante 14 días consecutivos antes de tener acceso a la producción.

    Pruebas internas en Play Console

  5. Verificar la facturación de principio a fin

    Instale la aplicación desde Google Play, no desde un APK exportado localmente. Luego confirme que:

    • Los productos se cargan correctamente desde Play
    • La hoja de compra muestra un compra de prueba Banner para pruebas de licencia
    • Las Entidades se desbloquean después de la compra
    • Flujos de restauración y gestión de suscripciones funcionan

Para bienes y servicios digitales, usted debe utilizar el sistema de facturación de Google Play:

Bienes digitales (debe usar facturación de Play):

  • Suscripciones a características premium
  • In-moneda de la aplicación o créditos
  • Contenido digital (libros electrónicos, música, videos)
  • Actualizaciones y poderes del juego
  • Desbloqueos de la aplicación y niveles premium

Artículos físicos (No se puede utilizar Play Billing):

  • Mercancías físicas
  • Servicios del mundo real
  • Donaciones una vez a organizaciones sin fines de lucro

:::nota Configuración de suscripciones En la consola de Play, configura las suscripciones de Android utilizando el modelo actual de suscripción -> plan base -> oferta En la configuración de la suscripción, pasa el ID del Plan Base con __CAPGO_KEEP_0__ subscription -> base plan -> offer native-purchasesmodel. In 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);

Google Play exige una clara declaración de todos los costos antes de la compra:

Elementos obligatorios:

  • Precio exacto en la moneda local del usuario
  • Frecuencia de facturación (mensual, anual, etc.)
  • ¿Qué se incluye en la suscripción?
  • Costo total para ofertas introductorias
  • Cuándo ocurrirán los cargos

Mejores prácticas de diseño de interfaz de usuario

Ejemplo de interfaz de usuario conforme:

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

Antes de que una suscripción se renueve automáticamente, Google requiere:

  • Notificación clara de que se producirá la renovación
  • Recordatorio del precio
  • Acceso fácil a la cancelación

Si vende la misma concesión en múltiples plataformas, mantenga el nombre del producto, el período de facturación, los beneficios incluidos y el lenguaje de renovación alineados para que los usuarios no se sorprendan.

Los precios pueden diferir legítimamente debido a impuestos, moneda local o economía de tienda, pero la interfaz de compra nunca debe ocultar esas diferencias o implicar un costo de renovación diferente al que Google Play cobrará.

Si su aplicación incluye compras en la aplicación, debe:

  1. Enlace en la lista de la Tienda de Juegos de Google

    • Agregue la URL de la política de privacidad en el Console de Play
    • Debe ser accesible públicamente
    • Debe estar en el mismo idioma que su aplicación
  2. Enlace Dentro de la Aplicación

    • Mostrar política de privacidad en ajustes de la aplicación
    • Mostrar antes de recopilar cualquier dato del usuario
    • Hacerlo fácilmente descubrible

Ejemplo de Implementación:

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

Google Play requiere una declaración detallada en la sección de Seguridad de Datos:

For IAP Apps, Declare:

  • Declarar: Historial de compras
  • Direcciones de correo electrónico (para recibos)
  • IDs de dispositivo (para prevención de fraude)
  • Manejo de información de pago
  • Recopilación de datos de análisis

La sección de seguridad de datos es vinculante legalmente. Las declaraciones inexactas pueden provocar la eliminación de la aplicación.

La revisión de Google Play no es solo sobre el binario. Antes de un lanzamiento de producción, complete las declaraciones en Políticas y programas > Contenido de la aplicación.

El mínimo para revisar con cuidado:

  • Política de privacidad: URL pública en la consola de Play, más un punto de entrada en la aplicación cuando sea necesario
  • Publicidad: Declarar si la aplicación contiene publicidad
  • Acceso a la aplicación: Proporcionar a los revisores credenciales de trabajo o un claro camino de prueba si cualquier pantalla está bloqueada
  • Público objetivo y contenido: Ajustar el público real de la aplicación
  • Clasificaciones de contenido: Completar la encuesta de IARC para que la aplicación no esté marcada como no calificada
  • Seguridad de datos: Declarar prácticas de recopilación, compartición y seguridad de manera precisa

1. Implementación de facturación incompleta o incorrecta

Sección titulada “1. Implementación de facturación incompleta o incorrecta”

¿Por qué falla:

  • No utilizar Google Play Billing para bienes digitales
  • Utilizar APIs de facturación deprecated
  • Implementando soluciones de pago personalizadas para suscripciones

Prevención:

// ✅ 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);

Por qué falla:

  • Solo se muestra el precio después de hacer clic en 'comprar'
  • Tarifas adicionales no se divulgadas con antelación
  • Términos de suscripción vagos

Prevención:

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

Por qué falla:

  • Seleccionar opciones premium de antemano
  • Ocultar alternativas más económicas
  • Hacer difícil la cancelación
  • Urgencia falsa (“¡Solo quedan 3 plazas!”)

Prácticas recomendadas para la descripción

Directrices de marketing

Prevención:

  • Mostrar todas las capas de suscripción de manera igualitaria
  • Hacer la cancelación clara y accesible
  • Evitar temporizadores de cuenta atrás o escasez falsa
  • No utilice patrones oscuros para empujar opciones costosas

Por qué falla:

  • La aplicación se bloquea al realizar una compra
  • Los productos no se cargan
  • La confirmación de compra no se muestra
  • Las características premium no se desbloquean después de la compra
  • Las pruebas solo se realizaron en versiones instaladas por sideload en lugar de un track de prueba instalado en Play

Prevención:

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

Por qué falla:

  • No se incluye enlace a la política de privacidad en la aplicación
  • La política de privacidad no es accesible
  • No se informa la recopilación de datos
  • La sección de Seguridad de Datos no es precisa

Prevención:

  • Añada la política de privacidad a la lista de la tienda Play
  • Incluya el enlace en la configuración de la aplicación
  • Llene con precisión la sección de Seguridad de Datos
  • Actualice la política cuando se agregue una nueva recopilación de datos

Los programas de facturación alternativos de Google son específicos de la región y pueden cambiar. Si desea algo diferente a la facturación estándar de Google Play Billing, confirme la elegibilidad del mercado exacta, los requisitos de API y el lenguaje de divulgación en el Console de Play inmediatamente antes de la implementación.

Los usuarios deben poder:

  • Ver suscripciones activas fácilmente
  • Cancelar sin contactar con el soporte
  • ¿Cuándo tiene efecto la cancelación?

Implementación:

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

Declaración de información obligatoria:

  • ¿Cuándo tiene efecto la cancelación?
  • ¿Los usuarios conservan el acceso hasta que termine el período?
  • ¿Están disponibles reembolsos parciales?
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>
);
}

Lista de verificación previa a la presentación

Sección titulada “Lista de verificación previa a la presentación”

Lista de Verificación Pre-Envío

  1. Verificar la Implementación de Facturación

    • Usando Google Play Billing (a través de native-purchases)
    • Todos los productos de suscripción creados en el Console de Play
    • Los planes base y las ofertas configuradas correctamente
    • Los productos están activados y publicados
    • El precio establecido para todos los países objetivo
  2. Flujos de Compra de Prueba

    • Crear una cuenta de prueba de licencia
    • Instalar la compilación desde una pista de prueba de Play
    • Probar cada nivel de suscripción
    • Verificar que los productos se carguen correctamente
    • La compra de prueba se completa
    • Confirme la compra de prueba el banner aparece
    • Verifique que se desbloqueen las características premium
    • La restauración de la suscripción de prueba
    • La prueba en varios dispositivos
  3. Revisar todos los copias

    • El precio se muestra claramente antes de la compra
    • Todos los honorarios se divulgados de antemano
    • Los términos de la suscripción son claros
    • Se explica el proceso de cancelación
    • No declaraciones engañosas
  4. Contenido de la aplicación y privacidad

    • Política de privacidad vinculada en el Console de Play
    • Política de privacidad accesible en la aplicación
    • Declaración de anuncios completada
    • Instrucciones de acceso a la aplicación agregadas si la aplicación está bloqueada
    • Sección de seguridad de datos completada con precisión
    • Permisos justificados y documentados
  5. Clasificación de contenido y audiencia

    • Complete la encuesta de clasificación de contenido
    • Complete la sección de audiencia objetivo y contenido
    • Asegúrese de que la clasificación coincida con el contenido real
    • Declarar compras en la aplicación en la encuesta
  6. Preparar lista de tiendas

    • Descripción de la aplicación precisa
    • La descripción corta está dentro de 80 caracteres
    • La descripción completa está dentro de 4000 caracteres
    • Se han subido al menos 2 capturas de pantalla de teléfono
    • Se ha subido una imagen gráfica de características de 1024x500
    • Las capturas de pantalla muestran la versión actual
    • Se han subido todos los activos requeridos

Acceso a producción para nuevos cuentas personales: Normalmente 7 días o menos después de que apliques Primera Revisión de Producción: A menudo varios días, a veces más tiempo si se plantean preguntas sobre facturación o políticas Actualizaciones: A menudo más rápido que una primera versión, pero aún revisada Reclamos: Planifica varios días y proporciona arreglos exactos e instrucciones para el revisor

:::tip Revisión Continua A diferencia de Apple, Google revisa las aplicaciones de manera continua. Tu aplicación puede estar disponible en cualquier momento durante el período de revisión, no en un momento fijo. :::

  1. Agregar Cuenta de Prueba:

    • Ir a la Consola de Juegos
    • Configuración > Licencia de prueba
    • Agregar cuenta de Gmail para la prueba
  2. Probar en Sandbox:

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. Verificar Banner de Prueba:
    • Al realizar una compra con la cuenta de prueba
    • Debería ver la notificación de compra de prueba
    • No ocurren cargos reales

Antes de la liberación de producción:

  1. Crear un pista de prueba interna para pruebas de QA rápidas o una pista de prueba cerrada para pruebas más amplias Subir una versión firmada y publicar la versión de prueba
  2. Agregar direcciones de correo electrónico de probadores y compartir el enlace de opt-in .aab Hacer que los probadores instalen la versión desde Google Play
  3. Verificar que los flujos de compra funcionen de principio a fin en la versión instalada en Play
  4. Si su cuenta de desarrollador personal se creó después del 13 de noviembre de 2023, mantenga al menos 12 probadores optados en una prueba cerrada durante 14 días consecutivos antes de solicitar la producción
  5. Crear un
  6. pista de prueba interna para pruebas de QA rápidas o una

Un paquete de depuración cargado por sideload no es un sustituto de un paquete de prueba instalado a través de Play Store para validar Google Play Billing.

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

Política de Pagos:

  • No utilizar Google Play Billing
  • Términos de suscripción engañosos
  • Costos ocultos

Política de datos del usuario:

  • Falta de política de privacidad
  • Declaraciones de seguridad de datos inexactas
  • Permisos excesivos
  1. Revisar la Notificación de Violación

    • Leer la política específica citada
    • Comprender qué Google marcó como problema
    • Ver los ejemplos que proporcionaron
  2. Corregir el Problema

    • Abordar la causa raíz, no solo los síntomas
    • Probar exhaustivamente después de la corrección
    • Documentar todos los cambios realizados
  3. Presentar Apelación (si corresponde)

    Proceso de Aclaración y Apelación

    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.

    Ejemplo de documentación de solicitud

  4. Resubmitir o actualizar

    • Subir versión corregida
    • Resubmitir para revisión
    • Monitorear estado en Play Console

Navegar por la revisión de la tienda de juegos puede ser complejo, especialmente cuando necesita combinar la conformidad de facturación, las declaraciones de contenido de la aplicación y la configuración de la pista de prueba. Si necesita asistencia personalizada:

Reserve una llamada de consultoría con nuestro equipo para ayuda con:

  • Preparación completa de la revisión de la tienda de juegos
  • Configuración y reclutamiento de pruebas de la pista de prueba
  • Revisión de la implementación de IAP
  • Conformidad con la seguridad de los datos y la privacidad
  • Resolución de problemas y recursos de rechazo
  • Proceso de presentación de la aplicación completa

Nuestros expertos han guiado a cientos de aplicaciones a través de las presentaciones exitosas en la tienda Play y pueden ayudarlo a navegar por los requisitos actuales.

¿Necesita ayuda con la implementación?

Siga adelante desde las directrices de revisión de la tienda Play Store de Android para IAP

Sección titulada “Sigue adelante desde las directrices de revisión de la Tienda de Aplicaciones de Android para IAP”

Si estás utilizando Directrices de revisión de la Tienda de Aplicaciones de Android para IAP para planificar la seguridad y la conformidad, conecta con Usando @capgo/native-purchases para la capacidad nativa en Usando @capgo/native-purchases, Cifrado para el detalle de implementación en Cifrado, Conformidad para el detalle de implementación en Conformidad, Escáner de Seguridad Capgo para el flujo de trabajo del producto en Escáner de Seguridad Capgo, y Seguridad Capgo para el flujo de trabajo del producto en Seguridad Capgo.