作者:直拍之横打 | 来源:互联网 | 2023-01-16 18:40
我正在尝试实现这种新paymentQueue(_:shouldAddStorePayment:for:)
方法,以便我的应用程序可以直接从App Store处理IAP.
我正在使用itms-services://
网址来测试它,就像它在这里说的那样.
问题是,我SKPaymentTransactionObserver
是一个特定的视图控制器,如果在打开itms-services://
链接时它不可见,则不会调用委托方法.
我该怎么办?我想我必须检测用户是否来自App Store推送正确的视图控制器,但我不知道如何.我现在能想到的唯一另一个选择就是让App Delegate成为一个SKPaymentTransactionObserver
,但这看起来真的很麻烦,当我尝试它时我无法让它工作.还有其他方法吗?
1> Jad..:
这是我所做的一个可以帮助你实现你想要的类,只需复制下面的代码并将其粘贴到一个新文件中,然后你就可以简单地访问StoreManager.shared类到你想要访问的任何方法/变量.
1-要初始化此类,只需从didFinishLaunchingWithOptions
StoreManager.shared.Begin()调用,然后添加付款观察者.
import Foundation
import StoreKit
class StoreManager: NSObject{
/**
Initialize StoreManager and load subscriptions SKProducts from Store
*/
static let shared = StoreManager()
func Begin() {
print("StoreManager initialized"))
}
override init() {
super.init()
// Add pyament observer to payment qu
SKPaymentQueue.default().add(self)
}
func requestProductWithID(identifers:Set){
if SKPaymentQueue.canMakePayments() {
let request = SKProductsRequest(productIdentifiers:
identifers)
request.delegate = self
request.start()
} else {
print("ERROR: Store Not Available")
}
}
func buyProduct(product: SKProduct) {
print("Buying \(product.productIdentifier)...")
let payment = SKPayment(product: product)
SKPaymentQueue.default().add(payment)
}
func restorePurchases() {
SKPaymentQueue.default().restoreCompletedTransactions()
}
}
// MARK:
// MARK: SKProductsRequestDelegate
//The delegate receives the product information that the request was interested in.
extension StoreManager:SKProductsRequestDelegate{
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
var products = response.products as [SKProduct]
var buys = [SKProduct]()
if (products.count > 0) {
for i in 0 .. Bool {
return true
//To hold
//return false
//And then to continue
//SKPaymentQueue.default().add(savedPayment)
}
}