Tutorial
Aggiungere acquisti in-app al tuo progetto
Last updated November 27, 2023
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
- Aggiungi il pod 'SwiftyStoreKit' all'elenco dei pod nel file Podfile del tuo progetto esportato utilizzando un editor di testo.
- Nel terminale, esegui pod install. Questo potrebbe richiedere del tempo, quindi aspetta!
- 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")
}
}
})
}
}
}

