Controla los mensajes de App Store en el SDK de iOS

A veces App Store necesita mostrar a tus usuarios un mensaje sobre su suscripción: pedirles que acepten un aumento de precio, informarles de un problema de facturación o presentarles una oferta de recuperación. Por defecto, StoreKit muestra estos mensajes por su cuenta mientras la app está abierta, incluso encima de un paywall, un onboarding o una pantalla de pago.

Para elegir tú el momento, cambia el SDK a gestión manual de mensajes. El SDK añade entonces cada mensaje a una lista pendiente, y tu app muestra esa lista cuando llama a showStoreMessages.

Warning

En el modo manual, StoreKit no muestra mensajes por sí solo. Si tu app nunca llama a showStoreMessages, los usuarios nunca verán una solicitud de consentimiento de aumento de precio ni un aviso de problema de facturación.

Antes de comenzar

Necesitas:

  • Adapty iOS SDK 4.2 o posterior: Las versiones anteriores no tienen la API de mensajes de store.
  • iOS 16, Mac Catalyst 16 o visionOS 1 o posterior en el dispositivo del usuario: StoreKit no entrega mensajes a apps en versiones anteriores. La API de mensajes de store no está disponible en macOS.

Habilitar la gestión manual

Para capturar los mensajes de App Store, establece storeMessagesHandling en .manual cuando actives el SDK:

let configurationBuilder = AdaptyConfiguration
    .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
    .with(storeMessagesHandling: .manual) // .auto is the default

El SDK comienza a capturar mensajes en cuanto se activa, y los mantiene en memoria durante la sesión actual de la app. Con el valor predeterminado .auto, el SDK no captura nada, y getPendingStoreMessageTypes y showStoreMessages no hacen nada.

Obtener tipos de mensajes pendientes

Para saber si hay mensajes en espera, llama a getPendingStoreMessageTypes. Devuelve los tipos de mensajes pendientes sin mostrarlos ni eliminarlos:

let pendingTypes = await Adapty.getPendingStoreMessageTypes()

if pendingTypes.contains(.billingIssue) {
    // For example, skip the upsell and show the billing message first
}

Cada mensaje tiene uno de estos tipos:

TipoMensaje
.genericUn mensaje general de App Store.
.priceIncreaseConsentUna solicitud de consentimiento para un aumento de precio de suscripción.
.billingIssueUn aviso sobre un problema de facturación de suscripción. Disponible en iOS 16.4 y versiones posteriores.
.winBackOfferUna oferta de recuperación elegible. Disponible en iOS 18 y versiones posteriores.

Un tipo de mensaje que el SDK no reconoce tiene el valor sin procesar storekit_<number>.

Mostrar mensajes pendientes

Cuando tu app llega a un punto donde una pantalla del sistema no interrumpirá al usuario — por ejemplo, después de que el usuario cierra un flow o termina un onboarding — llama a showStoreMessages:

El SDK muestra los mensajes uno tras otro. Cuando StoreKit muestra un mensaje, el SDK lo elimina de la lista de pendientes. Si StoreKit no puede mostrar un mensaje, el SDK escribe el error en el log de Adapty, conserva el mensaje para la próxima llamada y continúa con los demás mensajes.

Mostrar solo algunos tipos de mensajes

Para mostrar solo algunos de los mensajes pendientes, indica los tipos en for. Los demás mensajes permanecen pendientes:

try await Adapty.showStoreMessages(
    for: [.billingIssue, .priceIncreaseConsent],
    using: displayStoreKitMessage
)

Sin for, el SDK muestra todos los mensajes pendientes, incluidos los tipos que no reconoce.

Errores

showStoreMessages lanza un AdaptyError con uno de estos códigos:

CódigoNombreCausa
3201operationInProgressOtra llamada a showStoreMessages sigue mostrando mensajes. Espera a que termine e inténtalo de nuevo.
3202resolverFailureSolo UIKit: no pasaste una escena y el SDK no encontró ninguna escena activa en primer plano. Llama al método de nuevo cuando tu app esté en primer plano, o pasa la escena de forma explícita.
9000operationInterruptedLa tarea que llamó al método fue cancelada.