Saltar al contenido

Guías de Revisión de la Tienda de Aplicaciones de Android para IAP

GitHub

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

  1. Construye una Aplicación de Android Firmada

    Las nuevas aplicaciones de Google Play deben subirse como una Aplicación de Android Bundle (.aab), no una APK de depuración cargada por sideloading.

    Mantén tu versionCode aumentar con cada subida y almacene su clave de subida de manera segura si utiliza la firma de Play App.

    Flujo de paquete de aplicación Android

  2. Create the App Record in Play Console

    Si aún no tienes una cuenta de desarrollador, comienza con Registro en la consola de Play. Luego, en Inicio > Crear aplicación, selecciona el idioma, tipo de aplicación/juego, estado de pago gratuito/pago, correo electrónico de soporte y acepta las declaraciones requeridas.

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

    Crear aplicación en la consola de Play

  3. Contenido de la aplicación y lista de tienda

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

    • Política de privacidad
    • Publicidad
    • App access
    • 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 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 prueba cerrada con al menos 12 probadores inscritos durante 14 días consecutivos antes de tener acceso a producción.

    Pruebas internas en el Console de Play

  5. Verificar Facturación de Fin 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 un banner para los licenciatarios de prueba
    • Permisos se desbloquean después de la compra
    • Funcionan los flujos de restauración y gestión de suscripciones

Requisitos de facturación de Google Play

Requisitos de facturación de Google Play

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

Bienes digitales (Deben Usar Billing de Play):

  • Suscripciones a características premium
  • Monedas o créditos en la aplicación
  • Contenido digital (libros electrónicos, música, videos)
  • Mejoras y poderes en juegos
  • Desbloqueos de aplicaciones y niveles premium

Bienes físicos (No se pueden usar Billing de Play):

  • Bienes de mercancía física
  • Servicios reales
  • Donaciones una vez a organizaciones sin fines de lucro

:::note Configuración de Suscripción En la Consola de Play, configura las suscripciones de Android utilizando el actual suscripción -> plan base -> oferta En native-purchasespasar el ID del Plan Base con 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);

Requisitos de divulgación de precios previos

Requisitos de divulgación de precios previos

Requisitos de divulgación de precios previos

Sección titulada “Declaración de Precios Anticipados”

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

Elementos Requeridos:

  • 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 iniciales
  • ¿Cuándo se producirán los cargos?

Prácticas de Diseño de Interfaz de Usuario

Ejemplo de UI Cumplimiento:

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:

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

Si vende la misma licencia 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 ni dar a entender un costo de renovación diferente al que cobrará Google Play.

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

  1. Enlace en la lista de la tienda Play

    • Add privacy policy URL in Play Console
    • Debe ser accesible públicamente
    • Debe estar en el mismo idioma que su aplicación
  2. Enlace Dentro de la Aplicación

    • Display privacy policy in app settings
    • Mostrar antes de recopilar cualquier dato del usuario
    • Hacer 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:

Para aplicaciones de IAP, declare:

  • La recopilación de historial de compras
  • Direcciones de correo electrónico (para recibos)
  • IDs de dispositivo (para prevención de fraude)
  • El manejo de información de pago
  • La 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.

Declaraciones de contenido de la aplicación

Declaraciones de contenido de la aplicación

La revisión de Google Play no se limita al binario. Antes de un lanzamiento de producción, complete las declaraciones en Policy and programs > App content.

El conjunto mínimo a revisar con cuidado:

  • Política de privacidadURL de Play Console público, más una entrada en la aplicación cuando sea necesario
  • Anuncios: Declare si la aplicación contiene anuncios
  • App accessProporcione a los revisores credenciales de trabajo o un claro camino de prueba si cualquier pantalla está bloqueada.
  • Público objetivo y contenido: Ajuste el público objetivo del app
  • Calificaciones de contenidoCompleta el cuestionario IARC para que la aplicación no se marque como no valorada
  • Seguridad de datosDeclarar prácticas de recopilación, compartición y seguridad con precisión

1. Falta o implementación incorrecta de la facturación

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

¿Por qué falla:

  • No utilizar la facturación de Google Play para bienes digitales
  • Usar APIs de facturación obsoletas
  • Implementar 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:

  • Precio solo mostrado después de hacer clic en compra
  • No se revelan los cargos adicionales de antemano
  • 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 baratas
  • Hacer difícil la cancelación
  • Urgencia falsa (“¡Solo quedan 3 plazas!”)

Descripción Mejores Prácticas

Directrices de Marketing

Prevención:

  • Display all subscription tiers equally
  • Hacer la cancelación clara y accesible
  • Evitar temporizadores de conteo o escasez falsa
  • No utilice patrones oscuras 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
  • Características premium no se desbloquean después de la compra
  • La prueba solo se realizó en compilaciones sideloaded en lugar de una pista de prueba instalada 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);
}
}

5. Violaciones de la Política de Privacidad

5. Incumplimientos de la política de privacidad

Por qué falla:

  • No enlace de política de privacidad en la aplicación
  • Política de privacidad no accesible
  • Recolección de datos no revelada
  • No se informa la recopilación de datos

Prevención:

  • Agregar política de privacidad a la lista de Play Store
  • Incluir enlace en ajustes de la aplicación
  • Rellenar con precisión la sección de seguridad de datos
  • Actualizar política al agregar nueva recopilación de datos

