我的应用程序包含一些应用程序内购买,无论何时打开应用程序,我的手机会一直要求我登录iTunes Store。我如何阻止这种情况发生?Xcode Project包含IAP后,iPhone不停止弹出“登录iTunes Store”
override func viewDidLoad() {
super.viewDidLoad()
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
// Do any additional setup after loading the view, typically from a nib.
// Set IAPS
if(SKPaymentQueue.canMakePayments()) {
print("In-App Purchases Enabled, Loading")
let productID:NSSet = NSSet(objects: "my bundle ;)")
let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>)
request.delegate = self
request.start()
} else {
print("Please enable In-App Purchases.")
}
showInStore()
}
override func viewDidDisappear(animated: Bool) {
SKPaymentQueue.defaultQueue().removeTransactionObserver(self)
}
@IBAction func btnRemoveAds(sender: UIButton) {
for product in list {
let prodID = product.productIdentifier
if(prodID == "my bundle") {
p = product
buyProduct()
// removeAds() 休息 }如果其他人(PRODID == “我的包”){
w = product
buyProduct()
break
}
}
}
func removeAds() {
self.view.willRemoveSubview(self.adView)
self.adView.hidden = true
}
@IBAction func RestorePurchases(sender: UIButton) {
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
}
var list = [SKProduct]()
var p = SKProduct()
var w = SKProduct()
func buyProduct() {
print("Buy " + p.productIdentifier)
let pay = SKPayment(product: p)
SKPaymentQueue.defaultQueue().addPayment(pay as SKPayment)
}
func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
print("Requesting Product")
let myProduct = response.products
for product in myProduct {
print("Product Added")
print(product.productIdentifier)
print(product.localizedTitle)
print(product.localizedDescription)
print(product.price)
list.append(product)
}
}
func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) {
print("Purchases Restored")
_ = [] // Swift 2 made me replace with a _ : orginal is let purchasedItemIDS[]
for transaction in queue.transactions {
let t: SKPaymentTransaction = transaction
let prodID = t.payment.productIdentifier as String
switch prodID {
case "my bundle ;)":
print("Removing Ads")
removeAds()
systemStatus.text = "Ads have been removed on this device! "
systemStatus.textColor = UIColor.greenColor()
default:
print("In-App Purchases Not Setup")
}
}
}
func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
print("Add Payment")
for transaction:AnyObject in transactions {
let trans = transaction as! SKPaymentTransaction
print(trans.error)
switch trans.transactionState {
case .Purchased:
print("Unlock In-App Purchases Here.")
print(p.productIdentifier)
let prodID = p.productIdentifier as String
switch prodID {
case "my bundle ;)":
print("Remove Ads")
removeAds()
systemStatus.text = "Ads have been removed on this device! "
systemStatus.textColor = UIColor.greenColor()
default:
print("In-App Purchases Not Setup")
}
queue.finishTransaction(trans)
break
case .Failed:
print("Purchase Error")
queue.finishTransaction(trans)
break
default:
print("Nothing")
break
}
}
}
func finishTransaction(trans:SKPaymentTransaction)
{
print("Transactions Completed.")
SKPaymentQueue.defaultQueue().finishTransaction(trans)
removeAds()
systemStatus.text = "Ads have been removed on this device! "
systemStatus.textColor = UIColor.greenColor()
}
func paymentQueue(queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction])
{
print("Transactions Removed")
}
看看http://stackoverflow.com/questions/4988663/skpaymentqueue-addtransactionobserver-asking-for-app-store-password-on-startup-a – Michael
已经这样做:( –
也许你应该发布你的你知道'finishTransaction'实际上被调用吗?它也可以抛出一个异常。你怎么解决这个问题? – Michael