Guía de implementación técnica de los eventos de suscripción

Documento

Descripción general:

Este documento proporciona una guía completa sobre cómo implementar eventos de suscripción utilizando el SDK de Singular. Cubre el seguimiento de eventos de suscripción dentro de la aplicación en varias plataformas, la integración de eventos de servidor a servidor (S2S) y las integraciones de terceros como RevenueCat y Adapty.

Singular le permite realizar un seguimiento de sus suscripciones y renovaciones dentro de su aplicación, proporcionando información sobre el comportamiento del usuario y la generación de ingresos. La atribución de suscripciones de Singular ofrece métodos sólidos para el seguimiento de eventos de suscripción, garantizando una recopilación de datos precisa y en tiempo real.

Consideraciones SDK S2S Integración S2S 3P
Implementación Envío de eventos de suscripción a Singular a través de los métodos personalizados de Revenue en el SDK Enviar eventos de suscripción gestionados en su backend a la API REST de Singular (implementación directa de S2S) con las propiedades requeridas del dispositivo móvil Las integraciones S2S son gestionadas por socios de terceros, y se requiere configuración en sus respectivas plataformas.
Dependencia de la actividad de la aplicación La aplicación debe iniciarse para que Singular SDK envíe el evento de suscripción. Los eventos de suscripción pueden enviarse en tiempo real, de servidor a servidor. Los eventos de suscripción se envían en tiempo real desde terceros asociados
Tiempo del evento Dado que el envío del evento depende del lanzamiento de la aplicación (y de la inicialización de Singular SDK), el evento enviado a Singular puede tener una hora diferente a la de la suscripción real. Los eventos de suscripción pueden enviarse en tiempo real, a medida que se procesan en el backend. Los eventos de suscripción pueden enviarse casi en tiempo real, después de ser procesados por el proveedor 3P.

Nota:

Si elige enviar eventos de suscripción a través de una de las integraciones S2S, la mayoría de los clientes aún deben integrar Singular SDK para gestionar sesiones y eventos que no sean de suscripción.

Implementar la gestión del estado de suscripción en la aplicación

Mediante la integración de Google Play Billing Library y Apple StoreKit, puede consultar la información de suscripción y gestionar el estado de suscripción directamente en el dispositivo. Esta configuración permite la integración con uno de los métodos de implementación de Singular. A continuación se incluyen fragmentos de código de muestra que muestran implementaciones sencillas de la biblioteca de facturación y StoreKit para que sirvan como ejemplos prácticos. Deberá modificar estos ejemplos en Producción para adaptarlos al código y al modelo de suscripción de su aplicación.

Android: Integración de la biblioteca de facturación de Google Play

1. Añade la biblioteca de facturación a tu proyecto

Añade la configuración de Google Play Billing Library en tu build.gradle

implementation 'com.android.billingclient:billing:6.0.1'

2. Configurar productos y suscripciones dentro de la aplicación

Configura tus productos in-app y elementos de suscripción en la Google Play Console

3. Consulta de la información de suscripción

Utiliza el BillingClient para consultar el historial de compras y el estado de la suscripción dentro de tu app.

KotlinJava
val billingClient = BillingClient.newBuilder(context)
  .setListener(purchaseUpdateListener)
  .enablePendingPurchases()
  .build()
billingClient.startConnection(object : BillingClientStateListener {
  override fun onBillingSetupFinished(billingResult: BillingResult) {
    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
        // The billing client is ready, you can now query subscription information asynchronously


        billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS) {result, subscriptionList ->
            if (result.responseCode == BillingClient.BillingResponseCode.OK && subscriptionList != null) {
                // Handle the retrieved subscription list


                subscriptionList.forEach { purchase ->
                    // Process each subscription purchase


                }
            } else {
                // Handle error in queryPurchasesAsync


            }
        }
    } else {
       // Handle error on setup finished


    }
  }
  override fun onBillingServiceDisconnected() {
    // Retry connection after a delay if the service gets disconnected


    Handler(Looper.getMainLooper()).postDelayed({
        billingClient.startConnection(this)
    }, 3000)
  }
})
// Remember to properly disconnect the billing client in your activity/fragment lifecycle


override fun onDestroy() {
    billingClient.endConnection()
    super.onDestroy()
}

iOS: Integración de StoreKit

1. Implementar StoreKit

Integra el framework StoreKit en tu app para iOS.

2. Configurar productos y suscripciones dentro de la aplicación

Configura productos in-app y elementos de suscripción en App Store Connect.

3. Consulta de la información de suscripción

Utilice SKPaymentQueue y SKReceiptRefreshRequest para obtener el estado de la suscripción y la información del recibo.

Swift
import StoreKit
class YourViewController: UIViewController, SKPaymentTransactionObserver {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Add the observer for payment transactions


        SKPaymentQueue.default().add(self)
        
        // Refresh the receipt to get the latest subscription information


