ios - 无法接收任何用户登录的弹出窗口或提示
问题描述
我已经按照演练包括非消耗性应用内购买。不幸的是,在用户单击购买按钮后,什么都没有发生。我没有收到任何登录 iTunes 或接受付款的提示。我在这里缺少什么吗?
我已经尝试了多个演练,它们似乎都有类似的代码,我已经按照苹果网站的步骤进行操作,但是我不确定是否必须先提交完整的应用程序才能通过以下方式测试应用内购买一个沙箱。
IAPService.swift
import Foundation
import StoreKit
import UIKit
class IAPService: NSObject {
private override init() {}
static let shared = IAPService()
var products = [SKProduct]()
let paymentQueue = SKPaymentQueue.default()
func getProducts() {
let products: Set = [IAPProduct.nonConsumable.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("restore purchases")
paymentQueue.restoreCompletedTransactions()
}
}
extension IAPService: SKProductsRequestDelegate {
func productsRequest(_ request: SKProductsRequest, didReceive
response: SKProductsResponse) {
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.status(),
transaction.payment.productIdentifier)
switch transaction.transactionState {
case .purchasing: break
default: queue.finishTransaction(transaction)
}
}
}
}
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.Products.swift
import Foundation
enum IAPProduct: String {
case nonConsumable = "Quizly"
}
在我的 mainVC 中
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
IAPService.shared.getProducts()
print("IAP == \(IAPService.shared.products)") // Why is this an empty array?
}
@objc func pressToGetPremium(_ sender : UIButton) {
IAPService.shared.purchase(product: .nonConsumable)
print("IAP ===== \(IAPService.shared.products)")
}
当用户单击按钮时,我希望首先出现一个弹出窗口,使用户必须登录他们的苹果帐户,然后另一个弹出窗口会询问他们是否要接受非消耗性产品(1.99 美元)等。但我根本没有弹出窗口。
我从 didReceive 产品收到了这个......
response SKProductsResponse 0x00000002811cba10 baseNSObject@0 NSObject
isa Class 0x2811cba10 0x00000002811cba10 _internal SKProductsResponseInternal * 0x28139c0e0 0x000000028139c0e0 NSObject NSObject
_invalidIdentifiers __NSSingleObjectArrayI * 1 element 0x00000002811cb930 [0] __NSCFString * "Quizly" 0x000000028139c620 NSMutableString NSMutableString _products __NSArray0 * 0 elements 0x00000002811c0050 NSArray NSArray NSObject NSObject
isa Class __NSArray0 0x000001a25a605811
解决方案
根据我们的评论讨论 - didReceive products 方法产生的错误表明您的 bundleIdentifiers 与 appStore 上的不匹配。
推荐阅读
- cesium - openmaptiles 是否支持分发 3D 地形图瓦片?
- python - InvalidArgumentError:logits 和标签必须具有相同的第一维
- r - How can I solve non-finite location and/or size for viewport error?
- c++ - Is there a C-like syntax scripting language interpreter for C++?
- javascript - JAWS 使用 span 标签读取额外的空间,或者如果 span 标签有 aria 标签。如何使用 JAWS 修复这个额外的空间
- python - 如何覆盖 BigQuery 中的某些日期分区?
- javascript - 如何从逻辑上验证 firebase 'child_added' 数据是否存在并提供处理逻辑?
- netsuite - 如何修复:尝试创建销售记录时出现“TRANS_AMTS_UNBALNCD”
- amp-html - 电子邮件 AMP Gmail
- javascript - 当我转到 Source 视图时,如何跳转到 CKEditor 4 中的当前位置?