Tutoriales
Agregar Compras In-App a Tu Proyecto
Last updated November 27, 2023
Esta guía demostrará cómo agregar compras dentro de la aplicación a tu proyecto exportado de hyperPad. Por favor, revisa todos los requisitos a continuación antes de continuar.
Requisitos
- Necesitas tener una computadora Mac para exportar tu proyecto y agregar compras dentro de la aplicación a tu proyecto exportado.
- Necesitas tener cocoapods instalado en el Mac. Si no tienes cocoapods instalado en tu Mac, sigue las instrucciones aquí.
- Necesitas tener la aplicación Terminal instalada en tu Mac.
- Necesitas tener una aplicación de editor de texto instalada en tu Mac.
Procedimiento
- Agrega el pod 'SwiftyStoreKit' a la lista de pods en el archivo Podfile de tu proyecto exportado usando un editor de texto.
- En la terminal, ejecuta pod install. Esto podría tardar un poco, ¡así que ten paciencia!
- Reemplaza el contenido de HPSwift.swift con el siguiente archivo
//
// HPSwift.swift
// hyperPad-Project
//
// Creado por Hamed Saadat el 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 contenido desde el servidor, luego:
SwiftyStoreKit.finishTransaction(purchase.transaction)
}
// Desbloquear contenido
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
case .failed, .purchasing, .deferred:
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseError")
break // no hacer nada
@unknown default:
break
}
}
}
behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
SwiftyStoreKit.restorePurchases(atomically: true) { results in
if results.restoreFailedPurchases.count > 0 {
behaviours?.broadcastValue("Restaurar fallido: \(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 que restaurar")
}
}
})
/*
Agrega la funcionalidad del comportamiento aquí
*/
behaviours?.addReceiveKey("purchase", onReceive: { (recieveValue) in
// manejar la lógica de compra dentro de la aplicación!
SwiftyStoreKit.purchaseProduct("INSERT_PURCHASE_IDENTIFIER_HERE_OR_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 = "Error desconocido. Por favor contacta con soporte"
case .clientInvalid: message = "No se permite realizar el pago"
case .paymentCancelled: break
case .paymentInvalid: message = "El identificador de compra era inválido"
case .paymentNotAllowed: message = "El dispositivo no está permitido para realizar el pago"
case .storeProductNotAvailable: message = "El producto no está disponible en la tienda actual"
case .cloudServicePermissionDenied: message = "No se permite el acceso a la información del servicio en la nube"
case .cloudServiceNetworkConnectionFailed: message = "No se pudo conectar a la red"
case .cloudServiceRevoked: message = "El usuario ha revocado el permiso para usar este servicio en la nube"
default: message = ((error as NSError).localizedDescription)
}
behaviours?.broadcastValue(message as NSString, withKey: "purchaseFailed")
}
}
})
}
}
}

