SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
24.11.2024

Lição: 128: Compras Dentro do Aplicativo e Assinaturas

Nesta aula, vamos explorar como implementar compras dentro do aplicativo (IAP) e assinaturas em uma aplicação iOS usando Swift. As compras dentro do aplicativo permitem que os usuários comprem conteúdo ou funcionalidades dentro do seu app, enquanto as assinaturas oferecem uma maneira para os usuários pagarem por acesso a conteúdo ou serviços por um período de tempo.

Configurando Compras Dentro do Aplicativo

Antes de implementar compras dentro do aplicativo, você precisa configurar seu app no App Store Connect:

  1. Crie um App ID: Na sua conta de desenvolvedor Apple, crie um App ID para sua aplicação.
  2. Crie um Produto IAP: No App Store Connect, vá para "Meus Apps", selecione seu app e, em seguida, vá para a seção "Compras Dentro do Aplicativo". Clique no sinal de "+" para adicionar um novo produto. Você precisará especificar o ID do Produto e o tipo (consumível, não consumível ou assinatura).
  3. Configure as Opções da App Store: Certifique-se de que seu app esteja configurado para incluir as capacidades necessárias. Vá para seu alvo de app -> Assinaturas e Capacidades -> "+" -> Compras Dentro do Aplicativo.

Implementação do Código

Para implementar compras dentro do aplicativo e assinaturas em Swift, utilizaremos o framework StoreKit. Veja como fazer isso passo a passo.

Passo 1: Importar o Framework StoreKit

Primeiro, certifique-se de importar o framework StoreKit no seu controlador de visualização.

import StoreKit

Passo 2: Implementar SKProductsRequestDelegate

Você precisa criar uma classe que implemente SKProductsRequestDelegate para gerenciar solicitações de produtos.

class IAPManager: NSObject {
    static let shared = IAPManager()

    private var productRequest: SKProductsRequest?
    private var products: [SKProduct] = []

    func fetchProducts(productIds: [String]) {
        productRequest?.cancel() // Cancela a solicitação anterior, se existir
        productRequest = SKProductsRequest(productIdentifiers: Set(productIds))
        productRequest?.delegate = self
        productRequest?.start()
    }
}

extension IAPManager: SKProductsRequestDelegate {
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        products = response.products
        for product in products {
            print("Produto encontrado: \(product.localizedTitle), preço: \(product.price)")
        }
    }
}

Passo 3: Comprar um Produto

Você pode adicionar um método para lidar com a compra de um produto.

extension IAPManager {
    func purchase(product: SKProduct) {
        let payment = SKPayment(product: product)
        SKPaymentQueue.default().add(payment)
    }
}

Passo 4: Implementar o Observador de Transações de Pagamento

Você precisa observar a transação de pagamento. Implemente SKPaymentTransactionObserver para gerenciar as atualizações da transação.

class IAPManager: NSObject, SKPaymentTransactionObserver {
    override init() {
        super.init()
        SKPaymentQueue.default().add(self)
    }

    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            switch transaction.transactionState {
            case .purchased:
                complete(transaction: transaction)
            case .failed:
                failed(transaction: transaction)
            case .restored:
                restore(transaction: transaction)
            default:
                break
            }
        }
    }

    private func complete(transaction: SKPaymentTransaction) {
        // Desbloquear funcionalidades, fornecer conteúdo comprado, etc.
        SKPaymentQueue.default().finishTransaction(transaction)
        print("Transação finalizada com sucesso.")
    }

    private func failed(transaction: SKPaymentTransaction) {
        if let error = transaction.error as? SKError {
            print("Transação falhada: \(error.localizedDescription)")
        }
        SKPaymentQueue.default().finishTransaction(transaction)
    }

    private func restore(transaction: SKPaymentTransaction) {
        // Fornecer conteúdo anteriormente comprado, se houver
        SKPaymentQueue.default().finishTransaction(transaction)
    }
}

Passo 5: Solicitação de Assinaturas

O processo para solicitar assinaturas é semelhante ao de compras dentro do aplicativo. Você pode solicitar produtos de assinatura da mesma forma:

let subscriptionProductIds = ["com.seuapp.assinatura"]
IAPManager.shared.fetchProducts(productIds: subscriptionProductIds)

Passo 6: Lidar com Compras de Assinaturas

Você pode usar o mesmo método purchase(product:) para assinaturas também. Além disso, certifique-se de verificar o status da assinatura e gerenciar datas de expiração adequadamente.

Conclusão

Compras dentro do aplicativo e assinaturas são uma maneira poderosa de monetizar seu app. Ao usar o framework StoreKit, você pode implementar facilmente esses recursos. Lembre-se de testar IAPs minuciosamente usando contas SandBox antes de disponibilizá-los na App Store.

Agora, você tem a base para começar a integrar compras dentro do aplicativo e assinaturas em suas aplicações Swift. Boa codificação!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!