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:
- Crie um App ID: Na sua conta de desenvolvedor Apple, crie um App ID para sua aplicação.
- 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).
- 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!