gpt4 book ai didi

Swift:促销产品(使用 RevenueCat) - 缓存 defermentBlock

转载 作者:行者123 更新时间:2023-12-04 13:08:47 44 4
gpt4 key购买 nike

目前,我正尝试在 RevenueCat 的帮助下将促销产品包含在我的应用程序中。不幸的是它不起作用。
(我使用的是 SwiftUI 1.0,所以仍然使用 AppDelegate。)
到目前为止我做了什么:
我已经在 AppDelegate 中实现了以下功能,如此处所述( https://docs.revenuecat.com/discuss/5cff570754c3420045b379f3 ):

  func purchases(_ purchases: Purchases, shouldPurchasePromoProduct product: SKProduct, defermentBlock makeDeferredPurchase: @escaping RCDeferredPromotionalPurchaseBlock){
let defermentBlock = makeDeferredPurchase

}
问题:
我认为问题是我在错误的地方运行了 defermentBlock。正如这里所说的( https://sdk.revenuecat.com/ios/Protocols/RCPurchasesDelegate.html#/c:objc(pl)RCPurchasesDelegate(im)purchases:shouldPurchasePromoProduct:defermentBlock: ),它应该在应用程序处于正确状态时调用。
目前我直接在函数中调用 defermentBlock ,如下所示:
func purchases(_ purchases: Purchases, shouldPurchasePromoProduct product: SKProduct, defermentBlock makeDeferredPurchase: @escaping RCDeferredPromotionalPurchaseBlock){
let defermentBlock = makeDeferredPurchase

// Should buy the product
defermentBlock { (transaction, info, error, cancelled) in
if let purchaserInfo = info {
Purchases.shared.purchaseProduct(product) { (transaction, purchaserInfo, error, userCancelled) in //this function works for products which are directly bought in the app
if error == nil && !userCancelled{
try? CoreDataManagerNew.shared.updateUserInformation()
}
}
}
}

}
现在我有以下问题:
  • 如何缓存 defermentBlock?
  • 应用程序何时处于正确状态?当我按下 AppStore 中的购买按钮时,它会自动打开。

  • 另一个问题是我无法测试功能。 Apple ( https://developer.apple.com/documentation/storekit/in-app_purchase/testing_promoted_in-app_purchases ) 建议的方式不知何故不起作用。
    提前谢谢了!

    最佳答案

    确保您设置的是设置 Purchases.shared.delegate = self在调用 configure 而不是之前(有人遇到这个问题 here )。
    然后实现委托(delegate)功能,如:

        defermentBlock { (transaction, info, error, cancelled) in
    if let purchaserInfo = info {
    if error == nil && !userCancelled{
    try? CoreDataManagerNew.shared.updateUserInformation()
    }
    }
    }
    请注意,您不必拨打 purchaseProduct块内。调用块将等同于调用 purchaseProduct它将打开购买对话框。
    缓存 defermentBlock 意味着您可以将延迟块保存为对象的属性,然后在您的应用准备进行购买时调用它。所以你可以这样做:
        var maybeDeferredPurchase: RCDeferredPromotionalPurchaseBlock? = nil

    func purchases(_ purchases: Purchases, shouldPurchasePromoProduct product: SKProduct, defermentBlock makeDeferredPurchase: @escaping RCDeferredPromotionalPurchaseBlock) {
    maybeDeferredPurchase = makeDeferredPurchase
    }
    然后,每当您想显示购买弹出窗口(例如加载屏幕时),请执行以下操作:
    if let defermentBlock = self.maybeDeferredPurchase {
    defermentBlock { (transaction, info, error, cancelled) in
    if let purchaserInfo = info {
    handlePurchaserInfo()
    }
    }
    }
    要测试它是否有效,您可以打开类似 itms-services://?action=purchaseIntent&bundleId=<YOUR_BUNDLE_ID>&productIdentifier=<YOUR_SKPRODUCT_ID> 的链接。在您的设备中。例如,在我的测试应用程序中,它是 itms-services://?action=purchaseIntent&bundleId=com.revenuecat.sampleapp&productIdentifier=com.revenuecat.lifetime.199.99 .

    关于Swift:促销产品(使用 RevenueCat) - 缓存 defermentBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67851573/

    44 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com