Agregar Compras In-App a Tu Proyecto | hyperPad Documentation

Loading...

Logo

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

  1. Agrega el pod 'SwiftyStoreKit' a la lista de pods en el archivo Podfile de tu proyecto exportado usando un editor de texto.
  2. En la terminal, ejecuta pod install. Esto podría tardar un poco, ¡así que ten paciencia!
  3. 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")
                        }
                    }
            })
        }
    }

}