gpt4 book ai didi

ios - 通过购买和恢复删除广告 - Swift

转载 作者:搜寻专家 更新时间:2023-11-01 05:39:46 25 4
gpt4 key购买 nike

在 xcode 6 和 swift 中工作,我正在尝试通过应用内购买来移除广告。购买似乎有效,但恢复效果不佳。我有点让它工作,但它不会更新 Controller 。

在每个 View Controller 中,我都有以下内容来显示广告并检查是否已购买以隐藏:

我有一个用于横幅的@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 应用程序商店,而无需按任何按钮。我不确定它是否与我的代码有关。

我花了一整天的时间试图解决这个问题并浏览论坛和帖子,但我似乎无法解决它。任何帮助将不胜感激。

最佳答案

关于你的最后一个问题 - 是的,询问 iTunes 密码与你的代码有关,因为当你 addTransactionObserver 在队列中有交易时,密码对话框可能会出现。您在 viewDidLoad 中第一次执行此操作(尽管不要多次执行)。最好仅在您执行与购买相关的操作(实际购买或恢复购买)时添加观察者。

Controller 上的

viewDidLoad 仅在将它们添加到 View 层次结构时执行。因此,如果它们在您的购买/恢复 Controller 之前被添加到 View 层次结构中,那么您的检查将不会执行。将您的检查移动到 viewDidAppear,或者通过 NSNotificationCenter 做一些通知来刷新 UI 状态。

关于ios - 通过购买和恢复删除广告 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32028865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com