#ios #storekit
#iOS #storekit
Вопрос:
Apple только что выпустила Family Sharing для покупок в приложении, я пытаюсь добавить это в свои приложения с помощью автоматически возобновляемых подписок, но безуспешно.
Нужна ли мне какая-либо дополнительная настройка только для того, чтобы заставить его работать?
У меня есть логика восстановления / покупки, реализованная в приложении следующим образом:
public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchased:
complete(transaction: transaction)
break
case .failed:
fail(transaction: transaction)
break
case .restored:
restore(transaction: transaction)
break
case .deferred:
break
case .purchasing:
break
}
}
}
private func complete(transaction: SKPaymentTransaction) {
print("complete...")
deliverPurchaseNotificationFor(identifier: transaction.payment.productIdentifier)
SKPaymentQueue.default().finishTransaction(transaction)
promotedPayment = nil
}
private func restore(transaction: SKPaymentTransaction) {
guard let productIdentifier = transaction.original?.payment.productIdentifier else { return }
print("restore... (productIdentifier)")
deliverPurchaseNotificationFor(identifier: productIdentifier)
SKPaymentQueue.default().finishTransaction(transaction)
}
private func fail(transaction: SKPaymentTransaction) {
print("fail...")
if let transactionError = transaction.error as NSError? {
if transactionError.code != SKError.paymentCancelled.rawValue {
let failedString = "Transaction Error: (String(describing: transaction.error?.localizedDescription ?? ""))"
print(failedString)
NotificationCenter.default.post(name: NSNotification.Name(rawValue: IAPHelper.failedNotification), object: failedString)
}
}
NotificationCenter.default.post(name: NSNotification.Name(rawValue: IAPHelper.failedNotification), object: nil)
SKPaymentQueue.default().finishTransaction(transaction)
promotedPayment = nil
}
private func deliverPurchaseNotificationFor(identifier: String?) {
guard let identifier = identifier else { return }
purchasedProductIdentifiers.insert(identifier)
UserDefaults.standard.set(true, forKey: identifier)
UserDefaults.standard.synchronize()
NotificationCenter.default.post(name: NSNotification.Name(rawValue: IAPHelper.purchaseNotification), object: identifier)
}