96 lines
3.1 KiB
Swift
96 lines
3.1 KiB
Swift
//
|
||
// StoreKitState.swift
|
||
// StoreKit2Manager
|
||
//
|
||
// Created by xiaopin on 2025/12/6.
|
||
//
|
||
|
||
import Foundation
|
||
import StoreKit
|
||
|
||
/// StoreKit 状态枚举
|
||
public enum StoreKitState: Equatable {
|
||
/// 空闲状态
|
||
case idle
|
||
|
||
/// 正在加载产品
|
||
case loadingProducts
|
||
|
||
/// 正在加载已购买产品
|
||
case loadingPurchases
|
||
|
||
/// 已购买产品加载完成
|
||
case purchasesLoaded
|
||
|
||
/// 正在购买指定产品
|
||
case purchasing(String) // 产品ID
|
||
|
||
/// 购买成功
|
||
case purchaseSuccess(String) // 产品ID
|
||
|
||
/// 购买待处理(需要用户操作)
|
||
case purchasePending(String) // 产品ID
|
||
|
||
/// 用户取消购买
|
||
case purchaseCancelled(String) // 产品ID
|
||
|
||
/// 购买失败
|
||
case purchaseFailed(String, Error) // 产品ID, 错误
|
||
|
||
/// 正在恢复购买
|
||
case restoringPurchases
|
||
|
||
/// 恢复购买成功
|
||
case restorePurchasesSuccess
|
||
|
||
/// 恢复购买失败
|
||
case restorePurchasesFailed(Error)
|
||
|
||
/// 购买已退款
|
||
case purchaseRefunded(String) // 产品ID
|
||
|
||
/// 购买已撤销
|
||
case purchaseRevoked(String) // 产品ID
|
||
|
||
/// 订阅已取消
|
||
/// - Parameters:
|
||
/// - productId: 产品ID
|
||
/// - isFreeTrialCancelled: 是否在免费试用期取消(true 表示在免费试用期内取消,false 表示在付费订阅期内取消)
|
||
case subscriptionCancelled(String, isFreeTrialCancelled: Bool)
|
||
|
||
/// 发生错误
|
||
case error(Error)
|
||
|
||
public static func == (lhs: StoreKitState, rhs: StoreKitState) -> Bool {
|
||
switch (lhs, rhs) {
|
||
case (.idle, .idle),
|
||
(.loadingProducts, .loadingProducts),
|
||
(.loadingPurchases, .loadingPurchases),
|
||
(.purchasesLoaded, .purchasesLoaded):
|
||
return true
|
||
case (.purchasing(let lhsId), .purchasing(let rhsId)),
|
||
(.purchaseSuccess(let lhsId), .purchaseSuccess(let rhsId)),
|
||
(.purchasePending(let lhsId), .purchasePending(let rhsId)),
|
||
(.purchaseCancelled(let lhsId), .purchaseCancelled(let rhsId)):
|
||
return lhsId == rhsId
|
||
case (.purchaseFailed(let lhsId, _), .purchaseFailed(let rhsId, _)):
|
||
return lhsId == rhsId
|
||
case (.restoringPurchases, .restoringPurchases),
|
||
(.restorePurchasesSuccess, .restorePurchasesSuccess):
|
||
return true
|
||
case (.restorePurchasesFailed(let lhsError), .restorePurchasesFailed(let rhsError)):
|
||
return lhsError.localizedDescription == rhsError.localizedDescription
|
||
case (.purchaseRefunded(let lhsId), .purchaseRefunded(let rhsId)),
|
||
(.purchaseRevoked(let lhsId), .purchaseRevoked(let rhsId)):
|
||
return lhsId == rhsId
|
||
case (.subscriptionCancelled(let lhsId, let lhsIsFreeTrial), .subscriptionCancelled(let rhsId, let rhsIsFreeTrial)):
|
||
return lhsId == rhsId && lhsIsFreeTrial == rhsIsFreeTrial
|
||
case (.error(let lhsError), .error(let rhsError)):
|
||
return lhsError.localizedDescription == rhsError.localizedDescription
|
||
default:
|
||
return false
|
||
}
|
||
}
|
||
}
|
||
|