Saltar a contenido

Directrices de revisión de la Tienda de Aplicaciones de iOS para IAP

GitHub

Para obtener aprobación de tu aplicación en la Tienda de Aplicaciones de Apple, debes prestar atención cuidadosa a las directrices de Apple, especialmente al implementar compras y suscripciones en la aplicación. Esta guía cubre todo lo que necesitas saber para aprobar la revisión en tu primera presentación.

Proceso de Revisión de la Tienda de Aplicaciones de iOS

Completa la configuración de App Store Connect antes de que Apple revise tu flujo de compras:

Agregar un

URL de la Política de Privacidad

  • en App Store Connect in __CAPGO_KEEP_0__
  • Agregar un URL de soporte que conduce a información de contacto real para los usuarios
  • Complete la encuesta de calificación de edad para que la aplicación sea publicable
  • Agregar detalles de contacto de revisión de aplicación y notas claras para los revisores
  • Si se requiere inicio de sesión, proporcione una cuenta de demostración que no expira durante la revisión
Metadatos de lista de la Tienda de Aplicaciones con enlaces de política y soporte
  • Utilizar pantallas actuales desde la construcción real bajo revisión
  • Para iPhone, 1290 x 2796 (6,7 pulgadas) es el tamaño por defecto más fácil
  • Si su aplicación se ejecuta en iPad, subir pantallas de iPad también
  • Las tamañas de iPad grandes aceptadas actualmente incluyen 2064 x 2752 (13 pulgadas) y 2048 x 2732 (12,9 pulgadas)
  • No estirar capturas de pantalla de iPhone para fingir soporte de iPad

Realizar un recorrido previo de la experiencia del revisor en TestFlight

Sección titulada “Realizar un recorrido previo de la experiencia del revisor en TestFlight”

Ejecutar el camino exacto que Apple seguirá en un dispositivo real:

  • Instalar la última versión desde TestFlight
  • Iniciar sesión con la cuenta de revisión que planea proporcionar
  • Llegar a la pantalla de pago sin gestos ocultos ni menús de depuración
  • Completar flujos de compra, restauración y gestión de suscripciones
  • Verificar que la aplicación sigue comportándose correctamente si se deniegan los permisos

Transparencia de precios (Crítico)

Transparencia de Precios (Crítico)

Apple requiere una transparencia de precios clara antes de cualquier compra:

Elementos Obligatorios:

  • Mostrar el precio exacto antes del botón de compra
  • Mostrar la frecuencia de facturación (por ejemplo, "$9.99/mes")
  • Establecer claramente qué los usuarios obtienen por su dinero
  • Indicar cuándo se producirán los cargos

Rechazo Común:

"El precio de la suscripción debe ser claro y explícito."

Advertencia: Consistencia de Precios Todos los precios deben coincidir en:

  • Lista de metadatos de la Tienda de Apple
  • Pantallas de compras en la aplicación
  • Administración de suscripciones

Even a $1 discrepancy between store listing ($4.99) and app ($5.99) will trigger automatic rejection.

Declaraciones obligatorias:

  • Todos los niveles de suscripción disponibles se muestran juntos
  • Comparación clara de características por nivel
  • No se auto-asigna a niveles premium a través de trucos de interfaz de usuario
  • Instrucciones de cancelación fáciles de encontrar

Consejos de diseño de interfaz de usuario

Paywall con restauración de compras y enlaces legales

Ejemplo de interfaz de usuario conforme

import { NativePurchases } from '@capgo/native-purchases';
function SubscriptionScreen() {
return (
<div>
<h2>Choose Your Plan</h2>
{/* Show all tiers equally */}
<PlanCard
title="Basic"
price="$4.99/month"
features={['Feature A', 'Feature B']}
/>
<PlanCard
title="Premium"
price="$9.99/month"
features={['All Basic', 'Feature C', 'Feature D']}
highlighted={false} // Don't force premium
/>
{/* Clear cancellation info */}
<Text>
Cancel anytime in Settings > Subscriptions.
No refunds for partial periods.
</Text>
</div>
);
}

Implementación requerida:

