You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

应用审核阶段仅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端有横竖屏切换逻辑,可能导致内购请求时机错误(如视图未加载完成时发起请求),需验证不同屏幕状态下的请求流程。

代码优化建议

  1. 补充错误回调日志,便于定位问题:
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)
    }
}
  1. 增加请求重试机制:首次请求返回空产品或无效ID时,延迟2-3秒重新发起请求,规避网络波动导致的单次请求失败。
  2. 优化按钮状态管理:发起请求前就禁用按钮并显示加载状态,请求完成后无论成功失败都恢复交互,避免用户重复点击。
  3. 记录无效ID详情:将invalidProductIdentifiers的内容打印或上传到日志服务,确认审核时返回的ID是否与配置一致,排除拼写错误。

内容的提问来源于stack exchange,提问作者Joses

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:01:40