Поиск…


Единый IAP в Swift 2

После создания IAP в iTunesConnect:

В контроллере представления, который вы хотите купить в

import StoreKit

и добавить соответствующих делегатов

class ViewController: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver {

объявить переменную с идентификатором продукта из 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...")
        
   }

}

подключите кнопку к функции для покупки 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");
    }

}

И вот некоторые вспомогательные методы

func buyProduct(product: SKProduct){
    println("Sending the Payment Request to Apple");
    let payment = SKPayment(product: product)
    SKPaymentQueue.defaultQueue().addPayment(payment);
    
 }

методы делегата, которые должны быть объявлены

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;
            }
        }
    }
    
}

И тогда код для восстановления нерасходуемого в приложении покупки

if (SKPaymentQueue.canMakePayments()) {
  SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
}

Настройка в iTunesConnect

В iTunesConnect выберите приложение, к которому вы хотите добавить IAP.

Нажмите на функции, и вы увидите следующее:

введите описание изображения здесь

Нажмите плюс. Затем вам нужно будет выбрать тип IAP, который вы хотите создать.

Затем вам нужно будет заполнить всю информацию для вашего IAP.

введите описание изображения здесь

Если у вас есть какие-либо проблемы, вы можете обратиться к руководству по настройке IAP .

Большинство основных шагов для покупки / подписки пользователя на IAP

Предполагая, что вы знаете productID :

Первый

import StoreKit

Затем в вашем коде

let productID: Set = ["premium"]
let request = SKProductsRequest(productIdentifiers: productID)
request.delegate = self
request.start()

и в 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)
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow