StoreKit是否会为旧版App过滤不支持的产品类型?
关于StoreKit跨版本IAP产品查询的问题解答
核心结论
1.0版本会获取到2.0的自动续期订阅产品
只要你在App Store Connect中创建并激活了自动续期订阅产品,且1.0版本的SKProductsRequest请求包含了这些订阅的产品ID,StoreKit就会返回对应的产品信息。StoreKit本身不会根据应用版本自动过滤未在该版本中声明支持的产品类型。必须添加兼容代码过滤不支持的项目
1.0版本没有处理自动续期订阅的逻辑(比如订阅状态验证、续订流程、用户权益同步等),如果不对这些产品进行过滤,用户可能会在1.0版本中看到并尝试购买订阅,导致流程异常,甚至触发审核问题或用户投诉。
具体实现方案
有两种可靠的处理方式:
- 方式一:分版本维护产品ID列表
为1.0版本单独维护非消耗型产品的ID列表,仅请求该列表内的产品,完全避免获取到订阅产品。 - 方式二:过滤返回的产品结果
在获取到产品列表后,通过产品类型属性过滤掉自动续期订阅:- StoreKit 1 示例代码:
func filterSupportedProducts(from products: [SKProduct]) -> [SKProduct] { return products.filter { product in // 仅保留无订阅周期的非消耗型产品 product.subscriptionPeriod == nil } } - StoreKit 2 示例代码:
import StoreKit func filterSupportedProducts(from products: [Product]) -> [Product] { return products.filter { product in product.type != .autoRenewable } }
- StoreKit 1 示例代码:
关于审核规则与StoreKit过滤的说明
App Store要求新增产品类型需提交对应版本审核,是指应用发布新版本时,必须确保代码已适配新增的产品类型,审核时会验证这一适配性。但StoreKit本身不会遵循该规则自动过滤产品——它仅负责返回你请求的所有有效产品ID对应的信息,与应用版本无关,因此必须由开发者自行控制产品范围。
内容的提问来源于stack exchange,提问作者webber
相关产品推荐
相关产品推荐