Cada aplicación con IAP debe proporcionar una forma para que los usuarios restauren compras anteriores sin contactar con el soporte.

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
async function restorePurchases() {
try {
await NativePurchases.restorePurchases();
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const activeSub = purchases.find(
(purchase) => purchase.isActive && purchase.expirationDate,
);
if (activeSub) {
unlockPremiumFeatures();
showMessage('Purchases restored successfully!');
return;
}
const { purchases: iaps } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.INAPP,
});
const hasIap = iaps.some((purchase) => purchase.productIdentifier === 'premium_unlock');
showMessage(
hasIap ? 'Premium purchase restored!' : 'No previous purchases found.',
);
} catch (error) {
showError('Failed to restore purchases. Please try again.');
}
}
// Add a visible "Restore Purchases" button
<Button onClick={restorePurchases}>
Restore Purchases
</Button>

1. La aplicación se cae o tiene funcionalidad rota

Sección titulada “1. La aplicación se cae o tiene funcionalidad rota”

¿Por qué falla?

  • La aplicación se cae al iniciar
  • El flujo de compra no se completa
  • Las características mostradas en capturas de pantalla no funcionan

Prevención:

  • Prueba en dispositivos reales (no solo simuladores)
  • Prueba todos los flujos de suscripción de principio a fin
  • Verifica que la validación de recibos funcione
  • Revisa el manejo de errores de red

Por qué falla:

  • Las capturas de pantalla muestran características que no están en la versión actual
  • La descripción menciona funcionalidades que no existen
  • Precios en la metadata difieren de los precios en la aplicación

Lista de verificación de metadata

Prevención:

// Document exactly what's in each tier
const SUBSCRIPTION_FEATURES = {
basic: ['Ad-free', 'Cloud sync', 'Basic themes'],
premium: ['Ad-free', 'Cloud sync', 'All themes', 'Priority support']
};
// Use these in both your app AND App Store description

Por qué falla:

  • Solicitar cámara/ubicación/salud sin explicación
  • Solicitudes de permisos enterradas en varias pantallas
  • Descripciones de permisos vagas o genericas

Prevención:

Actualice su aplicación Info.plist con explicaciones claras:

Permiso copiar que es demasiado vago para revisión Permiso copiar con explicaciones más claras
<key>NSCameraUsageDescription</key>
<string>Camera access is needed to scan product barcodes for quick subscription upgrades.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Location helps us show relevant local content in your Premium subscription.</string>

Por qué falla:

  • Reclamos como “la aplicación número 1 en el mundo” sin pruebas
  • Características “ilimitadas” con límites ocultos
  • Tácticas de urgencia falsas (“Solo quedan 2 plazas!”)

Guías de descripción Ejemplos

Guías de descripción de descripción adicional

Prevención:

  • Ser específico y factual en las descripciones
  • Evitar superlativos sin evidencia
  • No presionar a los usuarios con escasez falsa

Por qué Falla:

  • No se menciona cómo cancelar
  • Botón de cancelación oculto o obstruido
  • Proceso de cancelación en varias etapas sin el flujo nativo de Apple

Prevención:

// Always inform users about cancellation
function SubscriptionInfo() {
return (
<div>
<h3>How to Cancel</h3>
<ol>
<li>Open iPhone Settings</li>
<li>Tap your name at the top</li>
<li>Tap Subscriptions</li>
<li>Select this app and tap Cancel</li>
</ol>
<p>Or manage directly in the App Store app.</p>
<Button onClick={openSubscriptionManagement}>
Manage Subscription in Settings
</Button>
</div>
);
}
async function openSubscriptionManagement() {
// Direct link to iOS subscription management
await NativePurchases.showManageSubscriptions();
}

Apple ha reforzado significativamente las exigencias de privacidad en 2025.

Para Cada Permiso:

  1. ¿Por qué lo necesita (caso de uso específico)?
  2. ¿Cuándo se utilizará?
  3. ¿Cómo se almacena o comparte la información?
  4. ¿Es opcional o requerido?
async function requestCameraPermission() {
// Show explanation BEFORE requesting
await showDialog({
title: 'Camera Access',
message: 'We need camera access to let you scan barcodes for quick product lookup. Your photos are never uploaded or stored.',
buttons: ['Not Now', 'Allow']
});
// Then request permission
const result = await Camera.requestPermissions();
return result.camera === 'granted';
}

Asegúrate de que las etiquetas de privacidad de la Tienda de Mac App sean precisas y reflejen:

  • Recopilación de historial de compras
  • Direcciones de correo electrónico (para facturas)
  • IDs de dispositivo (para prevención de fraude)
  • Datos de uso (para análisis)

