ios – 应用内购买适用于iPhone而不是iPad

前端之家收集整理的这篇文章主要介绍了ios – 应用内购买适用于iPhone而不是iPad前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在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失败的设备的配置问题.

猜你在找的iOS相关文章