应用审核阶段仅iPad端In App Purchases功能异常求助
iOS应用因Guideline 2.1被拒:iPad端内购SKProductsRequest返回无效ID无法复现
问题描述
我的应用因「Guideline 2.1 - Performance - App Completeness」被拒,审核方反馈在运行iOS 15.6.1的iPad(Wi-Fi环境)上点击“购买”按钮无后续操作。我已在多版本iOS的模拟器及真机上多次测试内购功能均正常,提交iPhone(iOS 15.6.1)端正常运行的录屏后,审核方回复iPhone应用在iPad上也需正常运行。目前定位到是SKProductsRequest返回0个products及invalidProductIdentifiers,导致点击按钮时弹出错误弹窗,但我无法复现该问题。相关代码如下:
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { DispatchQueue.main.async { [self] in self.appleProducts = response.products paymentButton.hideLoading() } invalidIdentifiers = response.invalidProductIdentifiers } @IBAction func buttonPressed(_ sender: PrimaryButton) { if appleProducts.count != 0 { let payment = SKPayment(product: appleProducts[0]) SKPaymentQueue.default().add(payment) sender.showLoading() sender.isUserInteractionEnabled = false } else { reusableDialog.createErrorDialog(title: "Payment Error", message: "An error has occured, please try again later", container: self.view) } }
排查方向
- 检查内购ID的地区可用性:确认内购项目是否在审核团队所在地区(通常为美国区)上架,部分内购可能仅限定特定地区,若你测试用账号为其他地区,就会出现审核时iPad端无法获取产品的情况。
- 验证iPad端测试账号状态:尝试使用美国区账号,在iOS15.6.1的iPad真机上测试,排查审核账号是否存在支付方式未绑定、地区不匹配或内购限制等问题。
- 排查网络环境差异:审核环境的Wi-Fi可能存在代理或防火墙,导致请求超时或失败。可在代码中添加超时处理,同时实现错误回调收集具体日志。
- 确认内购项目状态:登录App Store Connect检查内购项目是否处于「已批准」状态,是否关联正确App ID、有无地区限制,避免因项目配置未生效导致审核时无法获取。
- 测试iPad横竖屏适配:若应用在iPad端有横竖屏切换逻辑,可能导致内购请求时机错误(如视图未加载完成时发起请求),需验证不同屏幕状态下的请求流程。
代码优化建议
- 补充错误回调日志,便于定位问题:
func request(_ request: SKRequest, didFailWithError error: Error) { print("SKProductsRequest failed: \(error.localizedDescription)") DispatchQueue.main.async { self.paymentButton.hideLoading() self.reusableDialog.createErrorDialog(title: "Payment Error", message: error.localizedDescription, container: self.view) } }
- 增加请求重试机制:首次请求返回空产品或无效ID时,延迟2-3秒重新发起请求,规避网络波动导致的单次请求失败。
- 优化按钮状态管理:发起请求前就禁用按钮并显示加载状态,请求完成后无论成功失败都恢复交互,避免用户重复点击。
- 记录无效ID详情:将
invalidProductIdentifiers的内容打印或上传到日志服务,确认审核时返回的ID是否与配置一致,排除拼写错误。
内容的提问来源于stack exchange,提问作者Joses
相关产品推荐
相关产品推荐

