ios - Swift IOS 13,IAP - “无法连接到 Itunes Connect”
问题描述
我正在使用 IOS 13.5 并且在实施 IAP 时遇到了一些问题。我在构建以前的应用程序时使用了完全相同的代码,当我在与现在相同的物理设备上测试运行以前的应用程序时,付款工作正常。
我检查了互联网连接很好,证书看起来不错,Itunes Connect 中的 IAP 是“准备提交”,应用程序启用了 IAP,我已经制作了几个沙盒测试器,结果相同。我清理构建并重新启动计算机和设备,但它总是说 Code=2“无法连接到 Itunes Connect”
我什至尝试将构建上传到 Itunes connect 以查看它是否会有所作为,但没有。我显然遗漏了一些东西,并会感谢有关此问题的任何帮助。
呼吁开始购买:
IAPService.shared.purchase(product: .fullAccess)
IAP服务:
class IAPService: NSObject {
private override init() {}
static let shared = IAPService()
var products = [SKProduct]()
let paymentQueue = SKPaymentQueue.default()
func getProducts() {
let products: Set = [IAPProduct.fullAccess.rawValue]
let request = SKProductsRequest(productIdentifiers: products)
request.delegate = self
request.start()
paymentQueue.add(self)
}
func purchase(product: IAPProduct){
guard let productToPurchase = products.filter({ $0.productIdentifier == product.rawValue}).first else { return }
let payment = SKPayment(product: productToPurchase)
paymentQueue.add(payment)
}
func restorePurchases(){
print("restoring purchases")
GlobalVariables.hasFullAccess = false
GlobalVariables.partialAccessArrayKeys.removeAll()
paymentQueue.restoreCompletedTransactions()
CheckPurchase.shared.checkUserPurchase()
}}
extension IAPService: SKProductsRequestDelegate {
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
self.products = response.products
for product in response.products {
print(product.localizedTitle)
}
}
}
extension IAPService: SKPaymentTransactionObserver {
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
print(transaction.transactionState)
print(transaction.transactionState.status(), transaction.payment.productIdentifier)
print(transaction.debugDescription)
if transaction.error != nil {
print(transaction.error)
}
}
}
}
extension SKPaymentTransactionState {
func status() -> String {
switch self {
case .deferred: return "deferred"
case .failed: return "failed"
case .purchased: return "purchased"
case .purchasing: return "purchasing"
case .restored: return "restored"
}
}
}
IAP产品:
enum IAPProduct : String {
case fullAccess = "se.marcusthuvesen.Torst.FullAccess"
}
应用代表:
class AppDelegate: UIResponder, UIApplicationDelegate, SKPaymentTransactionObserver {
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UIApplication.shared.isIdleTimerDisabled = true
FirebaseApp.configure()
IAPService.shared.getProducts()
SKPaymentQueue.default().add(self)
//Load game texts from FireBase
return true
}}
解决方案
首先,您需要在 App Delegate didFinishLaunchingWithOptions 回调中将自己添加为 paymentQueue 的观察者。
您在哪里看到错误消息?您应该首先看到 SKProductsRequestDelegate 回调。
推荐阅读
- angular - Bootstrap:删除确认模式不起作用
- python-3.x - 如何重用从AWS分配给s3返回对象的python变量
- database - 如何在数据库中创建新记录时触发 WhatsApp 机器人?数据库可以是任何取决于业务的东西
- git - 如何在不丢失后来历史的情况下将一个分支覆盖到另一个分支?
- node.js - npm 错误!代码 E404 npm 错误!404 未找到 - 获取 https://registry.npmjs.org/easier-discordjs - 未找到
- snowflake-cloud-data-platform - 带有时间戳模式的雪花的 JdbcSourceConnector
- c# - 如何在单个类中获取 API 调用的结果?
- r - AdehabitatHR::kernelUD 错误,给予不合格数据的地理 CRS
- azure-devops - Azure Pipelines 任务 - 如何查询可用版本?
- ios - 为 arm64 iOS 模拟器构建 openssl