        refreshReceipt()
    }
    func refreshReceipt() {
        let request = SKReceiptRefreshRequest()
        request.delegate = self
        request.start()
    }
    // Implement SKPaymentTransactionObserver methods


    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            switch transaction.transactionState {
            case .purchased, .restored:
                // Handle the purchase or restore


                // You can check the transaction.transactionReceipt for receipt information


                break
            case .failed:
                // Handle the failed transaction


                break
            case .deferred:
                // Handle the deferred transaction


                break
            case .purchasing:
                // Transaction is in progress


                break
            @unknown default:
                break
            }
        }
    }
    // Implement SKRequestDelegate method


    func requestDidFinish(_ request: SKRequest) {
        // Receipt refresh request completed


        // Now you can use the updated receipt to check subscription status


    }
    func request(_ request: SKRequest, didFailWithError error: Error) {
        // Handle the error during the receipt refresh request


    }
}

Envío de eventos de suscripción desde Singular SDK

Cuando el estado de la suscripción cambia en las implementaciones anteriores, se debe enviar un nuevo evento de ingreso personalizado a Singular. NO utilice las funciones IAP y NO envíe un valor de recibo a Singular. Siga la guía de implementación respectiva para el SDK de Singular que haya implementado en su aplicación para enviar un evento customRevenue() sin el recibo.

  • iOS SDK: utilice este método para enviar el nombre del evento "subscription":

    (void)customRevenue:(NSString*)eventname currency:(NSString *)currency
            amount:(double)amount withAttributes:(NSDictionary*)attributes;
  • Android SDK: utiliza este método para enviar el nombre del evento "subscription":

    Singular.customRevenue(String eventName, String currency, double
            amount, Map<String, Object> attributes)
  • React Native SDK: utilice este método para enviar el nombre del evento "subscription":

    static customRevenueWithArgs(eventName: string, currency: string,
            amount: number, args: SerializableObject): void;
  • Unity SDK: utilice este método para enviar el nombre del evento "subscription":

    SingularSDK.CustomRevenue(string eventName, string currency, double
            amount, Dictionary<string, object> attributes)
  • Flutter SDK: utilice este método para enviar el nombre del evento "subscription":

    Singular.customRevenueWithAttributes(String eventName, String currency, 
            double amount, Map attributes)
  • Cordova SDK: utilice este método para enviar el nombre del evento "subscription":

    SingularCordovaSdk.customRevenueWithArgs(String eventName, String currency, 
            double amount, JSONObject args)

Envío de eventos de suscripción S2S

Si prefiere enviar eventos de suscripción en tiempo real y gestionar los eventos de suscripción en su back-end, puede enviar eventos a la API REST de Singular.

Utilice el punto final de eventos para enviar eventos de suscripción a Singular y asegúrese de incluir los parámetros de ingresos.

  • Si ha implementado el SDK de Singular:
    • No debe enviar eventos de suscripción desde el SDK con esta opción.
    • No necesita integrarse con el punto final S2S de lanzamiento (Sesión)

Envío de eventos de suscripción a través de integración 3P

Si está utilizando un servicio de terceros para gestionar suscripciones, esos proveedores capturan los datos de suscripción a través de sus propios métodos de integración. A continuación, envían los eventos de suscripción a la API REST de Singular, que ya está integrada en sus sistemas. Estas integraciones requieren algunas configuraciones en las plataformas de los socios - consulte sus respectivas guías a continuación:

Eventos de suscripción

Se pueden enviar a Singular varios eventos de suscripción diferentes. Tenga en cuenta que los nombres de eventos estándar de Singular se proporcionan a continuación cuando corresponde (consulte la documentación del SDK correspondiente), pero también se pueden utilizar nombres de eventos personalizados si se desea.

Estado de suscripción Evento Método SDK Integración S2S
Suscripción sng_subscribe
  • customRevenue Método de evento (no admite validación de recibos)
  • Solicitud de evento con parámetros de ingresos
Inicio de prueba sng_start_trial
  • Método de evento (sin importe de ingresos)
  • Solicitud de evento estándar
Fin de prueba sng_end_trial (aún no es oficialmente un evento estándar, por lo que se enviará como un evento personalizado)
  • Método de evento (sin importe de ingresos)
  • Solicitud de evento estándar
Reembolso subscription_refunded
  • Método de evento customRevenue con ingresos negativos (opcional)
  • Método de evento (sin importe de ingresos)
  • Solicitud de evento con parámetros de ingresos e importe negativo (opcional)
  • Petición de evento estándar
Cancelación subscription_cancelled
  • Método de evento (sin importe de ingresos)
  • Solicitud de evento estándar
Renovación de suscripción subscription_renewed
  • customRevenue Método de evento (no admite validación de recibo)
  • Solicitud de evento con parámetros de ingresos

Nota:

Si decide enviar eventos de suscripción a través del método customRevenue, asegúrese de enviar sólo eventos en los que isRestored sea false.

Notas sobre la medición de SKAN

Singular puede medir los datos de eventos de suscripción a través de todos los métodos de integración indicados anteriormente. Tenga en cuenta que, dependiendo de la versión de SKAN, la medición de eventos puede estar limitada en función de la ventana de medición de postback de SKAN.

Si planea implementar el SDK de Singular para eventos de ciclo de vida y utilizar uno de los métodos de integración S2S anteriores para enviar eventos de suscripción, póngase en contacto con su CSM para habilitar SKAN híbrido.