Los programas de facturación alternativos de Google son específicos de la región y pueden cambiar. Si deseas algo diferente a la facturación estándar de Google Play, confirma la elegibilidad del mercado, las API requeridas y el lenguaje de divulgación en el Console de Play inmediatamente antes de la implementación.

Los usuarios deben poder:

  • Ver suscripciones activas de manera fácil
  • Cancelar sin contactar con el soporte
  • Entender 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>
);
}

Período de gracia de cancelación

Gestión de períodos de gracia de cancelación

Declaración requerida:

  • ¿Cuándo tiene efecto la cancelación?
  • Do users keep access until period ends?
  • ¿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 Pre-Envío

  1. Verificar Implementación de Facturación

    • Utilizando Google Play Billing (a través de native-purchases)
    • Todos los productos de suscripción creados en la Consola de Play
    • Los planes base y las ofertas están configurados correctamente
    • Los productos están activados y publicados
    • Precios configurados para todos los países objetivo
  2. Flujos de compra de prueba

    • Crear cuenta de prueba de licencia
    • Instalar la compilación desde un canal de prueba de Play
    • Probar cada nivel de suscripción
    • Verificar que los productos se carguen correctamente
    • Probar la finalización de la compra
    • Confirmar el compra de prueba Verificar que el banner aparece
    • Verificar que las características premium estén desbloqueadas
    • Probar la restauración de la suscripción
    • Prueba en múltiples dispositivos
  3. Revisar Todo el Contenido

    • Precios mostrados claramente antes de la compra
    • Todos los honorarios se revelan de antemano
    • Los términos de la suscripción son claros
    • El proceso de cancelación se explica
    • No se hacen afirmaciones 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
    • App access instructions added if the app is gated
    • Sección de seguridad de datos completada con precisión
    • Permisos justificados y documentados
  5. Calificación de contenido y audiencia

    • Complete la encuesta de calificación de contenido
    • Complete la sección de audiencia objetivo y contenido
    • Ensure rating matches actual content
    • Declarar compras en la aplicación en la encuesta
  6. Preparar la lista de la tienda

    • Descripción de la aplicación precisa
    • La descripción corta no supera los 80 caracteres
    • La descripción completa no supera los 4000 caracteres
    • Al menos 2 capturas de pantalla de teléfono subidas
    • Gráfica de características 1024x500 subida
    • Pantallas de captura muestran la versión actual
    • Todos los activos requeridos subidos

Acceso a Producción para Nuevos Cuentas Personales: Suele ser 7 días o menos después de que se aplique Primera Revisión de Producción: A menudo varios días, a veces más si se plantean preguntas sobre facturación o políticas. Updates: A menudo más rápido que una primera versión, pero aún revisado Appeals: Planifique para varios días y proporcione instrucciones de revisión exactas

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

Pruebas antes de la presentación

Prueba antes de la publicación
  1. Agregar cuenta de prueba:

    • Ir a la consola de Play
    • Configuración > Pruebas de licencia
    • Agregar cuenta de Gmail para la prueba
  2. Probar en entorno de pruebas:

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

Antes de la publicación de producción:

  1. Crear un ciclo de pruebas internas para pruebas de QA rápidas o un ciclo de pruebas cerradas para pruebas más amplias
  2. Subir una firma .aab y publicar la versión de prueba
  3. Add tester email addresses and share the opt-in link
  4. Hacer que los probadores instalen la compilación desde Google Play
  5. Verify purchase flows work end-to-end on the Play-installed build
  6. 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 producción

Un build de depuración cargado por sideloading no es un sustituto de una versión de prueba instalada en Play 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 Billing de Google Play
  • Términos de suscripción engañosos
  • Costos ocultos

Política de datos del usuario:

  • Política de privacidad ausente
  • 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ó
    • Ver los ejemplos que proporcionaron
  2. Solucione el Problema

    • Dirija la causa raíz, no solo los síntomas
    • Pruebe exhaustivamente después de la corrección
    • Documente todos los cambios realizados
  3. Presente 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.

    Solicitar Ejemplo de Documentación

  4. Reenviar o Actualizar

    • Subir versión corregida
    • Reenviar para revisión
    • Monitorear el estado en la Consola de Play

Navegar por la revisión de la tienda de Play 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 consulta con nuestro equipo para obtener ayuda con:

  • Preparación de revisión de la tienda Play
  • Configuración y reclutamiento de pruebas de la pista de prueba
  • Revisión de la implementación de IAP
  • Seguridad de los datos y cumplimiento de privacidad
  • Rechazo y resolución de problemas
  • Proceso de presentación de la aplicación completo

Nuestros expertos han guiado a cientos de aplicaciones a través de envíos exitosos al Play Store y pueden ayudarlo a navegar los requisitos actuales.

¿Necesita ayuda con la implementación?

Sigue adelante desde las directrices de reseñas de Android Play Store para IAP

Sigue adelante desde las directrices de reseñas de la Tienda de Juegos de Android para IAP

Si estás utilizando Guías 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, Encriptación para el detalle de implementación en Encriptación, Cumplimiento para el detalle de implementación en Cumplimiento, Capgo Escáner de Seguridad para el flujo de trabajo del producto en Capgo Escáner de Seguridad, y Capgo Seguridad para el flujo de trabajo del producto en Capgo Seguridad.