在xcode 6和swift中工作,我正在尝试通过应用内购买来移除广告。购买似乎有效,但恢复不是那么多。我有点工作,但它没有更新控制器。
在每个viewcontroller中,我都有以下内容来展示广告并检查是否已购买以隐藏:
我有一个横幅的@IBOutlet:
@IBOutlet weak var topAdBanner: ADBannerView!
以及以下代码:
override func viewDidLoad() {
super.viewDidLoad()
if NSUserDefaults.standardUserDefaults().boolForKey("purchased") ==
true || purchased == true {
self.topAdBanner.hidden = true
} else {
var topAdBanner: ADBannerView
self.topAdBanner.hidden = true
self.topAdBanner.delegate = self
}
然后在我的menuviewcontroler上,这是我的代码,这就是我的问题所在。该应用程序已本地化为几种语言,因此额外的本地化代码:
import UIKit
import StoreKit
class MenuViewController: UIViewController, SKProductsRequestDelegate,
SKPaymentTransactionObserver {
var product_id: NSString?;
@IBOutlet weak var descriptionText: UILabel!
@IBOutlet weak var purchaseButton: UIButton!
@IBOutlet weak var purchaseLabel: UILabel!
@IBOutlet weak var restoreButton: UIButton!
@IBOutlet weak var restoreLabel: UILabel!
@IBOutlet weak var cancelButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
product_id = "app.removeads";
self.descriptionText.text =
NSLocalizedString("REMOVE_ADS_DESCRIPTION", comment:
"REMOVE_ADS_DESCRIPTION")
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
}
func buyNonConsumable(){
if (SKPaymentQueue.canMakePayments())
{
var productID:NSSet = NSSet(object: self.product_id!);
var productsRequest:SKProductsRequest = SKProductsRequest
(productIdentifiers: productID as Set<NSObject>);
productsRequest.delegate = self;
productsRequest.start();
self.descriptionText.text = NSLocalizedString(
"FIRST_PROCESSING", comment: "first_processing")
}else{
self.descriptionText.text = NSLocalizedString("PAYMENT_DISABELD",
comment: "PAYMENT_DISABELD")
}
}
// Helper Methods
func buyProduct(product: SKProduct){
self.descriptionText.text = NSLocalizedString("SECOND_PROCESSING",
comment: "second_processing")
var payment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment)
}
// Delegate Methods for IAP
func productsRequest (request: SKProductsRequest, didReceiveResponse
response: SKProductsResponse) {
self.descriptionText.text = NSLocalizedString("THIRD_PROCESSING",
comment: "third_processing")
var count : Int = response.products.count
if (count>0) {
var validProducts = response.products
var validProduct: SKProduct = response.products[0] as! SKProduct
if (validProduct.productIdentifier == self.product_id) {
println(validProduct.localizedTitle)
println(validProduct.localizedDescription)
println(validProduct.price)
buyProduct(validProduct);
} else {
println(validProduct.productIdentifier + "Fehler")
}
} else {
}
}
@IBAction func purchaseButton(sender: AnyObject) {
buyNonConsumable()
}
@IBAction func restoreButton(sender: AnyObject) {
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
self.descriptionText.text = NSLocalizedString("FIRST_PROCESSING",
comment: "first_processing")
}
func paymentQueueRestoreCompletedTransactionsFinished(queue:
SKPaymentQueue!) {
println("Transactions Being Restored")
var purchasedItemIDS = []
for transaction:SKPaymentTransaction in queue.transactions as!
[SKPaymentTransaction] {
if transaction.payment.productIdentifier == self.product_id
{
println("Product Already Purchased")
// Unlock Feature
self.descriptionText.text =
NSLocalizedString("UNLOCKED_LABEL", comment: "unlocked")
purchased = true
NSUserDefaults.standardUserDefaults().setBool(true, forKey:
"purchased")
NSUserDefaults.standardUserDefaults().synchronize()
SKPaymentQueue.defaultQueue().finishTransaction(
transaction)
}
}
var alert = UIAlertView(title: "Thank You", message: "Your purchase
was restored. Go back to main screen", delegate: nil,
cancelButtonTitle: "OK")
alert.show()
}
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions
transactions: [AnyObject]!) {
for transaction in transactions as! [SKPaymentTransaction] {
switch transaction.transactionState {
case SKPaymentTransactionState.Purchased:
if (transaction.downloads != nil) {
SKPaymentQueue.defaultQueue().startDownloads(
transaction.downloads)
} else {
// Unlock feature or content here before
// finishing transaction
self.descriptionText.text =
NSLocalizedString("UNLOCKED_LABEL", comment:
"unlocked")
purchased = true
NSUserDefaults.standardUserDefaults().setBool(true,
forKey: "purchased")
NSUserDefaults.standardUserDefaults().synchronize()
SKPaymentQueue.defaultQueue().finishTransaction(
transaction)
}
case SKPaymentTransactionState.Restored:
println("Restored")
self.descriptionText.text =
NSLocalizedString("RESTORED_LABEL", comment:
"restored")
purchased = true
NSUserDefaults.standardUserDefaults().setBool(true,
forKey:"purchased")
NSUserDefaults.standardUserDefaults().synchronize()
break
case SKPaymentTransactionState.Failed:
self.descriptionText.text = NSLocalizedString(
"ERROR_HEADER",comment: "error")
SKPaymentQueue.defaultQueue().finishTransaction(
transaction)
default:
break
}
}
}
}
购买该应用程序。已经过测试,它会移除广告。 然而,恢复找到产品并说成功恢复,但添加不会消失。
我似乎遇到的另一个问题是,当我加载具有购买和恢复选项的页面时,它会在页面加载时立即询问您的itunes应用商店登录而不按任何内容。我不确定它是否与我的代码有关。
我花了一整天时间试图解决这个问题,并通过论坛和帖子查看,但我似乎无法解决它。任何帮助将不胜感激。