Swift 应用内购买恢复按钮不可用';你不会引起任何行动吗?
我不熟悉应用内购买。我已将我的应用程序设置为允许在应用程序中使用多个非耗材。如果这是第一次购买,它的工作非常完美。如果我再次尝试单击“购买”按钮,它会显示“此应用程序内的内容已购买等”。单击“确定”后,它将不起任何作用。我注意到它只显示“OK”作为选项,而不是“Cancel”和“Okay”。在我的测试应用程序中,它显示了这两个方面,效果非常好! 让product1=“TestAd.com” @IBOUTLE弱var adView1:UIViewSwift 应用内购买恢复按钮不可用';你不会引起任何行动吗?,swift,xcode,in-app-purchase,Swift,Xcode,In App Purchase,我不熟悉应用内购买。我已将我的应用程序设置为允许在应用程序中使用多个非耗材。如果这是第一次购买,它的工作非常完美。如果我再次尝试单击“购买”按钮,它会显示“此应用程序内的内容已购买等”。单击“确定”后,它将不起任何作用。我注意到它只显示“OK”作为选项,而不是“Cancel”和“Okay”。在我的测试应用程序中,它显示了这两个方面,效果非常好! 让product1=“TestAd.com” @IBOUTLE弱var adView1:UIView func buyProduct1(product1
func buyProduct1(product1: SKProduct){
print("Sending the Payment Request to Apple 1");
let payment1 = SKPayment(product: product1)
SKPaymentQueue.default().add(payment1);
}
@IBAction func product1Btn(sender: AnyObject) {
buyProductID.text = "Product1"
print("About to fetch the product... 1")
// Can make payments
if (SKPaymentQueue.canMakePayments())
{
let productID1:NSSet = NSSet(object: self.product1);
let productsRequest1:SKProductsRequest = SKProductsRequest(productIdentifiers: productID1 as! Set<String>);
productsRequest1.delegate = self;
productsRequest1.start();
print("Fetching Products 1");
}else{
print("Can't make purchases 1");
}
}
func purchase1ViewDid(){
if (UserDefaults.standard.bool(forKey: "purchased1")){
adView1.isHidden = true
print("No ads for 1")
} else {
print("Yes ads 1")
}
}
func productsRequest (_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
//PRODUCT 1
let count1 : Int = response.products.count
if (count1>0) {
let validProduct1: SKProduct = response.products[0] as SKProduct
if (validProduct1.productIdentifier == self.product1) {
print(validProduct1.localizedTitle)
print(validProduct1.localizedDescription)
print(validProduct1.price)
buyProduct1(product1: validProduct1);
} else {
print(validProduct1.productIdentifier)
}
} else {
print("nothing 1")
}
`非消耗性采购只能购买一次,因此这是预期行为。显示此消息是因为您只能购买一次非消耗性项目,并且它仍然与帐户关联。它认为既然您已经购买了该物品,那么您只需要恢复它。作为旁注,出于测试目的,IAP必须使用真实设备进行测试,因此模拟器无法正确测试IAP 非消耗性采购只能购买一次,因此这是预期行为。显示此消息是因为您只能购买一次非消耗性项目,并且它仍然与帐户关联。它认为既然您已经购买了该物品,那么您只需要恢复它。作为旁注,出于测试目的,IAP必须使用真实设备进行测试,因此模拟器无法正确测试IAP
func request(_ request: SKRequest, didFailWithError error: Error) {
print("Error Fetching product information 1");
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions1: [SKPaymentTransaction]) {
print("Received Payment Transaction Response from Apple 1");
for transaction1:AnyObject in transactions1 {
if let trans:SKPaymentTransaction = transaction1 as? SKPaymentTransaction{
switch trans.transactionState {
case .purchased:
if buyProductID.text == "Product1" {
print("Product Purchased 1");
SKPaymentQueue.default().finishTransaction(transaction1 as! SKPaymentTransaction)
// Handle the purchase
UserDefaults.standard.set(true , forKey: "purchased1")
adView1.isHidden = true
}
break;
case .failed:
print("Purchased Failed 1");
SKPaymentQueue.default().finishTransaction(transaction1 as! SKPaymentTransaction)
break;
case .restored:
print("Already Purchased 1");
SKPaymentQueue.default().restoreCompletedTransactions()
// Handle the purchase
UserDefaults.standard.set(true , forKey: "purchased1")
adView1.isHidden = true
break;
default:
break;
}
}
}
}