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
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.
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()
}
BillingClient billingClient = BillingClient.newBuilder(context)
.setListener(purchaseUpdateListener)
.enablePendingPurchases()
.build();
BillingClientStateListener billingClientStateListener = new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
// The billing client is ready, you can now query subscription information asynchronously
billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS, (result, purchasesList) -> {
if (result.getResponseCode() == BillingClient.BillingResponseCode.OK && purchasesList != null) {
// Handle the retrieved subscription list
for (Purchase purchase : purchasesList) {
// Process each subscription purchase
}
} else {
// Handle error in queryPurchasesAsync
}
});
} else {
// Handle error on setup finished
}
}
@Override
public void onBillingServiceDisconnected() {
// Retry connection after a delay if the service gets disconnected
new Handler(Looper.getMainLooper()).postDelayed(() -> billingClient.startConnection(billingClientStateListener), 3000);
}
};
billingClient.startConnection(billingClientStateListener);
@Override
protected void onDestroy() {
super.onDestroy();
if (billingClient != null) {
billingClient.endConnection();
}
}
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.
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 |
|
|
Inicio de prueba | sng_start_trial |
|
|
Fin de prueba | sng_end_trial (aún no es oficialmente un evento estándar, por lo que se enviará como un evento personalizado) |
|
|
Reembolso | subscription_refunded |
|
|
Cancelación | subscription_cancelled |
|
|
Renovación de suscripción | subscription_renewed |
|
|
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.