Aggiungere acquisti in-app al tuo progetto | hyperPad Documentation

Loading...

Logo

Questa guida dimostrerà come aggiungere acquisti in-app al tuo progetto hyperPad esportato. Si prega di controllare tutti i requisiti di seguito prima di procedere.

Requisiti

  • Hai bisogno di avere un computer Mac per esportare il tuo progetto e aggiungere acquisti in-app al tuo progetto esportato.
  • Devi avere cocoapods installato sul Mac. Se non hai cocoapods installato sul tuo Mac, segui le istruzioni qui.
  • Devi avere l'app Terminal installata sul tuo Mac.
  • Hai bisogno di un'app editor di testo installata sul tuo Mac.

Procedura

  1. Aggiungi il pod 'SwiftyStoreKit' all'elenco dei pod nel file Podfile del tuo progetto esportato utilizzando un editor di testo.
  2. Nel terminale, esegui pod install. Questo potrebbe richiedere del tempo, quindi aspetta!
  3. Sostituisci il contenuto di HPSwift.swift con il seguente file
//
// HPSwift.swift
// hyperPad-Project
//
// Creato da Hamed Saadat il 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 {
                            // Consegna contenuto dal server, poi:
                            SwiftyStoreKit.finishTransaction(purchase.transaction)
                        }
                        // Sblocca contenuto
                        behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")

                    case .failed, .purchasing, .deferred:
                        behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseError")
                        break // non fare nulla
                    @unknown default:
                        break
                    }
                }
            }

            behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
                SwiftyStoreKit.restorePurchases(atomically: true) { results in
                    if results.restoreFailedPurchases.count > 0 {
                        behaviours?.broadcastValue("Restauro non riuscito: \(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("Nessun elemento da ripristinare")
                    }
                }
            })

            /*
             Aggiungi qui la funzionalità del comportamento
            */

            behaviours?.addReceiveKey("purchase", onReceive: { (recieveValue) in
                 // gestisci la logica dell'acquisto in app! //
                    SwiftyStoreKit.purchaseProduct("INSERISCI_IDENTIFICATORE_ACQUISTO_QUI_O_USA_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 = "Errore sconosciuto. Contatta il supporto"
                            case .clientInvalid: message = "Non è permesso effettuare il pagamento"
                            case .paymentCancelled: break
                            case .paymentInvalid: message = "L'identificatore d'acquisto non era valido"
                            case .paymentNotAllowed: message = "Il dispositivo non è autorizzato a effettuare il pagamento"
                            case .storeProductNotAvailable: message = "Il prodotto non è disponibile nel negozio attuale"
                            case .cloudServicePermissionDenied: message = "L'accesso alle informazioni del servizio cloud non è consentito"
                            case .cloudServiceNetworkConnectionFailed: message = "Impossibile connettersi alla rete"
                            case .cloudServiceRevoked: message = "L'utente ha revocato il permesso di utilizzare questo servizio cloud"
                            default: message = ((error as NSError).localizedDescription)
                            }
                            behaviours?.broadcastValue(message as NSString, withKey: "purchaseFailed")
                        }
                    }
            })
        }
    }

}