Adicionando Compras Dentro do Aplicativo ao Seu Projeto
Este guia demonstrará como adicionar compras dentro do aplicativo ao seu projeto hyperPad exportado. Por favor, verifique todos os requisitos abaixo antes de prosseguir.
Requisitos
- Você precisa ter um computador Mac para exportar seu projeto e adicionar compras dentro do aplicativo ao seu projeto exportado.
- Você precisa ter cocoapods instalado no Mac. Se você não tiver cocoapods instalado no seu Mac, siga as instruções aqui.
- Você precisa ter o aplicativo Terminal instalado no seu Mac.
- Você precisa ter um aplicativo editor de texto instalado no seu Mac.
Procedimento
- Adicione o pod 'SwiftyStoreKit' à lista de pods no arquivo Podfile do seu projeto exportado usando um editor de texto.
- No terminal, execute pod install. Isso pode demorar um pouco, então aguarde!
- Substitua o conteúdo de HPSwift.swift pelo seguinte arquivo
//
// HPSwift.swift
// hyperPad-Project
//
// Criado por Hamed Saadat em 2019-08-07.
//
import Foundation
import SwiftyStoreKit
@objc class HPSwift: NSObject {
fileprivate var _behaviours: HPBehaviours? = nil
@objc var behaviours: HPBehaviours? {
get {
return _behaviours
}
set(behaviours) {_behaviours = behaviours
SwiftyStoreKit.completeTransactions(atomically: true) { purchases in
for purchase in purchases {
switch purchase.transaction.transactionState {
case .purchased, .restored:
if purchase.needsFinishTransaction {
// Entregar conteúdo do servidor, então:
SwiftyStoreKit.finishTransaction(purchase.transaction)
}
// Desbloquear conteúdo
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
case .failed, .purchasing, .deferred:
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseError")
break // não fazer nada
@unknown default:
break
}
}
}
behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
SwiftyStoreKit.restorePurchases(atomically: true) { results in
if results.restoreFailedPurchases.count > 0 {
behaviours?.broadcastValue("Restaurar Falhou: \(results.restoreFailedPurchases)" as NSString, withKey: "purchaseError")
}
else if results.restoredPurchases.count > 0 {
results.restoredPurchases.forEach { (purchase) in
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
}
}
else {
print("Nada para Restaurar")
}
}
})
/*
Adicione funcionalidade de Comportamento aqui
*/
behaviours?.addReceiveKey("purchase", onReceive: { (recieveValue) in
// handle in app purchase logic! //
SwiftyStoreKit.purchaseProduct("INSIRA_ID_DE_COMPRA_AQUI_OU_USE_recieveValue", quantity: 1, atomically: true) { result in
switch result {
case .success(let purchase):
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
case .error(let error):
var message = ""
switch error.code {
case .unknown: message = "Erro desconhecido. Por favor, entre em contato com o suporte"
case .clientInvalid: message = "Não permitido a realizar o pagamento"
case .paymentCancelled: break
case .paymentInvalid: message = "O identificador da compra era inválido"
case .paymentNotAllowed: message = "O dispositivo não está autorizado a realizar o pagamento"
case .storeProductNotAvailable: message = "O produto não está disponível na loja atual"
case .cloudServicePermissionDenied: message = "Acesso às informações do serviço de nuvem não é permitido"
case .cloudServiceNetworkConnectionFailed: message = "Não foi possível conectar à rede"
case .cloudServiceRevoked: message = "O usuário revogou a permissão para usar este serviço de nuvem"
default: message = ((error as NSError).localizedDescription)
}
behaviours?.broadcastValue(message as NSString, withKey: "purchaseFailed")
}
}
})
}
}
}
Coisas a Notar
behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
// adicione seu código aqui
})
Isso será acionado quando você ativar um comportamento de transmissão com a chave restorePurchases.
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
Uma vez que a compra esteja completa, ela acionará comportamentos de mensagem de recebimento com a chave purchaseComplete. INSIRA_ID_DE_COMPRA_AQUI_OU_USE_recieveValue pode ser substituído pelo identificador da sua compra do AppStoreConnect OU o parâmetro receiveValue. Se você usar receiveValue, certifique-se de que em seu comportamento de transmissão, você está enviando o identificador do App Store Connect.

