Ios 不返回swift中应用内购买的结果
大家好, 上周我在应用程序内购买时遇到问题,无法解决,以前从未得到过( 当前我使用swift和xcode 6.1) 我的问题是:(在sanbox模式下测试,但仍然没有上传appstore的任何版本)Ios 不返回swift中应用内购买的结果,ios,xcode,swift,in-app-purchase,Ios,Xcode,Swift,In App Purchase,大家好, 上周我在应用程序内购买时遇到问题,无法解决,以前从未得到过( 当前我使用swift和xcode 6.1) 我的问题是:(在sanbox模式下测试,但仍然没有上传appstore的任何版本) 首次购买未返回状态。已购买(成功 购买)(但当第二次击中时返回。恢复(已恢复) (已购买) 多次退货失败(无法连接iTunes) 存储但仍购买-->可能是sabox模式?) 这是我的代码: func fetchAvailableProducts() { let productID:NS
- 首次购买未返回状态。已购买(成功 购买)(但当第二次击中时返回。恢复(已恢复) (已购买)
- 多次退货失败(无法连接iTunes) 存储但仍购买-->可能是sabox模式?)
func fetchAvailableProducts() {
let productID:NSSet = NSSet(object: self.produto_value);
let productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID);
productsRequest.delegate = self;
productsRequest.start();
}
func productsRequest (request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
var count : Int = response.products.count
if (count>0) {
var validProducts = response.products
validProduct = response.products[0] as SKProduct
if (validProduct.productIdentifier == self.produto_value) {
println(validProduct.localizedTitle)
println(validProduct.localizedDescription)
println(validProduct.price)
purchaseMyProduct()
} else {
println(validProduct.productIdentifier)
}
} else {
println("nothing")
}
}
func canMakePurchases() -> Bool
{
return SKPaymentQueue.canMakePayments()
}
func purchaseMyProduct() {
if (self.canMakePurchases() && validProduct != nil) {
println("Purchases are allowed ...")
var payment: SKPayment = SKPayment(product: validProduct)
var defaultQueue: SKPaymentQueue = SKPaymentQueue ()
defaultQueue.addTransactionObserver(self)
defaultQueue.addPayment(payment)
} else {
var alert = UIAlertController(title: "MyApp", message:stringLocate.getString("PURCHASE_FAILED"), preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
blackScreenTopConstraint.constant = 3000
}
}
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
for transaction:AnyObject in transactions {
if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
switch trans.transactionState {
case .Restored:
SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction)
isPro = true
blackScreenTopConstraint.constant = 3000
updateMyLayout()
break;
case .Purchased:
SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction)
isPro = true
blackScreenTopConstraint.constant = 3000
updateMyLayout()
break;
case .Deferred:
var alert = UIAlertController(title: "MyApp", message:stringLocate.getString("PURCHASE_FAILED"), preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
blackScreenTopConstraint.constant = 3000
break
case .Failed:
var alert = UIAlertController(title: "MyApp", message:stringLocate.getString("PURCHASE_FAILED"), preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
blackScreenTopConstraint.constant = 3000
break;
default:
break;
}
}
}
}
有人有问题吗,帮我解决,
非常感谢 有人收到我的发行版吗,我在appstore上有发行版,但它仍然存在,当用户点击“购买”时,显示什么也没有,但当再次点击时,它返回购买P>恢复IAPP购买考虑这些要点。 1.非耗材必须实现恢复功能。 2.您需要为SKPaymentQueue添加委托函数
func paymentQueueRestoreCompletedTransactionsFinished(queue:SKPaymentQueue!)
{
for transaction:AnyObject in queue.transactions
{
let trans : SKPaymentTransaction = transaction as SKPaymentTransaction
var identifier : NSString = trans.payment.productIdentifier
// println(identifier)
}
您是否在模拟器中进行测试…??感谢Anil,我正在真实设备上进行测试。当您在应用程序中尝试第一条消息“无法连接到Applestore或itunes”时,这是沙盒模式的常见问题。如果您重试,则会出现“无法连接到itunes”的成功消息和并行消息“。我也这么认为,但我的问题集中在它不是返回成功状态,而是仍然成功,因为第二次点击购买它返回“恢复”状态意味着已经购买。你的英语对我来说太好了。我听不懂你在说什么。如果您购买了应用程序内的内容,则应将其还原,而不是再次购买。一旦你买了任何东西,你应该解锁或做任何想做的事。我用MKStoreKit解决问题,也许是因为我用swift,不知道,谢谢你的anwser Omer。这不是swift的问题。我正在为inApps使用Swift。不管怎样,你解决了这件事对你有好处。