我在iOS上的应用内购买有问题.我在游戏中有5个应用内购买,所有这些都在iPhone 6(iOS 8.3)上进行测试时正常工作.当我在iPad Air 2(iOS 8.2)上进行测试时,所有IAP都会立即失败.有没有人遇到这个问题?有没有一些特定于iPad的代码,我必须添加?
编辑:奇怪的是,将iPad更新到iOS 8.3修复了问题.关于为什么发生这个问题的任何想法?我应该将应用程序更改为仅支持iOS 8.3及更高版本?
要测试应用程序,我使用的是TestFlight,相同的网络连接和相同的Apple ID.
我在应用内购买中使用的代码如下:
func inApp() { if (SKPaymentQueue.canMakePayments()) { var productID:NSSet = NSSet(object: product_id); var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>); productsRequest.delegate = self; productsRequest.start(); }else{ displayAlert() } } func buyProduct(product: SKProduct){ var payment = SKPayment(product: product) SKPaymentQueue.defaultQueue().addPayment(payment); } func productsRequest (request: SKProductsRequest,didReceiveResponse response: SKProductsResponse) { var count : Int = response.products.count if (count>0) { var validProducts = response.products var validProduct: SKProduct = response.products[0] as! SKProduct if (validProduct.productIdentifier == product_id) { println(validProduct.localizedTitle) println(validProduct.localizedDescription) println(validProduct.price) buyProduct(validProduct); } else { println(validProduct.productIdentifier) } } else { displayAlert() } } func request(request: SKRequest!,didFailWithError error: NSError!) { self.displayAlert() } func paymentQueue(queue: SKPaymentQueue!,updatedTransactions transactions: [AnyObject]!) { for transaction:AnyObject in transactions { if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{ switch trans.transactionState { case .Purchased: SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction) if product_id == "com.shv.FrenzyTenLives" { defaults.setInteger(10,forKey: "totalLives") } else if product_id == "com.shv.FrenzyFiveLives" { defaults.setInteger(5,forKey: "totalLives") } else if product_id == "com.shv.FrenzyInfiniteLives" { defaults.setBool(true,forKey: "infiniteLives") } else if product_id == "com.shv.FrenzyShield" { defaults.setInteger(5,forKey: "shieldValue") } else if product_id == "com.shv.FrenzyRemoveAds" { defaults.setBool(true,forKey: "adsRemoved") adBanner.hidden = true } break; case .Failed: SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction) self.displayAlert() break; case .Restored: SKPaymentQueue.defaultQueue().restoreCompletedTransactions() if product_id == "com.shv.FrenzyTenLives" { defaults.setInteger(10,forKey: "infiniteLives") } else if product_id == "com.shv.FrenzyRemoveAds" { defaults.setBool(true,forKey: "adsRemoved") adBanner.hidden = true } break; default: break; } } } }
解决方法
没有“立即失败”的定义,我最好的猜测是,您没有登录到iPad上的有效的沙盒测试帐户,并且在更新iOS版本的同时,这是为什么它工作在8.3.
让IAP测试工作的最简单方法是注销iTunes:
Settings -> App and iTunes Store -> Tap apple ID and log out.
一旦您注销,尝试创建一个IAP,您将被提示登录 – 一旦您输入有效的测试帐户凭据,IAP将下载 – 如果没有,请在此发布您的日志文件.请注意,您可以在iTunes Connect中查找或创建测试帐户.
IAP是一个非常复杂的主题,具有许多故障点 – 知道您的IAP在一个设备上工作,但不是另一个指向特定于IAP失败的设备的配置问题.