Apple неправильно считает покупку в приложении уже подписанной

Я работаю над покупкой внутри приложения для уже запущенного приложения. Название приложения предположим, что TestApp, я реализовал в нем покупку приложения, и предположим, что пользователь подписывается на автоматическое продление подписки с помощью своего идентификатора iTunes (скажем, itunes@example.com), чтобы купить подписку с автоматическим продлением, имеющую идентификатор "com.subscription.example" для его приложение, в которое входит его личный кабинет (personal@gmail.com).

Его идентификатор электронной почты iTunes и личный идентификатор электронной почты здесь отличаются. Все работает нормально, оплата произведена, и затем я обновляюсь соответствующим образом и нажимаю соответствующие API.

Теперь проблема: если он входит в свое приложение с идентификатором электронной почты своего друга, предположим "friend@gmail.com" и покупает для него подписку ("com.subscription.example"), используя тот же идентификатор Apple (т.е. itunes@example.com)) при покупке Apple скажет, что этот продукт уже подписан и перейдет в блок успешной оплаты покупки, после чего все API и т. д. будут включены соответствующим образом, поэтому новая подписка будет активна на аккаунте его друга без какой-либо оплаты. Что можно сделать?

Это функция, которую я использую для оплаты покупки (я использую swiftystorekit), для этого нужен только идентификатор покупки в качестве параметров.

  func purchaseProduct(id: String) {
if self.canMakePurchases() {
  UIApplication.shared.isNetworkActivityIndicatorVisible = true
  purchaseButton.isUserInteractionEnabled = false
  purchaseButton.alpha = 0.6
  NVActivityIndicatorPresenter.sharedInstance.startAnimating(activityData)
  purchaseButton.setTitle("Please wait..", for: .normal)
  SwiftyStoreKit.purchaseProduct(id, quantity: 1, atomically: true) { result in
    NVActivityIndicatorPresenter.sharedInstance.stopAnimating()
    UIApplication.shared.isNetworkActivityIndicatorVisible = false
    self.purchaseButton.isUserInteractionEnabled = true
    self.purchaseButton.setTitle("Purchase", for: .normal)
    self.purchaseButton.alpha = 1
    switch result {
    case .success(let purchase):
      print("Purchase Success: \(purchase.productId)")
      let transactionId = purchase.transaction.transactionIdentifier
      self.createSubscription(status:"active",transID : transactionId!)
    case .error(let error):
      self.createSubscription(status: "not_subscribed",transID:"")
      switch error.code { 
      case .unknown: print("Unknown error. Please contact support")
      case .clientInvalid: print("Not allowed to make the payment")
      case .paymentCancelled: break
      case .paymentInvalid: print("The purchase identifier was invalid")
      case .paymentNotAllowed: print("The device is not allowed to make the payment")
      case .storeProductNotAvailable: print("The product is not available in the current storefront")
      case .cloudServicePermissionDenied: print("Access to cloud service information is not allowed")
      case .cloudServiceNetworkConnectionFailed: print("Could not connect to the network")
      case .cloudServiceRevoked: print("User has revoked permission to use this cloud service")
      }
    }
  }
} else {
  UIAlertView(title: "Sorry",
              message: "Purchases are disabled in your device!",
              delegate: nil, cancelButtonTitle: "OK").show()
}
}

0 ответов

Другие вопросы по тегам