Directrices de Revisión de la Tienda de Aplicaciones de iOS para IAP
Copie un prompt de configuración con los pasos de instalación y la guía de markdown completa para este plugin.
Proceso de revisión de la App Store de iOS

Antes de Presentar
Sección titulada “Antes de Presentar”Finalizar Configuración de App Store Connect
Sección titulada “Finalizar Configuración de App Store Connect”Antes de que Apple revise tu flujo de compra, asegúrate de que el registro de la aplicación sea completo:
- Agregar un URL de Política de Privacidad en App Store Connect
- Agregar un URL de Soporte que conduce a información de contacto real para los usuarios
- Complete el calificación de edad cuestionario para que la aplicación sea publicable
- Agregar Detalles de contacto de revisión de aplicación y notas de revisor claras
- Si se requiere inicio de sesión, proporcione una cuenta de demostración que no expira durante la revisión
Preparar Pantallas Reales
Sección titulada “Preparar Pantallas de Captura Real”- Utilice pantallas de captura de la construcción real en revisión
- Para iPhone,
1290 x 2796(6.7 pulgadas) es el tamaño por defecto más fácil - Si su aplicación ejecuta en iPad, también suba pantallas de captura de iPad
- Las pantallas de captura de iPad grandes aceptadas actualmente incluyen
2064 x 2752(13 pulgadas) y2048 x 2732(12.9 pulgadas) - Nunca estire pantallas de captura de iPhone para fingir soporte de iPad
Realice un recorrido seco de la experiencia del revisor en TestFlight
Sección titulada “Realice un recorrido seco de la experiencia del revisor en TestFlight”Ejecute el camino exacto que seguirá Apple en un dispositivo real:
- Instale la última versión desde TestFlight
- Inicie sesión con la cuenta de revisión que planea proporcionar
- Acceda a la paywall sin gestos ocultos ni menús de depuración
- Flujos de compra, restauración y gestión de suscripciones
- Verifique que la aplicación siga comportándose correctamente si se deniegan los permisos
Requisitos de compras en la aplicación
Requisitos de compras en la aplicaciónTransparencia de precios (Crítico)
Transparencia de precios (Crítico)Apple requiere una transparencia de precios cristalina antes de cualquier compra:
Elementos imprescindibles:
- Muestre el precio exacto antes del botón de compra
- Muestra la frecuencia de facturación (por ejemplo, “$9.99/mes”)
- Establece claramente qué los usuarios obtienen por su dinero
- Indique cuándo se producirán los cargos
Rechazo común:
“Subscription pricing must be clear and upfront.”
:::advertencia Consistencia de precios Todos los precios deben coincidir en:
- Lista de metadatos de la tienda
- Pantallas de compras en la aplicación
- Pantallas de gestión de suscripciones
Even a $1 discrepancy between store listing ($4.99) and app ($5.99) will trigger automatic rejection. :::
Presentación del Plan de Suscripción
Sección titulada “Presentación del Plan de Suscripción”Declaraciones Requeridas:
- Todas las opciones de suscripción disponibles a la vez
- Comparación clara de características por nivel
- No se asigna automáticamente a niveles premium a través de trucos de interfaz
- Instrucciones de cancelación fáciles de encontrar

Ejemplo de interfaz 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> );}Restaurar Compras
Sección titulada “Restaurar Compras”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>Motivos de rechazo comunes
Sección titulada “Motivos de rechazo comunes”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 las 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 correctamente
- Revisa el manejo de errores de red
2. Incongruencias de metadatos
Sección titulada “2. Incongruencias de metadatos”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
- El precio en los metadatos difiere del precio en la aplicación

