|
@@ -65,6 +65,7 @@ class KMInAppPurchaseManager: NSObject {
|
|
public static let manager = KMInAppPurchaseManager()
|
|
public static let manager = KMInAppPurchaseManager()
|
|
|
|
|
|
var restoreCompletion: KMPurchaseRestoreCompletion?
|
|
var restoreCompletion: KMPurchaseRestoreCompletion?
|
|
|
|
+ var checkSubscriptionStatusCompletion: KMPurchaseRestoreCompletion?
|
|
var fetchProductCompletion: KMPurchaseFetchProductCompletion?
|
|
var fetchProductCompletion: KMPurchaseFetchProductCompletion?
|
|
var purchaseProductCompletion: KMPurchaseCompletion?
|
|
var purchaseProductCompletion: KMPurchaseCompletion?
|
|
var availableProducts: [SKProduct] = []
|
|
var availableProducts: [SKProduct] = []
|
|
@@ -77,9 +78,11 @@ class KMInAppPurchaseManager: NSObject {
|
|
|
|
|
|
var orderId: String?
|
|
var orderId: String?
|
|
var isPurchase: Bool = false
|
|
var isPurchase: Bool = false
|
|
|
|
+ var isCheckSubscriptionStatus = false
|
|
|
|
|
|
deinit {
|
|
deinit {
|
|
isPurchase = false
|
|
isPurchase = false
|
|
|
|
+ isCheckSubscriptionStatus = false
|
|
SKPaymentQueue.default().remove(self)
|
|
SKPaymentQueue.default().remove(self)
|
|
}
|
|
}
|
|
|
|
|
|
@@ -167,6 +170,32 @@ class KMInAppPurchaseManager: NSObject {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ //判断是否订阅过
|
|
|
|
+ func checkSubscriptionStatus(_ completion: @escaping KMPurchaseCheckSubscriptionStatusCompletion) {
|
|
|
|
+ self.isCheckSubscriptionStatus = true
|
|
|
|
+ self.restorePurchases { [weak self] isSuccess, error in
|
|
|
|
+ if isSuccess {
|
|
|
|
+ let paymentQueue = SKPaymentQueue.default()
|
|
|
|
+ let transactions = paymentQueue.transactions
|
|
|
|
+
|
|
|
|
+ for transaction in transactions {
|
|
|
|
+ if transaction.transactionState == .purchased ||
|
|
|
|
+ transaction.transactionState == .restored {
|
|
|
|
+ // 找到已购买或已恢复的交易,表示用户已订阅
|
|
|
|
+ DispatchQueue.main.async {
|
|
|
|
+ completion(true)
|
|
|
|
+ }
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ DispatchQueue.main.async {
|
|
|
|
+ completion(false)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ self?.isCheckSubscriptionStatus = false
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
extension KMInAppPurchaseManager: SKProductsRequestDelegate {
|
|
extension KMInAppPurchaseManager: SKProductsRequestDelegate {
|
|
@@ -204,6 +233,16 @@ extension KMInAppPurchaseManager: SKProductsRequestDelegate {
|
|
}
|
|
}
|
|
|
|
|
|
extension KMInAppPurchaseManager: SKPaymentTransactionObserver {
|
|
extension KMInAppPurchaseManager: SKPaymentTransactionObserver {
|
|
|
|
+ func paymentQueueDidChangeStorefront(_ queue: SKPaymentQueue) {
|
|
|
|
+ KMPrint("paymentQueueDidChangeStorefront")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // Sent when entitlements for a user have changed and access to the specified IAPs has been revoked.
|
|
|
|
+ func paymentQueue(_ queue: SKPaymentQueue, didRevokeEntitlementsForProductIdentifiers productIdentifiers: [String]) {
|
|
|
|
+ KMPrint("didRevokeEntitlementsForProductIdentifiers")
|
|
|
|
+ }
|
|
|
|
+
|
|
func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment, for product: SKProduct) -> Bool {
|
|
func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment, for product: SKProduct) -> Bool {
|
|
// Handle the purchase intent here
|
|
// Handle the purchase intent here
|
|
// Return true to allow the purchase or false to deny it
|
|
// Return true to allow the purchase or false to deny it
|
|
@@ -211,7 +250,10 @@ extension KMInAppPurchaseManager: SKPaymentTransactionObserver {
|
|
}
|
|
}
|
|
|
|
|
|
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
|
|
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
|
|
- KMPrint("服务器返回数据")
|
|
|
|
|
|
+ KMPrint("苹果服务器返回数据")
|
|
|
|
+ if isCheckSubscriptionStatus {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
if transactions.count > 0 {
|
|
if transactions.count > 0 {
|
|
var resultTransaction = transactions.first!
|
|
var resultTransaction = transactions.first!
|
|
var isExist = false
|
|
var isExist = false
|
|
@@ -242,10 +284,16 @@ extension KMInAppPurchaseManager: SKPaymentTransactionObserver {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if !isExist {
|
|
if !isExist {
|
|
- handleError(transaction: resultTransaction)
|
|
|
|
|
|
+ self.handleAction(state: .productCorrespondenceFailed)
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- handleError(transaction: nil)
|
|
|
|
|
|
+ self.handleAction(state: .productCorrespondenceFailed)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for transaction in queue.transactions {
|
|
|
|
+ if transaction.transactionState != .purchasing {
|
|
|
|
+ SKPaymentQueue.default().finishTransaction(transaction)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -353,6 +401,9 @@ extension KMInAppPurchaseManager: SKPaymentTransactionObserver {
|
|
|
|
|
|
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
|
|
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
|
|
KMPrint("paymentQueueRestoreCompletedTransactionsFinished")
|
|
KMPrint("paymentQueueRestoreCompletedTransactionsFinished")
|
|
|
|
+ if isCheckSubscriptionStatus {
|
|
|
|
+ restoreCompletion?(true,.success)
|
|
|
|
+ }
|
|
// 获取购买凭证
|
|
// 获取购买凭证
|
|
if let receiptURL = Bundle.main.appStoreReceiptURL,
|
|
if let receiptURL = Bundle.main.appStoreReceiptURL,
|
|
let receiptData = try? Data(contentsOf: receiptURL) {
|
|
let receiptData = try? Data(contentsOf: receiptURL) {
|
|
@@ -363,6 +414,7 @@ extension KMInAppPurchaseManager: SKPaymentTransactionObserver {
|
|
}
|
|
}
|
|
|
|
|
|
func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
|
|
func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
|
|
|
|
+ restoreCompletion?(false,.success)
|
|
KMPrint("restoreCompletedTransactionsFailedWithError")
|
|
KMPrint("restoreCompletedTransactionsFailedWithError")
|
|
}
|
|
}
|
|
|
|
|