首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift:推广产品(使用RevenueCat) -缓存defermentBlock

Swift:推广产品(使用RevenueCat) -缓存defermentBlock
EN

Stack Overflow用户
提问于 2021-06-05 16:18:45
回答 1查看 627关注 0票数 5

目前,我正试图在RevenueCat的帮助下将促销产品纳入我的应用程序。不幸的是,它不起作用。(我使用的是SwiftUI 1.0,AppDelegate也是如此。)

到目前为止我所做的:

我在AppDelegate中实现了以下函数,如下所述(https://docs.revenuecat.com/discuss/5cff570754c3420045b379f3):

代码语言:javascript
复制
  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,如下所示:

代码语言:javascript
复制
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中的购买按钮时,它会自动打开。

另一个问题是我不能测试这个功能。苹果(购买)推荐的方式不知何故行不通。

事先非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-14 23:23:44

请确保在调用配置后而不是之前设置Purchases.shared.delegate = self (有人发出了这里问题)。

然后实现委托函数,如:

代码语言:javascript
复制
    defermentBlock { (transaction, info, error, cancelled) in
        if let purchaserInfo = info {
            if error == nil && !userCancelled{
                try? CoreDataManagerNew.shared.updateUserInformation()
            }
        }
    }   

请注意,您不必在块内调用purchaseProduct。调用该块将等同于调用purchaseProduct,并且它将打开购买对话框。

通过缓存defermentBlock,我们意味着您可以将延迟块保存为对象的属性,然后在应用程序准备购买时调用它。所以你可以做这样的事:

代码语言:javascript
复制
    var maybeDeferredPurchase: RCDeferredPromotionalPurchaseBlock? = nil
    
    func purchases(_ purchases: Purchases, shouldPurchasePromoProduct product: SKProduct, defermentBlock makeDeferredPurchase: @escaping RCDeferredPromotionalPurchaseBlock) {
        maybeDeferredPurchase = makeDeferredPurchase
    }

然后,每当您想要显示购买弹出时(例如,当屏幕加载时),请执行以下操作:

代码语言:javascript
复制
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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67851573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档