Ajouter des achats intégrés à votre projet
Ce guide démontrera comment ajouter des achats intégrés à votre projet hyperPad exporté. Veuillez vérifier toutes les exigences ci-dessous avant de continuer.
Exigences
- Vous devez avoir un ordinateur Mac pour exporter votre projet et ajouter des achats intégrés à votre projet exporté.
- Vous devez avoir cocoapods installé sur le mac.Si vous n'avez pas cocoapods installé sur votre Mac, suivez les instructions ici.
- Vous devez avoir l'application Terminal installée sur votre Mac.
- Vous avez besoin d'une application de éditeur de texte installée sur votre Mac.
Procédure
- Ajoutez le pod 'SwiftyStoreKit' à la liste des pods dans le fichier Podfile de votre projet exporté en utilisant un éditeur de texte.
- Dans le terminal, exécutez pod install. Cela peut prendre un certain temps, alors tenez bon !
- Remplacez le contenu de HPSwift.swift par le fichier suivant
//
// HPSwift.swift
// hyperPad-Project
//
// Créé par Hamed Saadat le 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 {
// Livrer le contenu du serveur, puis :
SwiftyStoreKit.finishTransaction(purchase.transaction)
}
// Débloquer le contenu
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
case .failed, .purchasing, .deferred:
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseError")
break // ne rien faire
@unknown default:
break
}
}
}
behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
SwiftyStoreKit.restorePurchases(atomically: true) { results in
if results.restoreFailedPurchases.count > 0 {
behaviours?.broadcastValue("Restore Failed: \(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("Nothing to Restore")
}
}
})
/*
Ajoutez ici des fonctionnalités de comportement
*/
behaviours?.addReceiveKey("purchase", onReceive: { (recieveValue) in
// gérez la logique d'achat intégré ! //
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 = "Erreur inconnue. Veuillez contacter le support"
case .clientInvalid: message = "Impossible de procéder au paiement"
case .paymentCancelled: break
case .paymentInvalid: message = "L'identifiant d'achat était invalide"
case .paymentNotAllowed: message = "L'appareil n'est pas autorisé à effectuer le paiement"
case .storeProductNotAvailable: message = "Le produit n'est pas disponible dans la boutique actuelle"
case .cloudServicePermissionDenied: message = "L'accès aux informations sur le service cloud n'est pas autorisé"
case .cloudServiceNetworkConnectionFailed: message = "Impossible de se connecter au réseau"
case .cloudServiceRevoked: message = "L'utilisateur a révoqué l'autorisation d'utiliser ce service cloud"
default: message = ((error as NSError).localizedDescription)
}
behaviours?.broadcastValue(message as NSString, withKey: "purchaseFailed")
}
}
})
}
}
}
À noter
behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
// ajoutez votre code ici
})
Cela sera déclenché lorsque vous déclencherez un comportement de diffusion avec la clé restorePurchases.
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
Une fois l'achat terminé, cela déclenchera des messages de réception de comportements avec la clé purchaseComplete. INSERT_PURCHASE_IDENTIFIER_HERE_OR_USE_recieveValue peut être remplacé par l'identifiant de votre achat depuis AppStoreConnect OU le paramètre receiveValue. Si vous utilisez receiveValue, assurez-vous que dans votre comportement de diffusion, vous envoyez l'identifiant de l'App Store Connect.

