Ste*_*ein 18 storekit in-app-purchase ios swift
我在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: "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.FrenzyRemoveAds" {
defaults.setBool(true, forKey: "adsRemoved")
adBanner.hidden = true
}
break;
default:
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果没有“立即失败”的定义,我最好的猜测是您没有在 iPad 上登录到有效的沙箱测试帐户,并且在更新 iOS 版本的过程中,这个问题得到了协调,这就是它在 8.3 上运行的原因。
让 IAP 测试发挥作用的最简单方法是注销 iTunes:
Settings -> App and iTunes Store -> Tap apple ID and log out.
Run Code Online (Sandbox Code Playgroud)
注销后,尝试创建 IAP,系统将提示您登录 - 输入有效的测试帐户凭据后,IAP 将下载 - 如果没有,请在此处发布您的日志文件。请注意,您可以在 iTunes Connect 中查找或创建测试帐户。
IAP 是一个极其复杂的主题,存在许多故障点 - 知道您的 IAP 在一个设备上工作但在另一个设备上不工作,则表明 IAP 发生故障的设备特有配置问题。
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |