Samouczki
Dodawanie zakupów w aplikacji do projektu
Last updated November 27, 2023
Ten przewodnik pokaże, jak dodać zakupy w aplikacji do swojego wyeksportowanego projektu hyperPad. Proszę sprawdzić wszystkie wymagania poniżej przed kontynuowaniem.
Wymagania
- Musisz mieć komputer Mac, aby wyeksportować swój projekt i dodać zakupy w aplikacji do wyeksportowanego projektu.
- Musisz mieć cocoapods zainstalowane na Macu. Jeśli nie masz zainstalowanego cocoapods na swoim Macu, postępuj zgodnie z instrukcjami tutaj.
- Musisz mieć zainstalowaną aplikację Terminal na swoim Macu.
- Potrzebujesz edytora tekstu zainstalowanego na swoim Macu.
Procedura
- Dodaj pod 'SwiftyStoreKit' do listy podów w pliku Podfile swojego wyeksportowanego projektu, używając edytora tekstu.
- W terminalu uruchom pod install. Może to zająć trochę czasu, więc czekaj!
- Zastąp zawartość HPSwift.swift następującym plikiem
//
// HPSwift.swift
// hyperPad-Project
//
// Utworzone przez Hameda Saadata w 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 {
// Dostarcz zawartość z serwera, następnie:
SwiftyStoreKit.finishTransaction(purchase.transaction)
}
// Odblokuj zawartość
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
case .failed, .purchasing, .deferred:
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseError")
break // nic nie rób
@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("Nic do przywrócenia")
}
}
})
/*
Dodaj funkcjonalność zachowań tutaj
*/
behaviours?.addReceiveKey("purchase", onReceive: { (recieveValue) in
// obsłuż logikę zakupu w aplikacji! //
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 = "Nieznany błąd. Proszę skontaktować się z pomocą techniczną"
case .clientInvalid: message = "Nie można zrealizować płatności"
case .paymentCancelled: break
case .paymentInvalid: message = "Identyfikator zakupu był nieprawidłowy"
case .paymentNotAllowed: message = "Urządzenie nie ma uprawnienia do dokonania płatności"
case .storeProductNotAvailable: message = "Produkt nie jest dostępny w obecnym sklepie"
case .cloudServicePermissionDenied: message = "Dostęp do informacji o usłudze w chmurze nie jest dozwolony"
case .cloudServiceNetworkConnectionFailed: message = "Nie można połączyć się z siecią"
case .cloudServiceRevoked: message = "Użytkownik cofnął zgodę na korzystanie z tej usługi w chmurze"
default: message = ((error as NSError).localizedDescription)
}
behaviours?.broadcastValue(message as NSString, withKey: "purchaseFailed")
}
}
})
}
}
}
Rzeczy do zapamiętania
behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
// dodaj swój kod tutaj
})
To zostanie uruchomione, gdy wyzwolisz zachowanie broadcast z kluczem restorePurchases.
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
Gdy zakup jest zakończony, wyzwoli zachowania wiadomości odbioru z kluczem purchaseComplete. INSERT_PURCHASE_IDENTIFIER_HERE_OR_USE_recieveValue można zastąpić identyfikatorem zakupu z AppStoreConnect LUB parametrem receiveValue. Jeśli używasz receiveValue, upewnij się, że w swoim zachowaniu broadcast wysyłasz identyfikator z App Store Connect.

