簡體   English   中英

應用內購買在 TestFlight 中不起作用

[英]In-App Purchase not working in TestFlight

我的應用程序被 Apple 拒絕,因為他們無法讓我的 IAP 工作。 我只是通過 Xcode 進行測試,一切似乎都運行良好(我不知道通過 TestFlight 進行測試)。 從那以后,我一直在通過 TestFlight 進行測試,而 IAP 對此不起作用。

任何人都可以就我哪里出錯提供任何建議嗎? 我在簽名和功能中添加了“應用內購買”。 我已經在 TestFlight 中測試了 StoreKit Configuration 設置為“None”和“Configuration.storekit”。

我在 App Store Connect 上的 IAP 狀態為“准備提交”。

import StoreKit

class Menu: SKScene, SKProductsRequestDelegate, SKPaymentTransactionObserver {
    
    enum Product: String, CaseIterable {
        case premium = "[my IAP identifier]"
    }
    
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        if let oProduct = response.products.first {
            print("Product is available")
            self.purchase(aproduct: oProduct)
        } else {
            print("Product is not available")
        }
    }
    
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            switch transaction.transactionState {
            case .purchased:
                SKPaymentQueue.default().finishTransaction(transaction)
                print("Purchased")
                purchasedPremium = true
                
                userDefaults.set(true, forKey: "purchasedPremium")
                
                var transition:SKTransition = SKTransition.fade(withDuration: 1)
                var scene:SKScene = Menu(size: self.size)
                self.view?.presentScene(scene, transition: transition)
                
            case .failed:
                SKPaymentQueue.default().finishTransaction(transaction)
                print("Failed")
            case .restored:
                print("Restored")
            case .deferred:
                print("Deferred")
            default:
                break
            }
        }
    }
    
    func purchase(aproduct: SKProduct) {
        let payment = SKPayment(product: aproduct)
        SKPaymentQueue.default().add(self)
        SKPaymentQueue.default().add(payment)
    }

我通過運行此方法觸發購買過程:

func buyPremium() {
        if SKPaymentQueue.canMakePayments() {
            let set : Set<String> = [Product.premium.rawValue]
            let productRequest = SKProductsRequest(productIdentifiers: set)
            productRequest.delegate = self
            productRequest.start()
        }
    }

您為產品請求和購買實施的流程不正確。

您不應在用戶發起購買時請求產品,也不應在檢索到SKProduct時發起購買。

您應該采用以下內容:

  • didFinishLaunching中實例化一個“采購經理”對象
  • “采購經理”應該:
    • 將自己設置為支付隊列觀察者。
    • 檢查canMakePayments
    • 如果true ,則請求您的產品
    • 如果您成功檢索您的產品,請存儲SKProduct並向您的應用程序視圖指示 IAP 可用
  • 然后,您的視圖可以顯示/啟用購買 UI(按鈕等)
    • 當用戶點擊購買按鈕時,您會讓您的“采購經理”提交SKPayment
    • 購買完成后,保持購買狀態並刷新視圖以解鎖購買的內容

請務必在啟動時立即建立隊列觀察器,因為隊列中可能有待處理的購買供您的應用處理。

檢查產品可用性和canMakePayments首先通過確保不會向他們顯示他們無法使用的購買選項來改善用戶體驗

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM