Adicionando Compras Dentro do Aplicativo ao Seu Projeto | hyperPad Documentation

Loading...

Logo

Este guia demonstrará como adicionar compras dentro do aplicativo ao seu projeto hyperPad exportado. Por favor, verifique todos os requisitos abaixo antes de prosseguir.

Requisitos

  • Você precisa ter um computador Mac para exportar seu projeto e adicionar compras dentro do aplicativo ao seu projeto exportado.
  • Você precisa ter cocoapods instalado no Mac. Se você não tiver cocoapods instalado no seu Mac, siga as instruções aqui.
  • Você precisa ter o aplicativo Terminal instalado no seu Mac.
  • Você precisa ter um aplicativo editor de texto instalado no seu Mac.

Procedimento

  1. Adicione o pod 'SwiftyStoreKit' à lista de pods no arquivo Podfile do seu projeto exportado usando um editor de texto.
  2. No terminal, execute pod install. Isso pode demorar um pouco, então aguarde!
  3. Substitua o conteúdo de HPSwift.swift pelo seguinte arquivo
//
// HPSwift.swift
// hyperPad-Project
//
// Criado por Hamed Saadat em 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 conteúdo do servidor, então:
                            SwiftyStoreKit.finishTransaction(purchase.transaction)
                        }
                        // Desbloquear conteúdo
                        behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")

                    case .failed, .purchasing, .deferred:
                        behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseError")
                        break // não fazer nada
                    @unknown default:
                        break
                    }
                }
            }

            behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
                SwiftyStoreKit.restorePurchases(atomically: true) { results in
                    if results.restoreFailedPurchases.count > 0 {
                        behaviours?.broadcastValue("Restaurar Falhou: \(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 para Restaurar")
                    }
                }
            })

            /*
             Adicione funcionalidade de Comportamento aqui
            */

            behaviours?.addReceiveKey("purchase", onReceive: { (recieveValue) in
                 // handle in app purchase logic! //
                    SwiftyStoreKit.purchaseProduct("INSIRA_ID_DE_COMPRA_AQUI_OU_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 = "Erro desconhecido. Por favor, entre em contato com o suporte"
                            case .clientInvalid: message = "Não permitido a realizar o pagamento"
                            case .paymentCancelled: break
                            case .paymentInvalid: message = "O identificador da compra era inválido"
                            case .paymentNotAllowed: message = "O dispositivo não está autorizado a realizar o pagamento"
                            case .storeProductNotAvailable: message = "O produto não está disponível na loja atual"
                            case .cloudServicePermissionDenied: message = "Acesso às informações do serviço de nuvem não é permitido"
                            case .cloudServiceNetworkConnectionFailed: message = "Não foi possível conectar à rede"
                            case .cloudServiceRevoked: message = "O usuário revogou a permissão para usar este serviço de nuvem"
                            default: message = ((error as NSError).localizedDescription)
                            }
                            behaviours?.broadcastValue(message as NSString, withKey: "purchaseFailed")
                        }
                    }
            })
        }
    }

}

Coisas a Notar

behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
                // adicione seu código aqui
            })

Isso será acionado quando você ativar um comportamento de transmissão com a chave restorePurchases.

behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")

Uma vez que a compra esteja completa, ela acionará comportamentos de mensagem de recebimento com a chave purchaseComplete. INSIRA_ID_DE_COMPRA_AQUI_OU_USE_recieveValue pode ser substituído pelo identificador da sua compra do AppStoreConnect OU o parâmetro receiveValue. Se você usar receiveValue, certifique-se de que em seu comportamento de transmissão, você está enviando o identificador do App Store Connect.