Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何知道iOS订阅是否处于活动状态_Ios_In App Subscription - Fatal编程技术网

如何知道iOS订阅是否处于活动状态

如何知道iOS订阅是否处于活动状态,ios,in-app-subscription,Ios,In App Subscription,我正在向我的应用程序添加iOS inapp订阅。下面是Ray Wenderlich网页上的一篇精彩教程: 本教程基本上遵循以下步骤: 认购 收到收据 在Apple中验证收据(这应该通过后端完成,但为了简单起见,教程会在应用程序中完成) 一旦收据经过验证,苹果就会用JSON解析的收据进行响应 该应用程序在本地存储购买的项目,并将其与sessionID(创建的UUID)关联 完成教程后,似乎一切都很好,但我有两个问题的困难 每次用户进入应用程序时,都会检查其是否具有有效的sessionID和有效的

我正在向我的应用程序添加iOS inapp订阅。下面是Ray Wenderlich网页上的一篇精彩教程:

本教程基本上遵循以下步骤:

  • 认购
  • 收到收据
  • 在Apple中验证收据(这应该通过后端完成,但为了简单起见,教程会在应用程序中完成)
  • 一旦收据经过验证,苹果就会用JSON解析的收据进行响应
  • 该应用程序在本地存储购买的项目,并将其与sessionID(创建的UUID)关联
  • 完成教程后,似乎一切都很好,但我有两个问题的困难

    每次用户进入应用程序时,都会检查其是否具有有效的sessionID和有效的收据:

    guard SubscriptionService.shared.currentSessionId != nil,
        SubscriptionService.shared.hasReceiptData else {
        showRestoreAlert()
        return
      }
      loadSelfies()
    
    hasReceiptData执行以下操作:

      var hasReceiptData: Bool {
        return loadReceipt() != nil
      }
    
      private func loadReceipt() -> Data? {
        guard let url = Bundle.main.appStoreReceiptURL else {
          return nil
        }
    
        do {
          let data = try Data(contentsOf: url)
          return data
        } catch {
          print("Error loading receipt data: \(error.localizedDescription)")
          return nil
        }
      }
    }
    
    这些方法只检查收据是否存在,而不检查其他内容

    要检查currentSessionId,请使用以下方法:

      var currentSessionId: String? {
        didSet {
          NotificationCenter.default.post(name: SubscriptionService.sessionIdSetNotification, object: currentSessionId)
        }
      }
    
    并且currentSessionId的值在Apple响应收据验证时设置:

    func UploadReceive(完成:((成功:Bool)->Void)?=nil){
    如果let receiptData=loadReceipt(){
    SelfieService.shared.upload(收据:receiptData){[weak self](结果)在
    guard let strongSelf=self-else{return}
    切换结果{
    案例。成功(让结果):
    strongSelf.currentSessionId=result.sessionId
    strongSelf.currentSubscription=result.currentSubscription
    完成?(真)
    案例。失败(let错误):
    打印(“