Guia de implementação técnica de eventos de assinatura

Documento

Visão geral:

Este documento fornece um guia abrangente sobre como implementar eventos de assinatura usando o Singular SDK. Ele cobre o rastreamento de eventos de assinatura no aplicativo em várias plataformas, integração de eventos de servidor para servidor (S2S) e integrações de terceiros como RevenueCat e Adapty.

O Singular permite-lhe acompanhar as suas subscrições e renovações na sua aplicação, fornecendo informações sobre o comportamento do utilizador e a geração de receitas. A atribuição de assinatura do Singular oferece métodos robustos para rastrear eventos de assinatura, garantindo uma coleta de dados precisa e em tempo real.

Considerações SDK S2S Integração S2S 3P
Implementação Enviar eventos de assinatura para a Singular através dos métodos Revenue personalizados no SDK Enviar eventos de assinatura gerenciados em seu backend para a API REST da Singular (implementação direta de S2S) com as propriedades necessárias do dispositivo móvel As integrações S2S são gerenciadas por parceiros terceirizados, e a configuração é necessária em suas respectivas plataformas
Dependência da atividade da aplicação A aplicação deve ser lançada para que o SDK Singular envie o evento de subscrição Os eventos de subscrição podem ser enviados em tempo real, de servidor para servidor Os eventos de subscrição são enviados em tempo real por parceiros terceiros
Tempo do evento Como o envio do evento depende do lançamento do aplicativo (e da inicialização do SDK da Singular), o evento enviado para a Singular pode ter um horário diferente do horário real da assinatura Os eventos de assinatura podem ser enviados em tempo real, à medida que são processados no seu backend Os eventos de assinatura podem ser enviados quase em tempo real, após serem processados pelo fornecedor 3P

Nota:

Se você optar por enviar eventos de assinatura por meio de uma das integrações S2S, a maioria dos clientes ainda deve integrar o SDK do Singular para gerenciar sessões e eventos que não são de assinatura.

Implementar a gestão do estado da subscrição na aplicação

Ao integrar a biblioteca de faturação do Google Play e o StoreKit da Apple, pode consultar informações sobre a subscrição e gerir o estado da subscrição diretamente no dispositivo. Essa configuração permite a integração com um dos métodos de implementação do Singular. Abaixo estão exemplos de trechos de código que demonstram implementações simples da Biblioteca de Faturamento e do StoreKit para servir como exemplos práticos. Deve modificar estes exemplos na Produção para se adaptarem ao código e ao modelo de subscrição da sua aplicação.

Android: integração da biblioteca de faturação do Google Play

1. Adicionar a biblioteca de faturação ao seu projeto

Adicione a configuração da biblioteca de faturação do Google Play no seu build.gradle

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

2. Configurar produtos e subscrições na aplicação

Configure os seus produtos in-app e itens de subscrição na Consola do Google Play

3. Consultar informações de subscrição

Utilize o BillingClient para consultar o histórico de compras e o estado da subscrição na sua aplicação.

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: Integrar o StoreKit

1. Implementar o StoreKit

Integre a estrutura do StoreKit no seu aplicativo iOS.

2. Configurar produtos e subscrições in-app

Configure produtos in-app e itens de subscrição no App Store Connect

3. Consultar informações de subscrição

Utilize SKPaymentQueue e SKReceiptRefreshRequest para obter o estado da subscrição e as informações do 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


    }
}

Enviar eventos de subscrição a partir do Singular SDK

Quando o estado da assinatura muda nas implementações acima, um novo evento Revenue personalizado deve ser enviado ao Singular. NÃO use as funções IAP e NÃO envie um valor de recibo para o Singular. Siga o respetivo guia de implementação do SDK da Singular que você implementou em seu aplicativo para enviar um evento customRevenue() sem o recibo.

  • SDK do iOS: use este método para enviar o nome do evento "subscription":

    (void)customRevenue:(NSString*)eventname currency:(NSString *)currency
            amount:(double)amount withAttributes:(NSDictionary*)attributes;
  • Android SDK: utilize este método para enviar o nome do evento "subscription":

    Singular.customRevenue(String eventName, String currency, double
            amount, Map<String, Object> attributes)
  • React Native SDK: utilize este método para enviar o nome do evento "subscription":

    static customRevenueWithArgs(eventName: string, currency: string,
            amount: number, args: SerializableObject): void;
  • Unity SDK: utilize este método para enviar o nome do evento "subscription":

    SingularSDK.CustomRevenue(string eventName, string currency, double
            amount, Dictionary<string, object> attributes)
  • Flutter SDK: utilize este método para enviar o nome do evento "subscription":

    Singular.customRevenueWithAttributes(String eventName, String currency, 
            double amount, Map attributes)
  • Cordova SDK: utilize este método para enviar o nome do evento "subscription":

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

Envio de eventos de subscrição S2S

Se preferir enviar eventos de assinatura em tempo real e gerenciar eventos de assinatura em seu back-end, você pode enviar eventos para a API REST do Singular.

Use o Event Endpoint para enviar eventos de assinatura para o Singular e certifique-se de incluir os parâmetros Revenue.

  • Se você tiver implementado o SDK do Singular:
    • Você não deve enviar eventos de assinatura do SDK com esta opção
    • Não é necessário integrar-se ao ponto de extremidade S2S de lançamento (sessão)

Envio de eventos de assinatura via integração 3P

Se você estiver usando um serviço de terceiros para gerenciar assinaturas, esses fornecedores capturam dados de assinatura por meio de seus próprios métodos de integração. Em seguida, eles enviam eventos de assinatura para a API REST do Singular, que já está integrada em seus sistemas. Estas integrações requerem algumas configurações nas plataformas dos parceiros - consulte os respectivos guias abaixo:

Eventos de assinatura

Vários eventos de assinatura diferentes podem ser enviados para o Singular. Observe que os nomes de eventos padrão da Singular são fornecidos quando aplicáveis abaixo (consulte a documentação relevante do SDK), mas nomes de eventos personalizados também podem ser usados, se desejado.

Estado da assinatura Evento Método SDK Integração S2S
Assinatura sng_subscribe
  • método de evento customRevenue (validação de recibo não suportada)
  • Pedido de evento com parâmetros de receita
Início do teste sng_start_trial
  • Método de evento (sem montante de receita)
  • Pedido de evento standard
Fim do ensaio sng_end_trial (ainda não é oficialmente um evento padrão, pelo que será enviado como um evento personalizado)
  • Método de evento (sem montante de receitas)
  • Pedido de evento padrão
Reembolso subscription_refunded
  • Método de evento customRevenue com receita negativa (opcional)
  • Método de evento (sem montante de receitas)
  • Pedido de evento com parâmetros de receita e montante negativo (opcional)
  • Pedido de evento standard
Cancelamento subscription_cancelled
  • Método de evento (sem montante de receitas)
  • Pedido de evento padrão
Renovação de subscrição subscription_renewed
  • Método de evento customRevenue (validação de recibo não suportada)
  • Pedido de evento com parâmetros de receita

Nota:

Se optar por enviar eventos de subscrição através do método customRevenue, certifique-se de que envia apenas eventos em que isRestored é falso.

Notas sobre a medição de SKAN

A Singular pode medir dados de eventos de assinatura por meio de todos os métodos de integração mencionados acima. Observe que, dependendo da versão do SKAN, a medição de eventos pode ser limitada dependendo da janela de medição de postback do SKAN.

Se você planeja implementar o SDK da Singular para eventos de ciclo de vida e usar um dos métodos de integração S2S acima para enviar eventos de assinatura, entre em contato com o CSM para habilitar o SKAN híbrido.