首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用RevenueCat购买易耗品?

如何使用RevenueCat购买易耗品?
EN

Stack Overflow用户
提问于 2020-10-16 21:54:54
回答 1查看 537关注 0票数 0

我在购买消耗品的逻辑上有困难。基本上,我不确定如何处理此函数:

代码语言:javascript
复制
private var item: Purchases.Package? {
    Items.shared.item
}
代码语言:javascript
复制
Purchases.shared.products(["com.item.id"]) { products in
    guard let item = products.first else { return }
    Purchases.shared.purchaseProduct(item) { transaction, purchaserInfo, error, cancelled in
    // enable some stuff in the app
    }
}
代码语言:javascript
复制
public class Items: ObservableObject {
    public static let shared = Items()
    
    @Published public var item: Purchases.Package?
    
    init() {
        Purchases.shared.products(["com.item.id"]) { products in
            self.item = products.first
        }
    }
}

如果我尝试像上面那样初始化,它会报告它是一个SKProduct?,并且不能被赋值给Purchases.Package?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-17 00:34:21

看起来你正在获取一个苹果SKProduct,并试图将它分配给一个RevenueCat Package

您可以使用SKProduct直接调用.purchase()方法。

代码语言:javascript
复制
// when your paywall is displayed (or earlier to preload)
var consumableProduct : SKProduct?
Purchases.shared.products(["com.item.id"]) { (products) in
    consumableProduct = products.first
}

// when the user taps the 'Buy' button
guard let product = consumableProduct else {
    return print("Error: No product exists")
}
Purchases.shared.purchaseProduct(product) { (transaction, purchaserInfo, error, userCancelled) in
    // handle purchase
}

推荐的方法

推荐使用RevenueCat产品/包,因为你不需要在你的应用程序中硬编码特定的产品ID(例如"com.item.id"),并且你可以远程更新。

代码语言:javascript
复制
// Offerings are automatically pre-loaded by RevenueCat so
// this should read very quickly from cache
var offering : Purchases.Offering?
Purchases.shared.offerings { (offerings, error) in
    // Add any error handling here
    
    offering = offerings?.current
}

// when the user taps the 'Buy' button

// this assumes your paywall only has one item to purchase.
// you may have a dynamic tableview of items and use `indexPath.row` instead of `first`.
guard let package = offering?.availablePackages.first else {
    print("No available package")
    return
}
Purchases.shared.purchasePackage(package) { (trans, info, error, cancelled) in
    // handle purchase
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64390610

复制
相关文章

相似问题

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