Ajouter des achats intégrés à votre projet | hyperPad Documentation

Loading...

Logo

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

  1. Ajoutez le pod 'SwiftyStoreKit' à la liste des pods dans le fichier Podfile de votre projet exporté en utilisant un éditeur de texte.
  2. Dans le terminal, exécutez pod install. Cela peut prendre un certain temps, alors tenez bon !
  3. 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.