iOS
Achat in-app
Recherche…
Single IAP dans Swift 2
Après avoir créé un IAP dans iTunesConnect:
Dans le contrôleur de vue que vous voulez acheter
import StoreKit
et ajouter les délégués concernés
class ViewController: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver {
déclarer une variable avec l'identifiant du produit depuis iTunesConnect
var product_id: NSString?
override func viewDidLoad() {
product_id = "YOUR_PRODUCT_ID"
super.viewDidLoad()
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
//Check if product is purchased
if (NSUserDefaults.standardUserDefaults().boolForKey("purchased")){
// Hide ads
adView.hidden = true
} else {
print("Should show ads...")
}
}
câbler un bouton à une fonction pour acheter l'IAP
@IBAction func unlockAction(sender: AnyObject) {
print("About to fetch the product...")
// Can make payments
if (SKPaymentQueue.canMakePayments())
{
let productID:NSSet = NSSet(object: self.product_id!);
let productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<NSString>);
productsRequest.delegate = self;
productsRequest.start();
println("Fetching Products");
}else{
print("Can't make purchases");
}
}
Et voici quelques méthodes d'aide
func buyProduct(product: SKProduct){
println("Sending the Payment Request to Apple");
let payment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment);
}
les méthodes déléguées à déclarer
func productsRequest (request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
let count : Int = response.products.count
if (count>0) {
var validProduct: SKProduct = response.products[0] as SKProduct
if (validProduct.productIdentifier == self.product_id) {
print(validProduct.localizedTitle)
print(validProduct.localizedDescription)
print(validProduct.price)
buyProduct(validProduct);
} else {
print(validProduct.productIdentifier)
}
} else {
print("nothing")
}
}
func request(request: SKRequest!, didFailWithError error: NSError!) {
print("Error Fetching product information");
}
func paymentQueue(_ queue: SKPaymentQueue,
updatedTransactions transactions: [SKPaymentTransaction])
{
print("Received Payment Transaction Response from Apple");
for transaction:AnyObject in transactions {
if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
switch trans.transactionState {
case .Purchased:
print("Product Purchased");
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
// Handle the purchase
NSUserDefaults.standardUserDefaults().setBool(true , forKey: "purchased")
adView.hidden = true
break;
case .Failed:
print("Purchased Failed");
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
break;
case .Restored:
print("Already Purchased");
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
// Handle the purchase
NSUserDefaults.standardUserDefaults().setBool(true , forKey: "purchased")
adView.hidden = true
break;
default:
break;
}
}
}
}
Et puis le code pour restaurer un achat non consommable dans l'application
if (SKPaymentQueue.canMakePayments()) {
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
}
Configurer dans iTunesConnect
Dans iTunesConnect , sélectionnez l'application à laquelle vous souhaitez ajouter un IAP.
Cliquez sur les fonctionnalités et vous verrez ceci:
Cliquez sur le plus. Vous devrez ensuite sélectionner le type d'IAP que vous souhaitez créer.
Ensuite, vous devrez remplir toutes les informations pour votre IAP.
En cas de problème, vous pouvez consulter le Guide de configuration IAP .
Étapes de base pour l'achat / abonnement d'un utilisateur à un IAP
En supposant que vous connaissez le productID
:
Premier
import StoreKit
Alors dans votre code
let productID: Set = ["premium"]
let request = SKProductsRequest(productIdentifiers: productID)
request.delegate = self
request.start()
et dans le SKProductsRequestDelegate
:
func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
if response.products.count > 0 {
let product = response.products[0]
let payment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment)
}
}