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()
}
}