SwiftUI - 使用 RevenueCat 和 Firebase 的应用内自动更新订阅

问题描述

所以对于上下文,它是有效的。但为了让您了解我在做什么,我想基本上做到以下几点:

创建用户时,他们有一个 Bool 键,该键自动设置为 false。基于该键,我可以配置向用户显示内容。当用户购买并成功时,此键设置为 true。伟大的。如果我将其设置为 false,应用程序会阻止/将用户导航到另一个视图。

问题出在我这里,如果我用他们自己的 Firebase 身份验证 ID 创建另一个用户,然后去恢复,用户似乎可以恢复我最初使用另一个帐户购买的任何计划。我不知道是由于 RevenueCat 使用设备 UID 还是基于我的设备生成了 ID,但是,在我的 RevenueCat 仪表板中,它显示的是 Firebase 用户 ID。所以这没有意义。我已经在网上查看并查看了他们的文档,但似乎没有任何帮助。

我在我的应用程序中对我的 ProductID 进行了硬编码,并对其进行了初始化,以便它们随时可用。我是这样购买的:

订阅视图中:

  subscriptionviewmodel.makeSubscriptionPurchase(selectedProduct: packages.productID!) {
              API.USER_API.updateUseRSSubscriptionStatus { (user) in
            self.SESSION.userSession = user
          } onError: { (error) in
         print(error)
       }
 }

我的采购服务类-

class PurchaseService {
    static func purchase(productID: String?,successfulPurchase: @escaping () -> Void) {
        guard  productID != nil else {return}
        var skProduct: SKProduct?
        guard let USER_ID = Auth.auth().currentUser?.uid else {return}
        Purchases.shared.identify(USER_ID) { (purchaserInfo,error) in
        print(purchaserInfo)
        Purchases.shared.products([productID!]) { (products) in
            if !products.isEmpty {
                skProduct = products[0]
                Purchases.shared.purchaseProduct(skProduct!) { (transaction,purchaseInfo,error,userCancelled) in
                    if let error = error {
                        print(error.localizedDescription)
                    }
                    if error == nil && !userCancelled {
                        successfulPurchase()
                    }
                }
                }
            }
        }
    }
}

我的订阅视图模式代码

  func makeSubscriptionPurchase(selectedProduct: String,onSuccess: @escaping () -> Void) {
        if !prymPremProdcuts.isEmpty {
        PurchaseService.purchase(productID: selectedProduct) {
            print("PURCHASEMADE")
            onSuccess()
                }
            }
        }

在我的 RestorePurchasesView 中:

func configureCatContentFor(purchaserInfo: Purchases.PurchaserInfo?) {
      
      // set the content based on the user subscription status
      if let purchaserInfo = purchaserInfo {
          
          if purchaserInfo.entitlements["PRYMPremium"]?.isActive == true {
              
              print("hey there premium")
              isHidden = true
              
              let dateFormatter = DateFormatter()
              dateFormatter.dateStyle = .medium
              
              if let buyDate = purchaserInfo.purchaseDate(forEntitlement: "") {
                self.purchaseDate = "Purchase Date: \(dateFormatter.string(from: buyDate))"
              }
              if let endDate = purchaserInfo.expirationDate(forEntitlement: "") {
                self.expirationDate = "Expiration Date: \(dateFormatter.string(from: endDate))"
                  
              }
              
          } else {
              print("Not premium")
        }
      }
  }

每当我点击我的 RestorePurchases 查看控制台输出:“hey there premium”,这意味着用户有权,但是,这是一个新帐户?

如果有人可以帮助我,将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)