Prevención:
// Document exactly what's in each tierconst 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 description3. Explicaciones de Permiso Faltante
Sección titulada “3. Explicaciones de Permiso Faltante”Por qué Falla:
- Solicitar cámara/ubicación/salud sin explicación
- Solicitudes de permiso enterradas en varias pantallas
- Descripciones de permiso vagas o generales
Prevención:
Actualice su Info.plist con explicaciones 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>4. Publicidad Engañosa
Sección titulada “4. Publicidad Engañosa”Por qué falla:
- Afirman cosas 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!”)


Prevención:
- Sé específico y factual en las descripciones
- Evita superlativos sin evidencia
- No presiones a los usuarios con escasez falsa
5. Proceso de Cancelación Oculta
Sección titulada “5. Proceso de Cancelación Oculta”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 cancellationfunction 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();}Privacidad y Uso de Datos (Sección 5.1.1)
Sección titulada “Privacidad y Uso de Datos (Sección 5.1.1)”Apple ha reforzado significativamente los requisitos de privacidad en 2025.
Declaraciones Requeridas
Sección titulada “Declaraciones Requeridas”Para Cada Permiso:
- ¿Por qué lo necesita (uso de caso específico)?
- ¿Cuándo se utilizará?
- ¿Cómo se almacena o comparte la información?
- ¿Es opcional o requerido?
Ejemplo: Flujo de Permiso Correcto
Sección titulada “Ejemplo: Flujo de Permiso Correcto”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';}Etiquetas de Nutrición de Privacidad
Asegúrese de que las etiquetas de privacidad de la tienda de aplicaciones reflejen con precisión:translations
- Recolecció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)
Los etiquetados de privacidad inexactos son una razón común de rechazo en 2025. Audita cuidadosamente la recopilación de datos.
Lista de Verificación Pre-Envío
Sección titulada “Lista de Verificación Pre-Envío”
-
Prueba todos los flujos de compra
- Compre cada nivel de suscripción
- Prueba las pruebas gratuitas
- Verifique que las ofertas de inicio se apliquen correctamente
- Test restore compras
- Verificar la Compartición Familiar (si habilitado)
- Test en múltiples dispositivos
-
Verificar la Consistencia de Precios
- Comprobar 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 prueba gratuitas coinciden con las descripciones
- Comprobar que los términos de la oferta inicial son precisos
-
Revisar Todo el Texto
- Eliminar texto de reemplazo
- Verificar que las afirmaciones son probables
- Comprobar la gramática y la ortografía
- Asegúrese de que las descripciones coincidan con la versión actual
- Elimine menciones a competidores
-
Prueba Permisos
- Solicite solo los permisos necesarios
- Muestre explicaciones claras antes de solicitar permisos
- Prueba los flujos de denegación (la aplicación debería seguir funcionando)
- Verifique que las descripciones de Info.plist sean claras
-
Prepárate Cuenta de Prueba
- Crea una cuenta de revisión que permanezca válida durante la revisión
- Documenta las credenciales de inicio de sesión en la información de revisión de la aplicación
- Verifique que el revisor pueda llegar a la pared de pago y completar el flujo de compra
- Incluya cuentas adicionales o interruptores específicos de la aplicación en el campo Notas si es necesario
-
Ver Metadatos
- Capturas de pantalla coinciden con la interfaz de usuario actual
- URL de soporte incluye información de contacto real
- URL de política de privacidad está rellena
- 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
-
Redactar Notas de Revisión Detalladas
Contact:Name: Jane DeveloperEmail: review@yourapp.comPhone: +1 555-0100Test Account:Email: reviewer@test.comPassword: TestPass123!This account does not expire during review.Testing Instructions:1. Log in with test account above2. Tap "Upgrade to Premium" button3. Select "Monthly Premium" subscription4. Complete purchase (no charge in sandbox)5. Verify premium features unlockNote: Subscription pricing is clearly shown before purchase.Cancellation instructions are in Settings > Account.
Linea de Tiempo de Revisión
Sección titulada “Linea de Tiempo de Revisión”
Revisión estándar: 24-48 horas Períodos pico: 3-5 días (lanzamientos de vacaciones de la Tienda de Aplicaciones) Fines de semana: No se procesan revisiones Revisión acelerada: Disponible para correcciones de errores críticos (solicitar a través de App Store Connect)
Estados comunes que verá en App Store Connect:
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
Enfoque de la Solicitud de 2026
Sección titulada “Enfoque de la Solicitud de 2026”Áreas de Enfoque Actuales
Sección titulada “Áreas de Enfoque Actuales”1. Claridad de la Suscripción
- Se requieren comparaciones de planes lado a lado
- No se permiten ‘patrones oscuros’ que ocultan opciones más económicas
- Rutas claras de bajada/actualización
2. Precisión de los 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 para 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 privacidad y revisión
- Las declaraciones de privacidad deben coincidir con lo que realmente recopilan sus SDKs
- La información de contacto y notas de la revisión de la aplicación deben estar completas en la primera presentación
- Las credenciales de demo 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 un paquete 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”Implementar un manejo de errores adecuado
Sección titulada “Implementar un manejo de errores adecuado”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.'); } }}Mostrar estados de carga
Sección titulada “Mostrar estados de carga”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> );}Mostrar los términos claramente
Sección titulada “Mostrar los términos claramente”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
Sección titulada “Si tu aplicación es rechazada”Pasos para resolver
Sección titulada “Pasos para resolver”-
Lee la rechazación con cuidado
- Tenga en cuenta la guía específica citada (por ejemplo, 3.1.1, 5.1.1)
- Entienda exactamente qué marcó Apple
-
Repara el problema exhaustivamente
- No solo parche - repare la causa raíz
- Pruebe la solución exhaustivamente
- Documente lo que cambió
-
Responda en el Centro de Resolución
Thank you for your feedback. I have addressed the issue:Issue: Subscription pricing not clear upfrontFix: Added explicit pricing display on subscription selectionscreen showing "$9.99/month" before purchase button. Also addedcancellation instructions on the same screen.The changes are in this submission and can be tested using theprovided test account. -
Reenvíe con prontitud
- Las reenvíos suelen ser revisados más rápido
- Normalmente dentro de 24 horas
Proceso de Apelación
Proceso de ApelaciónSi cree que la rechazo es incorrecto:

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