Las etiquetas de privacidad inexactas son una razón común de rechazo en 2025. Revisa cuidadosamente la recopilación de datos.

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 previa a la presentación

  1. Prueba todos los flujos de compra protegidos

    • Comprar cada nivel de suscripción
    • Prueba períodos de prueba gratuitos
    • Verificar que las ofertas iniciales se aplican correctamente
    • Prueba la restauración de compras
    • Verificar que la Compartición Familiar (si habilitada) funciona correctamente
    • Prueba en múltiples dispositivos
  2. Verificar la Consistencia de Precios

    • Verificar que los metadatos de la Tienda de Aplicaciones coinciden con los precios en la aplicación
    • Verificar que todos los monedas están correctos
    • Confirmar que las duraciones de los períodos de prueba gratuitos coinciden con las descripciones
    • Verificar que los términos de las ofertas iniciales son precisos
  3. Revisar todos los textos

    • Eliminar texto de reemplazo
    • Verificar que las afirmaciones sean verificables
    • Comprobar gramática y ortografía
    • Asegurarse de que las descripciones coincidan con la versión actual
    • Eliminar menciones de competidores
  4. Probar permisos

    • Solicitar solo los permisos necesarios
    • Mostrar explicaciones claras antes de solicitar
    • Probar flujos de denegación (la aplicación debería seguir funcionando)
    • Verificar descripciones de Info.plist son claras
  5. Preparar cuenta de prueba

    • Crear una cuenta de revisión que permanece válida durante la revisión
    • Documentar las credenciales de inicio de sesión en la información de revisión de la aplicación
    • Verificar que el revisor pueda llegar a la pantalla de pago y completar el flujo de compra
    • Incluir cuentas adicionales o interruptores específicos de la aplicación en el campo Notas si es necesario
  6. Revisar la información de Metadatos

    • Las capturas de pantalla coinciden con la interfaz de usuario actual
    • La URL de soporte incluye información de contacto real
    • La URL de la política de privacidad está rellenada
    • La clasificación de edad coincide con el contenido en la compilación
    • El video de presentación de la aplicación (si existe) muestra la versión actual
    • La descripción describe con precisión las características
    • La política de privacidad es accesible en la aplicación y desde la lista de la tienda
  7. Escribe Notas de Revisión Detalladas

    Contact:
    Name: Jane Developer
    Email: review@yourapp.com
    Phone: +1 555-0100
    Test Account:
    Email: reviewer@test.com
    Password: TestPass123!
    This account does not expire during review.
    Testing Instructions:
    1. Log in with test account above
    2. Tap "Upgrade to Premium" button
    3. Select "Monthly Premium" subscription
    4. Complete purchase (no charge in sandbox)
    5. Verify premium features unlock
    Note: Subscription pricing is clearly shown before purchase.
    Cancellation instructions are in Settings > Account.

Cronograma de Revisión de la Tienda de Aplicaciones

Revisión estándar: 24-48 horas Periodos de pico: 3-5 días (lanzamientos de la Tienda de Aplicaciones durante festividades) Fines de semana: No se procesan reseñas Revisión acelerada: Disponible para correcciones de errores críticos (solicite a través de App Store Connect)

Estados comunes que verá en App Store Connect:

  • Waiting for Review
  • In Review
  • Pending Developer Release
  • Rejected

1. Claridad de Suscripción

  • Comparaciones de planes lado a lado requeridas
  • No utilice ‘patrones oscuros’ que oculten opciones más económicas
  • Rutas de descenso/subida protegidas

2. Precisión de metadatos

  • Las capturas de pantalla deben coincidir con la versión que se está revisando
  • Se requieren capturas de pantalla de iPad si se habilita el soporte de iPad
  • La URL de soporte y la política de privacidad deben estar ya disponibles antes de la presentación

3. Calidad de detalles de revisión y privacidad

  • Las declaraciones de privacidad deben coincidir con lo que realmente recopilan sus SDKs
  • La información de contacto de la revisión de la aplicación y las notas deben estar completas en la primera presentación
  • Las credenciales de demostración deben mantenerse válidas durante toda la ventana de revisión

4. Preparación de la presentación

  • Apple actualiza regularmente los requisitos mínimos SDK, así que confirme la fecha límite actual antes de subir una versión de lanzamiento
  • TestFlight es el lugar más seguro para verificar el camino exacto del revisor antes de presentar

Mejores prácticas para el plugin de compras nativas

