可消耗的应用内购买已经购买。

4

我已经在我的应用程序中添加了可消耗的应用内购买。我可以购买它,但是当我尝试再次购买时,它会显示我已经购买过了,所以它会重新下载。类型明确是可消耗的。请问我做错了什么?谢谢。

func purchasePoints(sender:AnyObject) {
    //Purchase
    buyConsumable()


}

func buyConsumable(){
    print("About to fetch the products");
    // We check that we are allow to make the purchase.
    if (SKPaymentQueue.canMakePayments())
    {
        var productID:NSSet = NSSet(object: "com.companyname.appname.coins");
        var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>);
        productsRequest.delegate = self;
        productsRequest.start();
        print("Fething Products");
    }else{
        print("can not make purchases");
    }
}


func productsRequest (request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
    print("got the request from Apple")
    var count : Int = response.products.count
    if (count>0) {
        var validProducts = response.products
        var validProduct: SKProduct = response.products[0] as SKProduct
        if (validProduct.productIdentifier == "com.companyname.appname.coins") {
            print(validProduct.localizedTitle)
            print(validProduct.localizedDescription)
            print(validProduct.price)
            buyProduct(validProduct);
        } else {
            print(validProduct.productIdentifier)
        }
    } else {
        print("nothing")
    }
}

func buyProduct(product: SKProduct){
    print("Sending the Payment Request to Apple");
    var payment = SKPayment(product: product)
    SKPaymentQueue.defaultQueue().addPayment(payment);
}


func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [SKPaymentTransaction]) {
    print("Received Payment Transaction Response from Apple");

    for transaction:AnyObject in transactions {

        if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
            switch trans.transactionState {
            case .Purchased:
                print("Product Purchased");
                SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
                break;
            case .Failed:
                print("Purchased Failed");
                SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
                break;
                // case .Restored:
                //[self restoreTransaction:transaction];
            default:
                break;
            }
        }
    }
}

在你的 updatedTransactions 方法中,尝试使用传递给函数的 SKPaymentQueue 而不是 SKPaymentQueue.defaultQueue(),并确保调用了 finishTransaction - Paulw11
我应该只删除'.defaultQueue()'部分还是需要用其他内容替换它? - Tom Coomer
只需 queue.finishTransaction(... - Paulw11
我需要在iTunesConnect中创建一个新的应用内购买项目,还是可以使用现有的进行重试? - Tom Coomer
是的,我也这么想,但我已经检查了很多次,在iTunesConnect中确实写着可消耗。 - Tom Coomer
显示剩余3条评论
1个回答

3

您是否在控制台日志中看到了这些消息:

print("Received Payment Transaction Response from Apple");

并且

print("Product Purchased");

或者

print("Purchased Failed");

如果没有,那么似乎您没有添加

SKPaymentQueue.defaultQueue().addTransactionObserver(self)

在将付款加入队列之前,请尝试将以下代码添加到您的 buyConsumable 方法中。

根据https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/DeliverProduct.html,使用现有交易进行尝试,但请确保它是可消耗的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接