Swift IOS 9 - Реализация покупки в приложении самым простым способом

ios swift in-app-purchase

3519 просмотра

2 ответа

418 Репутация автора

я пытаюсь осуществить в своем приложении одну покупку в приложении, чтобы удалить рекламу, со стороны iTunes Connect очень легко, но для части кода я нахожу только учебники с таблицей и / или более старой версией swift или objC

Я добавил покупку из приложения в iTunes Connect в новой версии приложения, в приложении я добавил вид с 2 кнопками, одну для покупки и другую для восстановления предыдущих покупок, но я не знаю код, для теперь раздел inapp моего viewcontroller

import StoreKit

var productIDs: Array<String!> = []

var productsArray: Array<SKProduct!> = []

class ViewController: UIViewController, SKProductsRequestDelegate {

Это нормально? Нужны ли мне массивы, если у меня только одна покупка в приложении?

Я также добавил покупку в приложении в разделе возможностей, но у меня есть красный восклицательный знак рядом с надписью «добавить право покупки приложения к идентификатору вашего приложения», но я увидел то же самое для раздела игрового центра, а также для лидеров и достижений. работает, так что я думаю, что я не должен беспокоиться об этом

Что касается удаления надстройки, что является лучшим способом?

Я использую admob, и я думал добавить оператор if в Appdelegate и поместить внутри него секцию создания и загрузки. В коде есть некоторая переменная, установленная в true, если пользователь сделал эту покупку, или я должен проверять ее каждый раз, когда пользователь открывает приложение?

Заранее благодарю за ответы

Автор: GioB Источник Размещён: 18.07.2016 08:57

Ответы (2)


6 плюса

7016 Репутация автора

Решение

Следующие работы в Swift 2.

Во-первых, в Itunes Connect сделать IAP

Импорт Storekit

import StoreKit

Добавьте делегатов StoreKit

class ViewController: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver {

Объявите свой идентификатор продукта

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...")

   }

}

Разблокировать контент: это действие кнопки, которое инициализирует покупку

@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);
        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);

 }

Методы делегирования для IAP

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()
}
Автор: Wyetro Размещён: 18.07.2016 02:33

8 плюса

301 Репутация автора

Ответ WMios в Swift 3 .

Во-первых, в Itunes Connect сделать IAP

Импорт Storekit

import StoreKit

Добавьте делегатов StoreKit

class ViewController: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver {

Объявите свой идентификатор продукта

var product_id: String?

override func viewDidLoad() {
    super.viewDidLoad()

    product_id = "YOUR_PRODUCT_ID"

    SKPaymentQueue.default().add(self)

    //Check if product is purchased
    if (UserDefaults.standard.bool(forKey: "purchased")){

        // Hide ads
        //adView.hidden = true

    } else {
        print("Should show ads...")

    }

}

Разблокировать контент: это действие кнопки, которое инициализирует покупку

@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<String>);
                productsRequest.delegate = self;
                productsRequest.start();
                print("Fetching Products");
            }else{
                print("Can't make purchases");
            }

}

Вспомогательные методы

func buyProduct(product: SKProduct){
    print("Sending the Payment Request to Apple");
    let payment = SKPayment(product: product)
    SKPaymentQueue.default().add(payment);

}

Методы делегирования для IAP

func productsRequest (_ request: SKProductsRequest, didReceive response: SKProductsResponse) {

    let count : Int = response.products.count
    if (count>0) {
        let validProduct: SKProduct = response.products[0] as SKProduct
        if (validProduct.productIdentifier == self.product_id) {
            print(validProduct.localizedTitle)
            print(validProduct.localizedDescription)
            print(validProduct.price)
            buyProduct(product: validProduct);
        } else {
            print(validProduct.productIdentifier)
        }
    } else {
        print("nothing")
    }
}


func request(_ request: SKRequest, didFailWithError error: Error) {
    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.default().finishTransaction(transaction as! SKPaymentTransaction)
                // Handle the purchase
                UserDefaults.standard.set(true , forKey: "purchased")
                //adView.hidden = true
                break;
            case .failed:
                print("Purchased Failed");
                SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                break;



            case .restored:
                print("Already Purchased");
                SKPaymentQueue.default().restoreCompletedTransactions()


                // Handle the purchase
                UserDefaults.standard.set(true , forKey: "purchased")
                //adView.hidden = true
                break;
            default:
                break;
            }
        }
    }

}

Восстановить покупки

Добавьте это к функции:

if (SKPaymentQueue.canMakePayments()) {
  SKPaymentQueue.default().restoreCompletedTransactions()
}
Автор: Adnan Yusuf Размещён: 18.01.2017 10:09
Вопросы из категории :
32x32