Sección titulada “Mejores prácticas para el plugin de compras nativas”
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
async function handlePurchase(productId: string) {
try {
const transaction = await NativePurchases.purchaseProduct({
productIdentifier: productId,
productType: PURCHASE_TYPE.SUBS,
});
// Success
await validateReceiptOnServer(transaction.receipt);
showSuccess('Subscription activated!');
unlockFeatures();
} catch (error: any) {
// Handle specific error cases
if (error.code === 'USER_CANCELLED') {
// User cancelled - don't show error
console.log('Purchase cancelled by user');
} else if (error.code === 'PAYMENT_PENDING') {
showInfo('Payment is pending. Please check back later.');
} else if (error.code === 'PRODUCT_ALREADY_PURCHASED') {
// Restore instead
await NativePurchases.restorePurchases();
} else {
// Show user-friendly error
showError('Unable to complete purchase. Please try again.');
}
}
}
function PurchaseButton({ productId }: { productId: string }) {
const [loading, setLoading] = useState(false);
const handlePurchase = async () => {
setLoading(true);
try {
await NativePurchases.purchaseProduct({ productIdentifier: productId });
} finally {
setLoading(false);
}
};
return (
<button onClick={handlePurchase} disabled={loading}>
{loading ? 'Processing...' : 'Subscribe Now'}
</button>
);
}
function SubscriptionTerms() {
return (
<div className="terms">
<p>
Subscription automatically renews unless cancelled at least 24 hours
before the end of the current period.
</p>
<p>
Your account will be charged for renewal within 24 hours prior to
the end of the current period.
</p>
<p>
Subscriptions may be managed by the user and auto-renewal may be
turned off in Account Settings after purchase.
</p>
<p>
<a href="/terms">Terms of Service</a> |
<a href="/privacy/">Privacy Policy</a>
</p>
</div>
);
}

Si tu aplicación es rechazada

Si tu aplicación es rechazada
  1. Lee el rechazo cuidadosamente

    • Nota la guía específica citada (por ejemplo, 3.1.1, 5.1.1)
    • Entiende exactamente qué marcó Apple
  2. Corrige el problema exhaustivamente

    • No solo parcha - corrige la causa raíz
    • Prueba la corrección extensivamente
    • Documenta lo que cambió
  3. Responde en el Centro de Resolución

    Thank you for your feedback. I have addressed the issue:
    Issue: Subscription pricing not clear upfront
    Fix: Added explicit pricing display on subscription selection
    screen showing "$9.99/month" before purchase button. Also added
    cancellation instructions on the same screen.
    The changes are in this submission and can be tested using the
    provided test account.
  4. __CAPGO_KEEP_0__

    • __CAPGO_KEEP_1__
    • __CAPGO_KEEP_2__

Si cree que la rechazación es incorrecta:

Proceso de Clarificación de la Tienda de Aplicaciones

  1. Haga clic en “Apelar” en App Store Connect
  2. Proporcione evidencia clara:
    • Capturas de pantalla que muestran el cumplimiento
    • Referencias a pautas específicas
    • Explicación de cómo cumple con los requisitos
  3. Sea profesional y factual
  4. Incluya una cuenta de prueba si la funcionalidad es difícil de encontrar

Ejemplo de solicitud de documentos

Si aún tienes problemas:

Estás luchando con la revisión de la aplicación o necesitas asistencia personalizada? Reserva una llamada de consulta con nuestro equipo para obtener soporte dedicado con:

  • Revisión y optimización de la implementación de IAP
  • Preparación y estrategia de revisión de la tienda App Store
  • Revisión del checklist de presentación
  • Resolución de rechazos y recursos de apelación
  • Pruebas y validación completas

Nuestros expertos han ayudado con éxito a cientos de aplicaciones a aprobar la revisión!

Sigue adelante desde las directrices de revisión de la tienda App Store de iOS para IAP

Sección titulada “Sigue adelante desde las directrices de revisión de la tienda App Store de iOS para IAP”

Si estás utilizando Directrices de revisión de la tienda App Store de iOS para IAP para planificar la aprobación y distribución de la tienda, conecta con Usando @capgo/native-purchases para la capacidad nativa en Usando @capgo/native-purchases, @capgo/capacitor-in-app-review para el detalle de implementación en @capgo/capacitor-in-app-review, Usando @capgo/capacitor-in-app-review para la capacidad nativa en Usando @capgo/capacitor-in-app-review, @capgo/capacitor-native-market para el detalle de implementación en @capgo/capacitor-native-market, y Usando @capgo/capacitor-native-market para la capacidad nativa en Usando @capgo/capacitor-native-market.