Recursos adicionales
Sección titulada “Recursos Adicionales”- Directrices de Revisión de la Tienda de Aplicaciones de Apple
- Directrices de Compras en Aplicación
- Mejores Prácticas para Suscripciones
- Ayuda de App Store Connect
- Especificaciones de Capturas de Pantalla
- Información de Versión de la Plataforma
Soporte
Sección titulada “Soporte”Si aún tienes problemas:
- Revisa el documentación de compras nativas
- Verificar problemas comunes de depuración
- Contacte con el soporte de desarrolladores de Apple para aclaraciones de directrices
Necesita ayuda experta?
Título de la sección “Necesita ayuda experta?”Está luchando con la revisión de la aplicación o necesita asistencia personalizada? Reserve 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
- Complete testing and validation
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 de Aplicaciones de iOS para IAP
Sección titulada “Sigue adelante desde las directrices de revisión de la Tienda de Aplicaciones de iOS para IAP”Si estás utilizando Directrices de revisión de la Tienda de Aplicaciones de iOS para IAP para planificar la aprobación y la distribución en la tienda, conecta con Usando @capgo/native-purchases para la capacidad nativa en Usando @capgo/native-purchases, Usando @capgo/capacitor-in-app-review para el detalle de implementación en Usando @capgo/capacitor-in-app-review, Usando @capgo/capacitor-in-app-review para la capacidad nativa en Using @capgo/capacitor-in-app-review, @capgo/capacitor-native-market para el detalle de implementación en @capgo/capacitor-native-market, y Using @capgo/capacitor-native-market para la capacidad nativa en Using @capgo/capacitor-native-market.